Remove redundant NOTICE symbolic link. am: 9906b4bd3c am: 0f76c9f4e2 am: e1c1f88fd5 am: c3c4aa316f am: f5f1db7983 am: 0a08957b96

Original change: https://android-review.googlesource.com/c/platform/external/deqp-deps/glslang/+/1268681

Change-Id: If79867c2f7921fde269987cfed2d3c1dd738169c
diff --git a/.appveyor.yml b/.appveyor.yml
index 32e8f2b..44d5f04 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -17,6 +17,20 @@
   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
diff --git a/BUILD.bazel b/BUILD.bazel
new file mode 100644
index 0000000..5930608
--- /dev/null
+++ b/BUILD.bazel
@@ -0,0 +1,247 @@
+package(
+    default_visibility = ["//visibility:public"],
+)
+
+# Description:
+#
+# Khronos reference front-end for GLSL and ESSL, and sample SPIR-V generator.
+
+licenses(["notice"])
+
+exports_files(["LICENSE"])
+
+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/MachineIndependent/*.cpp",
+            "glslang/MachineIndependent/preprocessor/*.cpp",
+            "hlsl/*.cpp",
+        ],
+        exclude = [
+            "glslang/MachineIndependent/pch.cpp",
+            "glslang/MachineIndependent/pch.h",
+            "hlsl/pch.cpp",
+            "hlsl/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/Include/*.h",
+        "glslang/MachineIndependent/*.h",
+        "glslang/MachineIndependent/preprocessor/*.h",
+        "hlsl/*.h",
+    ]) + [
+        "OGLCompilersDLL/InitializeDll.h",
+        "StandAlone/DirStackFileIncluder.h",
+        "glslang/OSDependent/osinclude.h",
+        "glslang/Public/ShaderLang.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/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/spirv.hpp",
+    ],
+    cmd = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/",
+)
+
+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",
+    ],
+    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 55f21ad..49b4b0a 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -33,6 +33,19 @@
 
 import("//build_overrides/glslang.gni")
 
+# Both Chromium and Fuchsia use by default a set of warning errors
+# that is far too strict to compile this project. These are also
+# typically appended after |cflags|, overriding target-specific
+# definitions. To work around this, determine which configs to
+# add and remove in order to succesfully build the project.
+if (defined(is_fuchsia_tree) && is_fuchsia_tree) {
+  _configs_to_remove = [ "//build/config:default_warnings" ]
+  _configs_to_add = []
+} else {
+  _configs_to_remove = [ "//build/config/compiler:chromium_code" ]
+  _configs_to_add = [ "//build/config/compiler:no_chromium_code" ]
+}
+
 spirv_tools_dir = glslang_spirv_tools_dir
 
 config("glslang_public") {
@@ -47,14 +60,17 @@
   sources = [
     "OGLCompilersDLL/InitializeDll.cpp",
     "OGLCompilersDLL/InitializeDll.h",
+    "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/GlslangToSpv.cpp",
     "SPIRV/GlslangToSpv.h",
     "SPIRV/InReadableOrder.cpp",
     "SPIRV/Logger.cpp",
     "SPIRV/Logger.h",
+    "SPIRV/NonSemanticDebugPrintf.h",
     "SPIRV/SPVRemapper.cpp",
     "SPIRV/SPVRemapper.h",
     "SPIRV/SpvBuilder.cpp",
@@ -159,7 +175,7 @@
   }
 
   if (is_clang) {
-    cflags_cc = [
+    cflags = [
       "-Wno-extra-semi",
       "-Wno-ignored-qualifiers",
       "-Wno-implicit-fallthrough",
@@ -181,6 +197,9 @@
     "${spirv_tools_dir}:spvtools_opt",
     "${spirv_tools_dir}:spvtools_val",
   ]
+
+  configs -= _configs_to_remove
+  configs += _configs_to_add
 }
 
 source_set("glslang_default_resource_limits_sources") {
@@ -192,6 +211,9 @@
     ":glslang_sources",
   ]
   public_configs = [ ":glslang_public" ]
+
+  configs -= _configs_to_remove
+  configs += _configs_to_add
 }
 
 executable("glslang_validator") {
@@ -207,6 +229,9 @@
     ":glslang_default_resource_limits_sources",
     ":glslang_sources",
   ]
+
+  configs -= _configs_to_remove
+  configs += _configs_to_add
 }
 
 executable("spirv-remap") {
@@ -217,4 +242,7 @@
   deps = [
     ":glslang_sources",
   ]
+
+  configs -= _configs_to_remove
+  configs += _configs_to_add
 }
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c2adeb0..cd9baf8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,6 +6,9 @@
 endif()
 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)
 
@@ -13,6 +16,7 @@
 include(CMakeDependentOption)
 
 option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
+option(BUILD_EXTERNAL "Build external dependencies in /External" ON)
 
 set(LIB_TYPE STATIC)
 
@@ -28,14 +32,34 @@
 
 option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" ON)
 
-option(ENABLE_GLSLANG_WEB "Reduces glslang to minimum needed for web use" OFF)
-option(ENABLE_GLSLANG_WEB_DEVEL "For ENABLE_GLSLANG_WEB builds, enables compilation error messages" OFF)
-option(ENABLE_EMSCRIPTEN_SINGLE_FILE "If using Emscripten, enables SINGLE_FILE build" OFF)
-option(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE "If using Emscripten, builds to run on Node instead of Web" OFF)
+option(ENABLE_GLSLANG_JS
+    "If using Emscripten, build glslang.js. Otherwise, builds a sample executable for binary-size testing." OFF)
+CMAKE_DEPENDENT_OPTION(ENABLE_GLSLANG_WEBMIN
+    "Reduces glslang to minimum needed for web use"
+    OFF "ENABLE_GLSLANG_JS"
+    OFF)
+CMAKE_DEPENDENT_OPTION(ENABLE_GLSLANG_WEBMIN_DEVEL
+    "For ENABLE_GLSLANG_WEBMIN builds, enables compilation error messages"
+    OFF "ENABLE_GLSLANG_WEBMIN"
+    OFF)
+CMAKE_DEPENDENT_OPTION(ENABLE_EMSCRIPTEN_SINGLE_FILE
+    "If using Emscripten, enables SINGLE_FILE build"
+    OFF "ENABLE_GLSLANG_JS AND EMSCRIPTEN"
+    OFF)
+CMAKE_DEPENDENT_OPTION(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE
+    "If using Emscripten, builds to run on Node instead of Web"
+    OFF "ENABLE_GLSLANG_JS AND EMSCRIPTEN"
+    OFF)
 
-CMAKE_DEPENDENT_OPTION(ENABLE_HLSL "Enables HLSL input support" ON "NOT ENABLE_GLSLANG_WEB" OFF)
+CMAKE_DEPENDENT_OPTION(ENABLE_HLSL
+    "Enables HLSL input support"
+    ON "NOT ENABLE_GLSLANG_WEBMIN"
+    OFF)
 
+option(ENABLE_RTTI "Enables RTTI" OFF)
 option(ENABLE_OPT "Enables spirv-opt capability if present" ON)
+option(ENABLE_PCH "Enables Precompiled header" ON)
+option(ENABLE_CTEST "Enables testing" ON)
 
 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
     set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
@@ -51,7 +75,7 @@
 
 # Precompiled header macro. Parameters are source file list and filename for pch cpp file.
 macro(glslang_pch SRCS PCHCPP)
-  if(MSVC AND CMAKE_GENERATOR MATCHES "^Visual Studio")
+  if(MSVC AND CMAKE_GENERATOR MATCHES "^Visual Studio" AND NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND ENABLE_PCH)
     set(PCH_NAME "$(IntDir)\\pch.pch")
     # make source files use/depend on PCH_NAME
     set_source_files_properties(${${SRCS}} PROPERTIES COMPILE_FLAGS "/Yupch.h /FIpch.h /Fp${PCH_NAME} /Zm300" OBJECT_DEPENDS "${PCH_NAME}")
@@ -62,19 +86,21 @@
 endmacro(glslang_pch)
 
 project(glslang)
-# make testing optional
-include(CTest)
+
+if(ENABLE_CTEST)
+    include(CTest)
+endif()
 
 if(ENABLE_HLSL)
     add_definitions(-DENABLE_HLSL)
 endif(ENABLE_HLSL)
 
-if(ENABLE_GLSLANG_WEB)
+if(ENABLE_GLSLANG_WEBMIN)
     add_definitions(-DGLSLANG_WEB)
-    if(ENABLE_GLSLANG_WEB_DEVEL)
+    if(ENABLE_GLSLANG_WEBMIN_DEVEL)
         add_definitions(-DGLSLANG_WEB_DEVEL)
-    endif(ENABLE_GLSLANG_WEB_DEVEL)
-endif(ENABLE_GLSLANG_WEB)
+    endif(ENABLE_GLSLANG_WEBMIN_DEVEL)
+endif(ENABLE_GLSLANG_WEBMIN)
 
 if(WIN32)
     set(CMAKE_DEBUG_POSTFIX "d")
@@ -92,45 +118,42 @@
     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.
-    add_compile_options(-fno-rtti)
-elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
+    if(NOT ENABLE_RTTI)
+        add_compile_options(-fno-rtti)
+    endif()
+    if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0.0")
+        add_compile_options(-Werror=deprecated-copy)
+    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.
-    add_compile_options(-fno-rtti)
-elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "MSVC")
-    add_compile_options(/GR-) # Disable RTTI
+    if(NOT ENABLE_RTTI)
+        add_compile_options(-fno-rtti)
+    endif()
+elseif(MSVC)
+    if(NOT ENABLE_RTTI)
+        add_compile_options(/GR-) # Disable RTTI
+    endif()
 endif()
 
-if(EMSCRIPTEN)
-    add_compile_options(-Os -fno-exceptions)
-    add_compile_options("SHELL: -s WASM=1")
-    add_compile_options("SHELL: -s WASM_OBJECT_FILES=0")
-    add_link_options(-Os)
-    add_link_options("SHELL: -s FILESYSTEM=0")
-    add_link_options("SHELL: --llvm-lto 1")
-    add_link_options("SHELL: --closure 1")
-    add_link_options("SHELL: -s ALLOW_MEMORY_GROWTH=1")
-
-    if(ENABLE_EMSCRIPTEN_SINGLE_FILE)
-        add_link_options("SHELL: -s SINGLE_FILE=1")
-    endif(ENABLE_EMSCRIPTEN_SINGLE_FILE)
-else()
-    if(ENABLE_GLSLANG_WEB)
-        if(MSVC)
-            add_compile_options(/Os /GR-)
-        else()
-            add_compile_options(-Os -fno-exceptions)
-            add_link_options(-Os)
+if(ENABLE_GLSLANG_JS)
+    if(MSVC)
+        add_compile_options(/Os /GR-)
+    else()
+        add_compile_options(-Os -fno-exceptions)
+        if(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC)
+            add_compile_options(-Wno-unused-parameter)
+            add_compile_options(-Wno-unused-variable -Wno-unused-const-variable)
         endif()
-    endif(ENABLE_GLSLANG_WEB)
-endif(EMSCRIPTEN)
+    endif()
+endif(ENABLE_GLSLANG_JS)
 
 # 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
-    add_compile_options(-std=c++11)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 else()
     set(CMAKE_CXX_STANDARD 11)
     set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -148,12 +171,12 @@
 
 # CMake needs to find the right version of python, right from the beginning,
 # otherwise, it will find the wrong version and fail later
-if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
+if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
     find_package(PythonInterp 3 REQUIRED)
-endif()
 
-# We depend on these for later projects, so they should come first.
-add_subdirectory(External)
+	# We depend on these for later projects, so they should come first.
+	add_subdirectory(External)
+endif()
 
 if(NOT TARGET SPIRV-Tools-opt)
     set(ENABLE_OPT OFF)
@@ -178,4 +201,29 @@
 if(ENABLE_HLSL)
     add_subdirectory(hlsl)
 endif(ENABLE_HLSL)
-add_subdirectory(gtests)
+if(ENABLE_CTEST)
+    add_subdirectory(gtests)
+endif()
+
+if(BUILD_TESTING)
+    # glslang-testsuite runs a bash script on Windows.
+    # Make sure to use '-o igncr' flag to ignore carriage returns (\r).
+    set(IGNORE_CR_FLAG "")
+    if(WIN32)
+        set(IGNORE_CR_FLAG -o igncr)
+    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)
+    else(CMAKE_CONFIGURATION_TYPES)
+        set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/localResults)
+        set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslangValidator)
+        set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/spirv-remap)
+    endif(CMAKE_CONFIGURATION_TYPES)
+
+    add_test(NAME glslang-testsuite
+        COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH}
+        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/)
+endif(BUILD_TESTING)
diff --git a/METADATA b/METADATA
index 64eb8c6..263906b 100644
--- a/METADATA
+++ b/METADATA
@@ -8,5 +8,6 @@
     value: "https://github.com/KhronosGroup/glslang.git"
   }
   version: "e9405d0b443a1849fa55b7bfeaceda586a1c37af"
+  license_type: NOTICE
   last_upgrade_date { year: 2018 month: 12 day: 14 }
 }
diff --git a/OGLCompilersDLL/CMakeLists.txt b/OGLCompilersDLL/CMakeLists.txt
index 5bb3f0e..e009674 100644
--- a/OGLCompilersDLL/CMakeLists.txt
+++ b/OGLCompilersDLL/CMakeLists.txt
@@ -9,6 +9,7 @@
 endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OGLCompiler
+    install(TARGETS OGLCompiler EXPORT OGLCompilerTargets
             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	install(EXPORT OGLCompilerTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/README.md b/README.md
index 67aee9d..ff844c0 100755
--- a/README.md
+++ b/README.md
@@ -1,35 +1,70 @@
-Also see the Khronos landing page for glslang as a reference front end:
-
-https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/
-
-The above page includes where to get binaries, and is kept up to date
-regarding the feature level of glslang.
-
-glslang
-=======
+# News
 
 [![Build Status](https://travis-ci.org/KhronosGroup/glslang.svg?branch=master)](https://travis-ci.org/KhronosGroup/glslang)
 [![Build status](https://ci.appveyor.com/api/projects/status/q6fi9cb0qnhkla68/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/master)
 
-An OpenGL and OpenGL ES shader front end and validator.
+## Planned Deprecations/Removals
+
+1. **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.
+
+2. **Visual Studio 2013, 20-July, 2020.** Keeping code compiling for MS Visual Studio 2013 will no longer be
+a goal as of July 20, 2020, the fifth anniversary of the release of Visual Studio 2015.
+
+# Glslang Components and Status
 
 There are several components:
 
-1. A GLSL/ESSL front-end for reference validation and translation of GLSL/ESSL into an AST.
+### Reference Validator and GLSL/ESSL -> AST Front End
 
-2. An HLSL front-end for translation of a broad generic HLL into the AST. See [issue 362](https://github.com/KhronosGroup/glslang/issues/362) and [issue 701](https://github.com/KhronosGroup/glslang/issues/701) for current status.
+An OpenGL GLSL and OpenGL|ES GLSL (ESSL) front-end for reference validation and translation of GLSL/ESSL into an internal abstract syntax tree (AST).
 
-3. A SPIR-V back end for translating the AST to SPIR-V.
+**Status**: Virtually complete, with results carrying similar weight as the specifications.
 
-4. A standalone wrapper, `glslangValidator`, that can be used as a command-line tool for the above.
+### HLSL -> AST Front End
 
-How to add a feature protected by a version/extension/stage/profile:  See the
-comment in `glslang/MachineIndependent/Versions.cpp`.
+An HLSL front-end for translation of an approximation of HLSL to glslang's AST form.
+
+**Status**: Partially complete. Semantics are not reference quality and input is not validated.
+This is in contrast to the [DXC project](https://github.com/Microsoft/DirectXShaderCompiler), which receives a much larger investment and attempts to have definitive/reference-level semantics.
+
+See [issue 362](https://github.com/KhronosGroup/glslang/issues/362) and [issue 701](https://github.com/KhronosGroup/glslang/issues/701) for current status.
+
+### AST -> SPIR-V Back End
+
+Translates glslang's AST to the Khronos-specified SPIR-V intermediate language.
+
+**Status**: Virtually complete.
+
+### Reflector
+
+An API for getting reflection information from the AST, reflection types/variables/etc. from the HLL source (not the SPIR-V).
+
+**Status**: There is a large amount of functionality present, but no specification/goal to measure completeness against.  It is accurate for the input HLL and AST, but only approximate for what would later be emitted for SPIR-V.
+
+### Standalone Wrapper
+
+`glslangValidator` is command-line tool for accessing the functionality above.
+
+Status: Complete.
 
 Tasks waiting to be done are documented as GitHub issues.
 
-Execution of Standalone Wrapper
--------------------------------
+## Other References
+
+Also see the Khronos landing page for glslang as a reference front end:
+
+https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/
+
+The above page, while not kept up to date, includes additional information regarding glslang as a reference validator.
+
+# How to Use Glslang
+
+## Execution of Standalone Wrapper
 
 To use the standalone binary form, execute `glslangValidator`, and it will print
 a usage statement.  Basic operation is to give it a file containing a shader,
@@ -46,8 +81,7 @@
 There is also a non-shader extension
 * `.conf` for a configuration file of limits, see usage statement for example
 
-Building
---------
+## Building
 
 Instead of building manually, you can also download the binaries for your
 platform directly from the [master-tot release][master-tot-release] on GitHub.
@@ -70,7 +104,7 @@
 The following steps assume a Bash shell. On Windows, that could be the Git Bash
 shell or some other shell of your choosing.
 
-#### 1) Check-Out this project 
+#### 1) Check-Out this project
 
 ```bash
 cd <parent of where you want glslang to be>
@@ -94,8 +128,8 @@
 ```
 
 If you wish to assure that SPIR-V generated from HLSL is legal for Vulkan,
-or wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, install
-spirv-tools with this:
+wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, or wish to run the
+integrated test suite, install spirv-tools with this:
 
 ```bash
 ./update_glslang_sources.py
@@ -118,6 +152,14 @@
 # "Release" (for CMAKE_BUILD_TYPE) could also be "Debug" or "RelWithDebInfo"
 ```
 
+For building on Android:
+```bash
+cmake $SOURCE_DIR -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DANDROID_STL=c++_static -DANDROID_PLATFORM=android-24 -DCMAKE_SYSTEM_NAME=Android -DANDROID_TOOLCHAIN=clang -DANDROID_ARM_MODE=arm -DCMAKE_MAKE_PROGRAM=$ANDROID_NDK_ROOT/prebuilt/linux-x86_64/bin/make -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake
+# If on Windows will be -DCMAKE_MAKE_PROGRAM=%ANDROID_NDK_ROOT%\prebuilt\windows-x86_64\bin\make.exe
+# -G is needed for building on Windows
+# -DANDROID_ABI can also be armeabi-v7a for 32 bit
+```
+
 For building on Windows:
 
 ```bash
@@ -167,31 +209,45 @@
 the web grammar subset (see more about the web subset in the next section).
 
 ### Building to WASM for the Web and Node
+### Building a standalone JS/WASM library for the Web and Node
 
 Use the steps in [Build Steps](#build-steps), with the following notes/exceptions:
-* For building the web subset of core glslang:
+* `emsdk` needs to be present in your executable search path, *PATH* for
+  Bash-like environments:
+  + [Instructions located here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install)
+* Wrap cmake call: `emcmake cmake`
+* Set `-DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF`.
+* Set `-DENABLE_HLSL=OFF` if HLSL is not needed.
+* For a standalone JS/WASM library, turn on `-DENABLE_GLSLANG_JS=ON`.
+* For building a minimum-size web subset of core glslang:
+  + turn on `-DENABLE_GLSLANG_WEBMIN=ON` (disables HLSL)
   + execute `updateGrammar web` from the glslang subdirectory
     (or if using your own scripts, `m4` needs a `-DGLSLANG_WEB` argument)
-  + set `-DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF`
-  + turn on `-DENABLE_GLSLANG_WEB=ON`
-  + optionally, for GLSL compilation error messages, turn on `-DENABLE_GLSLANG_WEB_DEVEL=ON`
-* `emsdk` needs to be present in your executable search path, *PATH* for
-  Bash-like enivironments
-  + [Instructions located
-    here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install)
-* Wrap cmake call: `emcmake cmake`
+  + optionally, for GLSL compilation error messages, turn on
+    `-DENABLE_GLSLANG_WEBMIN_DEVEL=ON`
 * To get a fully minimized build, make sure to use `brotli` to compress the .js
   and .wasm files
 
 Example:
 
 ```sh
-emcmake cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_WEB=ON \
+emcmake cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_JS=ON \
     -DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF ..
 ```
 
-Testing
--------
+## Building glslang - Using vcpkg
+
+You can download and install glslang using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager:
+
+    git clone https://github.com/Microsoft/vcpkg.git
+    cd vcpkg
+    ./bootstrap-vcpkg.sh
+    ./vcpkg integrate install
+    ./vcpkg install glslang
+
+The glslang port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
+
+## Testing
 
 Right now, there are two test harnesses existing in glslang: one is [Google
 Test](gtests/), one is the [`runtests` script](Test/runtests). The former
@@ -227,6 +283,11 @@
 cd $SOURCE_DIR/Test && ./runtests
 ```
 
+If some tests fail with validation errors, there may be a mismatch between the
+version of `spirv-val` on the system and the version of glslang.  In this
+case, it is necessary to run `update_glslang_sources.py`.  See "Check-Out
+External Projects" above for more details.
+
 ### Contributing tests
 
 Test results should always be included with a pull request that modifies
@@ -258,8 +319,7 @@
 `localtestlist` to list non-tracked tests.  This is automatically read
 by `runtests` and included in the `diff` and `bump` process.
 
-Programmatic Interfaces
------------------------
+## Programmatic Interfaces
 
 Another piece of software can programmatically translate shaders to an AST
 using one of two different interfaces:
@@ -295,7 +355,7 @@
     Reflection queries
 ```
 
-For just validating (not generating code), subsitute these calls:
+For just validating (not generating code), substitute these calls:
 
 ```cxx
     setEnvInput(EShSourceHlsl or EShSourceGlsl, stage,  EShClientNone, 0);
@@ -307,13 +367,13 @@
 details. There is a block comment giving more detail above the calls for
 `setEnvInput, setEnvClient, and setEnvTarget`.
 
-### C Functional Interface (orignal)
+### C Functional Interface (original)
 
 This interface is in roughly the first 2/3 of `ShaderLang.h`, and referred to
 as the `Sh*()` interface, as all the entry points start `Sh`.
 
 The `Sh*()` interface takes a "compiler" call-back object, which it calls after
-building call back that is passed the AST and can then execute a backend on it.
+building call back that is passed the AST and can then execute a back end on it.
 
 The following is a simplified resulting run-time call stack:
 
@@ -324,8 +384,7 @@
 In practice, `ShCompile()` takes shader strings, default version, and
 warning/error and other options for controlling compilation.
 
-Basic Internal Operation
-------------------------
+## Basic Internal Operation
 
 * Initial lexical analysis is done by the preprocessor in
   `MachineIndependent/Preprocessor`, and then refined by a GLSL scanner
@@ -340,7 +399,7 @@
 * The intermediate representation is very high-level, and represented
   as an in-memory tree.   This serves to lose no information from the
   original program, and to have efficient transfer of the result from
-  parsing to the back-end.  In the AST, constants are propogated and
+  parsing to the back-end.  In the AST, constants are propagated and
   folded, and a very small amount of dead code is eliminated.
 
   To aid linking and reflection, the last top-level branch in the AST
@@ -372,6 +431,8 @@
   - the object does not come from the pool, and you have to do normal
     C++ memory management of what you `new`
 
+* Features can be protected by version/extension/stage/profile:
+  See the comment in `glslang/MachineIndependent/Versions.cpp`.
 
 [cmake]: https://cmake.org/
 [python]: https://www.python.org/
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
index f47c8a0..9040609 100644
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -27,7 +27,8 @@
     SpvTools.h
     disassemble.h
     GLSL.ext.AMD.h
-    GLSL.ext.NV.h)
+    GLSL.ext.NV.h
+    NonSemanticDebugPrintf.h)
 
 set(SPVREMAP_HEADERS
     SPVRemapper.h
@@ -36,7 +37,9 @@
 add_library(SPIRV ${LIB_TYPE} ${SOURCES} ${HEADERS})
 set_property(TARGET SPIRV PROPERTY FOLDER glslang)
 set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON)
-target_include_directories(SPIRV PUBLIC ..)
+target_include_directories(SPIRV PUBLIC
+	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
+	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 
 if (ENABLE_SPVREMAPPER)
     add_library(SPVRemapper ${LIB_TYPE} ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
@@ -57,7 +60,9 @@
         PRIVATE ${spirv-tools_SOURCE_DIR}/source
     )
     target_link_libraries(SPIRV glslang SPIRV-Tools-opt)
-    target_include_directories(SPIRV PUBLIC ../External)
+    target_include_directories(SPIRV PUBLIC
+		$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
+		$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
 else()
     target_link_libraries(SPIRV glslang)
 endif(ENABLE_OPT)
@@ -70,22 +75,29 @@
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
         if (ENABLE_SPVREMAPPER)
-            install(TARGETS SPVRemapper
+            install(TARGETS SPVRemapper EXPORT SPVRemapperTargets
                     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
         endif()
-        install(TARGETS SPIRV
+        install(TARGETS SPIRV EXPORT SPIRVTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     else()
         if (ENABLE_SPVREMAPPER)
-            install(TARGETS SPVRemapper
+            install(TARGETS SPVRemapper EXPORT SPVRemapperTargets
                     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
         endif()
-        install(TARGETS SPIRV
+        install(TARGETS SPIRV EXPORT SPIRVTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
 
+    if (ENABLE_SPVREMAPPER)
+        install(EXPORT SPVRemapperTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+    endif()
+
+    install(EXPORT SPIRVTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+
+    install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/SPIRV/)
     install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/SPIRV/)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h
index e58e836..d783a8f 100644
--- a/SPIRV/GLSL.ext.KHR.h
+++ b/SPIRV/GLSL.ext.KHR.h
@@ -1,5 +1,6 @@
 /*
-** Copyright (c) 2014-2016 The Khronos Group Inc.
+** Copyright (c) 2014-2020 The Khronos Group Inc.
+** Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 **
 ** Permission is hereby granted, free of charge, to any person obtaining a copy
 ** of this software and/or associated documentation files (the "Materials"),
@@ -44,5 +45,7 @@
 static const char* const E_SPV_KHR_physical_storage_buffer      = "SPV_KHR_physical_storage_buffer";
 static const char* const E_SPV_EXT_fragment_shader_interlock    = "SPV_EXT_fragment_shader_interlock";
 static const char* const E_SPV_KHR_shader_clock                 = "SPV_KHR_shader_clock";
-
+static const char* const E_SPV_KHR_non_semantic_info            = "SPV_KHR_non_semantic_info";
+static const char* const E_SPV_KHR_ray_tracing                  = "SPV_KHR_ray_tracing";
+static const char* const E_SPV_KHR_ray_query                    = "SPV_KHR_ray_query";
 #endif  // #ifndef GLSLextKHR_H
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 2d50074..3bed678 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1,7 +1,8 @@
 //
 // Copyright (C) 2014-2016 LunarG, Inc.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2020 Google, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -48,6 +49,7 @@
     #include "GLSL.ext.EXT.h"
     #include "GLSL.ext.AMD.h"
     #include "GLSL.ext.NV.h"
+    #include "NonSemanticDebugPrintf.h"
 }
 
 // Glslang includes
@@ -100,11 +102,11 @@
     spv::Decoration precision;
 
 #ifdef GLSLANG_WEB
-        void addNoContraction(spv::Builder&, spv::Id) const { };
-        void addNonUniform(spv::Builder&, spv::Id) const { };
+        void addNoContraction(spv::Builder&, spv::Id) const { }
+        void addNonUniform(spv::Builder&, spv::Id) const { }
 #else
-        void addNoContraction(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, noContraction); };
-        void addNonUniform(spv::Builder& builder, spv::Id t)  { builder.addDecoration(t, nonUniform); };
+        void addNoContraction(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, noContraction); }
+        void addNonUniform(spv::Builder& builder, spv::Id t)  { builder.addDecoration(t, nonUniform); }
     protected:
         spv::Decoration noContraction;
         spv::Decoration nonUniform;
@@ -187,7 +189,8 @@
     void makeGlobalInitializers(const glslang::TIntermSequence&);
     void visitFunctions(const glslang::TIntermSequence&);
     void handleFunctionEntry(const glslang::TIntermAggregate* node);
-    void translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments, spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
+    void translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments,
+        spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
     void translateArguments(glslang::TIntermUnary& node, std::vector<spv::Id>& arguments);
     spv::Id createImageTextureFunctionCall(glslang::TIntermOperator* node);
     spv::Id handleUserFunctionCall(const glslang::TIntermAggregate*);
@@ -196,28 +199,36 @@
                                   glslang::TBasicType typeProxy, bool reduceComparison = true);
     spv::Id createBinaryMatrixOperation(spv::Op, OpDecorations&, spv::Id typeId, spv::Id left, spv::Id right);
     spv::Id createUnaryOperation(glslang::TOperator op, OpDecorations&, spv::Id typeId, spv::Id operand,
-                                 glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
+                                 glslang::TBasicType typeProxy,
+                                 const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
     spv::Id createUnaryMatrixOperation(spv::Op op, OpDecorations&, spv::Id typeId, spv::Id operand,
                                        glslang::TBasicType typeProxy);
     spv::Id createConversion(glslang::TOperator op, OpDecorations&, spv::Id destTypeId, spv::Id operand,
                              glslang::TBasicType typeProxy);
     spv::Id createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize);
     spv::Id makeSmearedConstant(spv::Id constant, int vectorSize);
-    spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
-    spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
-    spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation, spv::Id typeId, std::vector<spv::Id>& operands);
-    spv::Id createSubgroupOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
-    spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
+    spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId,
+        std::vector<spv::Id>& operands, glslang::TBasicType typeProxy,
+        const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
+    spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands,
+        glslang::TBasicType typeProxy);
+    spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation,
+        spv::Id typeId, std::vector<spv::Id>& operands);
+    spv::Id createSubgroupOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands,
+        glslang::TBasicType typeProxy);
+    spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId,
+        std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
     spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId);
     spv::Id getSymbolId(const glslang::TIntermSymbol* node);
     void addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier & qualifier);
     spv::Id createSpvConstant(const glslang::TIntermTyped&);
-    spv::Id createSpvConstantFromConstUnionArray(const glslang::TType& type, const glslang::TConstUnionArray&, int& nextConst, bool specConstant);
+    spv::Id createSpvConstantFromConstUnionArray(const glslang::TType& type, const glslang::TConstUnionArray&,
+        int& nextConst, bool specConstant);
     bool isTrivialLeaf(const glslang::TIntermTyped* node);
     bool isTrivial(const glslang::TIntermTyped* node);
     spv::Id createShortCircuit(glslang::TOperator, glslang::TIntermTyped& left, glslang::TIntermTyped& right);
     spv::Id getExtBuiltins(const char* name);
-    std::pair<spv::Id, spv::Id> getForcedType(spv::BuiltIn, const glslang::TType&);
+    std::pair<spv::Id, spv::Id> getForcedType(glslang::TBuiltInVariable builtIn, const glslang::TType&);
     spv::Id translateForcedType(spv::Id object);
     spv::Id createCompositeConstruct(spv::Id typeId, std::vector<spv::Id> constituents);
 
@@ -233,19 +244,24 @@
     spv::Builder builder;
     bool inEntryPoint;
     bool entryPointTerminated;
-    bool linkageOnly;                  // true when visiting the set of objects in the AST present only for establishing interface, whether or not they were statically used
+    bool linkageOnly;                  // true when visiting the set of objects in the AST present only for
+                                       // establishing interface, whether or not they were statically used
     std::set<spv::Id> iOSet;           // all input/output variables from either static use or declaration of interface
     const glslang::TIntermediate* glslangIntermediate;
     bool nanMinMaxClamp;               // true if use NMin/NMax/NClamp instead of FMin/FMax/FClamp
     spv::Id stdBuiltins;
+    spv::Id nonSemanticDebugPrintf;
     std::unordered_map<const char*, spv::Id> extBuiltinMap;
 
     std::unordered_map<int, spv::Id> symbolValues;
-    std::unordered_set<int> rValueParameters;  // set of formal function parameters passed as rValues, rather than a pointer
+    std::unordered_set<int> rValueParameters;  // set of formal function parameters passed as rValues,
+                                               // rather than a pointer
     std::unordered_map<std::string, spv::Function*> functionMap;
     std::unordered_map<const glslang::TTypeList*, spv::Id> structMap[glslang::ElpCount][glslang::ElmCount];
     // for mapping glslang block indices to spv indices (e.g., due to hidden members):
-    std::unordered_map<const glslang::TTypeList*, std::vector<int> > memberRemapper;
+    std::unordered_map<int, std::vector<int>> memberRemapper;
+    // for mapping glslang symbol struct to symbol Id
+    std::unordered_map<const glslang::TTypeList*, int> glslangTypeToIdMap;
     std::stack<bool> breakForLoop;  // false means break for switch
     std::unordered_map<std::string, const glslang::TIntermSymbol*> counterOriginator;
     // Map pointee types for EbtReference to their forward pointers
@@ -292,17 +308,17 @@
     switch (stage) {
     case EShLangVertex:           return spv::ExecutionModelVertex;
     case EShLangFragment:         return spv::ExecutionModelFragment;
-#ifndef GLSLANG_WEB
     case EShLangCompute:          return spv::ExecutionModelGLCompute;
+#ifndef GLSLANG_WEB
     case EShLangTessControl:      return spv::ExecutionModelTessellationControl;
     case EShLangTessEvaluation:   return spv::ExecutionModelTessellationEvaluation;
     case EShLangGeometry:         return spv::ExecutionModelGeometry;
-    case EShLangRayGenNV:         return spv::ExecutionModelRayGenerationNV;
-    case EShLangIntersectNV:      return spv::ExecutionModelIntersectionNV;
-    case EShLangAnyHitNV:         return spv::ExecutionModelAnyHitNV;
-    case EShLangClosestHitNV:     return spv::ExecutionModelClosestHitNV;
-    case EShLangMissNV:           return spv::ExecutionModelMissNV;
-    case EShLangCallableNV:       return spv::ExecutionModelCallableNV;
+    case EShLangRayGen:           return spv::ExecutionModelRayGenerationKHR;
+    case EShLangIntersect:        return spv::ExecutionModelIntersectionKHR;
+    case EShLangAnyHit:           return spv::ExecutionModelAnyHitKHR;
+    case EShLangClosestHit:       return spv::ExecutionModelClosestHitKHR;
+    case EShLangMiss:             return spv::ExecutionModelMissKHR;
+    case EShLangCallable:         return spv::ExecutionModelCallableKHR;
     case EShLangTaskNV:           return spv::ExecutionModelTaskNV;
     case EShLangMeshNV:           return spv::ExecutionModelMeshNV;
 #endif
@@ -356,11 +372,11 @@
         case glslang::EvqVaryingIn:    return spv::DecorationBlock;
         case glslang::EvqVaryingOut:   return spv::DecorationBlock;
 #ifndef GLSLANG_WEB
-        case glslang::EvqPayloadNV:    return spv::DecorationBlock;
-        case glslang::EvqPayloadInNV:  return spv::DecorationBlock;
-        case glslang::EvqHitAttrNV:    return spv::DecorationBlock;
-        case glslang::EvqCallableDataNV:   return spv::DecorationBlock;
-        case glslang::EvqCallableDataInNV: 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;
 #endif
         default:
             assert(0);
@@ -372,24 +388,23 @@
 }
 
 // Translate glslang type to SPIR-V memory decorations.
-void TranslateMemoryDecoration(const glslang::TQualifier& qualifier, std::vector<spv::Decoration>& memory, bool useVulkanMemoryModel)
+void TranslateMemoryDecoration(const glslang::TQualifier& qualifier, std::vector<spv::Decoration>& memory,
+    bool useVulkanMemoryModel)
 {
-#ifndef GLSLANG_WEB
     if (!useVulkanMemoryModel) {
-        if (qualifier.coherent)
+        if (qualifier.isCoherent())
             memory.push_back(spv::DecorationCoherent);
-        if (qualifier.volatil) {
+        if (qualifier.isVolatile()) {
             memory.push_back(spv::DecorationVolatile);
             memory.push_back(spv::DecorationCoherent);
         }
     }
-    if (qualifier.restrict)
+    if (qualifier.isRestrict())
         memory.push_back(spv::DecorationRestrict);
     if (qualifier.isReadOnly())
         memory.push_back(spv::DecorationNonWritable);
     if (qualifier.isWriteOnly())
        memory.push_back(spv::DecorationNonReadable);
-#endif
 }
 
 // Translate glslang type to SPIR-V layout decorations.
@@ -433,11 +448,11 @@
                 }
                 return spv::DecorationMax;
 #ifndef GLSLANG_WEB
-            case glslang::EvqPayloadNV:
-            case glslang::EvqPayloadInNV:
-            case glslang::EvqHitAttrNV:
-            case glslang::EvqCallableDataNV:
-            case glslang::EvqCallableDataInNV:
+            case glslang::EvqPayload:
+            case glslang::EvqPayloadIn:
+            case glslang::EvqHitAttr:
+            case glslang::EvqCallableData:
+            case glslang::EvqCallableDataIn:
                 return spv::DecorationMax;
 #endif
             default:
@@ -529,15 +544,11 @@
     if (!glslangIntermediate->usingVulkanMemoryModel() || coherentFlags.isImage)
         return mask;
 
-    if (coherentFlags.volatil ||
-        coherentFlags.coherent ||
-        coherentFlags.devicecoherent ||
-        coherentFlags.queuefamilycoherent ||
-        coherentFlags.workgroupcoherent ||
-        coherentFlags.subgroupcoherent) {
+    if (coherentFlags.isVolatile() || coherentFlags.anyCoherent()) {
         mask = mask | spv::MemoryAccessMakePointerAvailableKHRMask |
                       spv::MemoryAccessMakePointerVisibleKHRMask;
     }
+
     if (coherentFlags.nonprivate) {
         mask = mask | spv::MemoryAccessNonPrivatePointerKHRMask;
     }
@@ -562,11 +573,7 @@
         return mask;
 
     if (coherentFlags.volatil ||
-        coherentFlags.coherent ||
-        coherentFlags.devicecoherent ||
-        coherentFlags.queuefamilycoherent ||
-        coherentFlags.workgroupcoherent ||
-        coherentFlags.subgroupcoherent) {
+        coherentFlags.anyCoherent()) {
         mask = mask | spv::ImageOperandsMakeTexelAvailableKHRMask |
                       spv::ImageOperandsMakeTexelVisibleKHRMask;
     }
@@ -595,14 +602,11 @@
     flags.workgroupcoherent = type.getQualifier().workgroupcoherent ||
                               type.getQualifier().storage == glslang::EvqShared;
     flags.subgroupcoherent = type.getQualifier().subgroupcoherent;
+    flags.shadercallcoherent = type.getQualifier().shadercallcoherent;
     flags.volatil = type.getQualifier().volatil;
     // *coherent variables are implicitly nonprivate in GLSL
     flags.nonprivate = type.getQualifier().nonprivate ||
-                       flags.subgroupcoherent ||
-                       flags.workgroupcoherent ||
-                       flags.queuefamilycoherent ||
-                       flags.devicecoherent ||
-                       flags.coherent ||
+                       flags.anyCoherent() ||
                        flags.volatil;
     flags.isImage = type.getBasicType() == glslang::EbtSampler;
 #endif
@@ -626,6 +630,8 @@
         scope = spv::ScopeWorkgroup;
     } else if (coherentFlags.subgroupcoherent) {
         scope = spv::ScopeSubgroup;
+    } else if (coherentFlags.shadercallcoherent) {
+        scope = spv::ScopeShaderCallKHR;
     }
     if (glslangIntermediate->usingVulkanMemoryModel() && scope == spv::ScopeDevice) {
         builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
@@ -640,7 +646,8 @@
 // is generated only when using the variable in an executable instruction, but not when
 // just declaring a struct member variable with it.  This is true for PointSize,
 // ClipDistance, and CullDistance.
-spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltInVariable builtIn, bool memberDeclaration)
+spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltInVariable builtIn,
+    bool memberDeclaration)
 {
     switch (builtIn) {
     case glslang::EbvPointSize:
@@ -673,6 +680,13 @@
     case glslang::EbvFace:                 return spv::BuiltInFrontFacing;
     case glslang::EbvFragDepth:            return spv::BuiltInFragDepth;
 
+    case glslang::EbvNumWorkGroups:        return spv::BuiltInNumWorkgroups;
+    case glslang::EbvWorkGroupSize:        return spv::BuiltInWorkgroupSize;
+    case glslang::EbvWorkGroupId:          return spv::BuiltInWorkgroupId;
+    case glslang::EbvLocalInvocationId:    return spv::BuiltInLocalInvocationId;
+    case glslang::EbvLocalInvocationIndex: return spv::BuiltInLocalInvocationIndex;
+    case glslang::EbvGlobalInvocationId:   return spv::BuiltInGlobalInvocationId;
+
 #ifndef GLSLANG_WEB
     // These *Distance capabilities logically belong here, but if the member is declared and
     // then never used, consumers of SPIR-V prefer the capability not be declared.
@@ -757,12 +771,6 @@
     case glslang::EbvTessCoord:            return spv::BuiltInTessCoord;
     case glslang::EbvPatchVertices:        return spv::BuiltInPatchVertices;
     case glslang::EbvHelperInvocation:     return spv::BuiltInHelperInvocation;
-    case glslang::EbvNumWorkGroups:        return spv::BuiltInNumWorkgroups;
-    case glslang::EbvWorkGroupSize:        return spv::BuiltInWorkgroupSize;
-    case glslang::EbvWorkGroupId:          return spv::BuiltInWorkgroupId;
-    case glslang::EbvLocalInvocationId:    return spv::BuiltInLocalInvocationId;
-    case glslang::EbvLocalInvocationIndex: return spv::BuiltInLocalInvocationIndex;
-    case glslang::EbvGlobalInvocationId:   return spv::BuiltInGlobalInvocationId;
 
     case glslang::EbvSubGroupSize:
         builder.addExtension(spv::E_SPV_KHR_shader_ballot);
@@ -932,34 +940,38 @@
         return spv::BuiltInInvocationsPerPixelNV;
 
     // ray tracing
-    case glslang::EbvLaunchIdNV:
-        return spv::BuiltInLaunchIdNV;
-    case glslang::EbvLaunchSizeNV:
-        return spv::BuiltInLaunchSizeNV;
-    case glslang::EbvWorldRayOriginNV:
-        return spv::BuiltInWorldRayOriginNV;
-    case glslang::EbvWorldRayDirectionNV:
-        return spv::BuiltInWorldRayDirectionNV;
-    case glslang::EbvObjectRayOriginNV:
-        return spv::BuiltInObjectRayOriginNV;
-    case glslang::EbvObjectRayDirectionNV:
-        return spv::BuiltInObjectRayDirectionNV;
-    case glslang::EbvRayTminNV:
-        return spv::BuiltInRayTminNV;
-    case glslang::EbvRayTmaxNV:
-        return spv::BuiltInRayTmaxNV;
-    case glslang::EbvInstanceCustomIndexNV:
-        return spv::BuiltInInstanceCustomIndexNV;
-    case glslang::EbvHitTNV:
-        return spv::BuiltInHitTNV;
-    case glslang::EbvHitKindNV:
-        return spv::BuiltInHitKindNV;
-    case glslang::EbvObjectToWorldNV:
-        return spv::BuiltInObjectToWorldNV;
-    case glslang::EbvWorldToObjectNV:
-        return spv::BuiltInWorldToObjectNV;
-    case glslang::EbvIncomingRayFlagsNV:
-        return spv::BuiltInIncomingRayFlagsNV;
+    case glslang::EbvLaunchId:
+        return spv::BuiltInLaunchIdKHR;
+    case glslang::EbvLaunchSize:
+        return spv::BuiltInLaunchSizeKHR;
+    case glslang::EbvWorldRayOrigin:
+        return spv::BuiltInWorldRayOriginKHR;
+    case glslang::EbvWorldRayDirection:
+        return spv::BuiltInWorldRayDirectionKHR;
+    case glslang::EbvObjectRayOrigin:
+        return spv::BuiltInObjectRayOriginKHR;
+    case glslang::EbvObjectRayDirection:
+        return spv::BuiltInObjectRayDirectionKHR;
+    case glslang::EbvRayTmin:
+        return spv::BuiltInRayTminKHR;
+    case glslang::EbvRayTmax:
+        return spv::BuiltInRayTmaxKHR;
+    case glslang::EbvInstanceCustomIndex:
+        return spv::BuiltInInstanceCustomIndexKHR;
+    case glslang::EbvHitT:
+        return spv::BuiltInHitTKHR;
+    case glslang::EbvHitKind:
+        return spv::BuiltInHitKindKHR;
+    case glslang::EbvObjectToWorld:
+    case glslang::EbvObjectToWorld3x4:
+        return spv::BuiltInObjectToWorldKHR;
+    case glslang::EbvWorldToObject:
+    case glslang::EbvWorldToObject3x4:
+        return spv::BuiltInWorldToObjectKHR;
+    case glslang::EbvIncomingRayFlags:
+        return spv::BuiltInIncomingRayFlagsKHR;
+    case glslang::EbvGeometryIndex:
+        return spv::BuiltInRayGeometryIndexKHR;
 
     // barycentrics
     case glslang::EbvBaryCoordNV:
@@ -1105,7 +1117,8 @@
     }
 }
 
-spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSelectionControl(const glslang::TIntermSelection& selectionNode) const
+spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSelectionControl(
+    const glslang::TIntermSelection& selectionNode) const
 {
     if (selectionNode.getFlatten())
         return spv::SelectionControlFlattenMask;
@@ -1114,7 +1127,8 @@
     return spv::SelectionControlMaskNone;
 }
 
-spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSwitchControl(const glslang::TIntermSwitch& switchNode) const
+spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSwitchControl(const glslang::TIntermSwitch& switchNode)
+    const
 {
     if (switchNode.getFlatten())
         return spv::SelectionControlFlattenMask;
@@ -1168,6 +1182,8 @@
 // Translate glslang type to SPIR-V storage class.
 spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::TType& type)
 {
+    if (type.getBasicType() == glslang::EbtRayQuery)
+        return spv::StorageClassFunction;
     if (type.getQualifier().isPipeInput())
         return spv::StorageClassInput;
     if (type.getQualifier().isPipeOutput())
@@ -1182,8 +1198,8 @@
     }
 
     if (type.getQualifier().isUniformOrBuffer() &&
-        type.getQualifier().isShaderRecordNV()) {
-        return spv::StorageClassShaderRecordBufferNV;
+        type.getQualifier().isShaderRecord()) {
+        return spv::StorageClassShaderRecordBufferKHR;
     }
 
     if (glslangIntermediate->usingStorageBuffer() && type.getQualifier().storage == glslang::EvqBuffer) {
@@ -1203,13 +1219,13 @@
     case glslang::EvqGlobal:        return spv::StorageClassPrivate;
     case glslang::EvqConstReadOnly: return spv::StorageClassFunction;
     case glslang::EvqTemporary:     return spv::StorageClassFunction;
-#ifndef GLSLANG_WEB
     case glslang::EvqShared:           return spv::StorageClassWorkgroup;
-    case glslang::EvqPayloadNV:        return spv::StorageClassRayPayloadNV;
-    case glslang::EvqPayloadInNV:      return spv::StorageClassIncomingRayPayloadNV;
-    case glslang::EvqHitAttrNV:        return spv::StorageClassHitAttributeNV;
-    case glslang::EvqCallableDataNV:   return spv::StorageClassCallableDataNV;
-    case glslang::EvqCallableDataInNV: return spv::StorageClassIncomingCallableDataNV;
+#ifndef GLSLANG_WEB
+    case glslang::EvqPayload:        return spv::StorageClassRayPayloadKHR;
+    case glslang::EvqPayloadIn:      return spv::StorageClassIncomingRayPayloadKHR;
+    case glslang::EvqHitAttr:        return spv::StorageClassHitAttributeKHR;
+    case glslang::EvqCallableData:   return spv::StorageClassCallableDataKHR;
+    case glslang::EvqCallableDataIn: return spv::StorageClassIncomingCallableDataKHR;
 #endif
     default:
         assert(0);
@@ -1269,7 +1285,7 @@
     // uniform and buffer blocks are included, unless it is a push_constant
     if (type.getBasicType() == glslang::EbtBlock)
         return type.getQualifier().isUniformOrBuffer() &&
-        ! type.getQualifier().isShaderRecordNV() &&
+        ! type.getQualifier().isShaderRecord() &&
         ! type.getQualifier().isPushConstant();
 
     // non block...
@@ -1319,6 +1335,8 @@
         child.workgroupcoherent = true;
     if (parent.subgroupcoherent)
         child.subgroupcoherent = true;
+    if (parent.shadercallcoherent)
+        child.shadercallcoherent = true;
     if (parent.nonprivate)
         child.nonprivate = true;
     if (parent.volatil)
@@ -1349,16 +1367,18 @@
 // Implement the TGlslangToSpvTraverser class.
 //
 
-TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, const glslang::TIntermediate* glslangIntermediate,
-                                               spv::SpvBuildLogger* buildLogger, glslang::SpvOptions& options)
-    : TIntermTraverser(true, false, true),
-      options(options),
-      shaderEntry(nullptr), currentFunction(nullptr),
-      sequenceDepth(0), logger(buildLogger),
-      builder(spvVersion, (glslang::GetKhronosToolId() << 16) | glslang::GetSpirvGeneratorVersion(), logger),
-      inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
-      glslangIntermediate(glslangIntermediate),
-      nanMinMaxClamp(glslangIntermediate->getNanMinMaxClamp())
+TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
+    const glslang::TIntermediate* glslangIntermediate,
+    spv::SpvBuildLogger* buildLogger, glslang::SpvOptions& options) :
+        TIntermTraverser(true, false, true),
+        options(options),
+        shaderEntry(nullptr), currentFunction(nullptr),
+        sequenceDepth(0), logger(buildLogger),
+        builder(spvVersion, (glslang::GetKhronosToolId() << 16) | glslang::GetSpirvGeneratorVersion(), logger),
+        inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
+        glslangIntermediate(glslangIntermediate),
+        nanMinMaxClamp(glslangIntermediate->getNanMinMaxClamp()),
+        nonSemanticDebugPrintf(0)
 {
     spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage());
 
@@ -1401,7 +1421,7 @@
         addressingModel = spv::AddressingModelPhysicalStorageBuffer64EXT;
         builder.addIncorporatedExtension(spv::E_SPV_EXT_physical_storage_buffer, spv::Spv_1_5);
         builder.addCapability(spv::CapabilityPhysicalStorageBufferAddressesEXT);
-    };
+    }
     if (glslangIntermediate->usingVulkanMemoryModel()) {
         memoryModel = spv::MemoryModelVulkanKHR;
         builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
@@ -1419,7 +1439,7 @@
     // Add the source extensions
     const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions();
     for (auto it = sourceExtensions.begin(); it != sourceExtensions.end(); ++it)
-        builder.addSourceExtension(it->c_str());
+        builder.addSourceExtension(it->first.c_str());
 
     // Add the top-level modes for this shader.
 
@@ -1428,6 +1448,10 @@
         builder.addExecutionMode(shaderEntry, spv::ExecutionModeXfb);
     }
 
+    if (sourceExtensions.find("GL_EXT_ray_flags_primitive_culling") != sourceExtensions.end()) {
+        builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingProvisionalKHR);
+    }
+
     unsigned int mode;
     switch (glslangIntermediate->getStage()) {
     case EShLangVertex:
@@ -1457,6 +1481,7 @@
             builder.addExecutionMode(shaderEntry, spv::ExecutionModeDepthReplacing);
 
 #ifndef GLSLANG_WEB
+
         switch(glslangIntermediate->getDepth()) {
         case glslang::EldGreater:  mode = spv::ExecutionModeDepthGreater; break;
         case glslang::EldLess:     mode = spv::ExecutionModeDepthLess;    break;
@@ -1465,13 +1490,20 @@
         if (mode != spv::ExecutionModeMax)
             builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
         switch (glslangIntermediate->getInterlockOrdering()) {
-        case glslang::EioPixelInterlockOrdered:         mode = spv::ExecutionModePixelInterlockOrderedEXT;          break;
-        case glslang::EioPixelInterlockUnordered:       mode = spv::ExecutionModePixelInterlockUnorderedEXT;          break;
-        case glslang::EioSampleInterlockOrdered:        mode = spv::ExecutionModeSampleInterlockOrderedEXT;          break;
-        case glslang::EioSampleInterlockUnordered:      mode = spv::ExecutionModeSampleInterlockUnorderedEXT;          break;
-        case glslang::EioShadingRateInterlockOrdered:   mode = spv::ExecutionModeShadingRateInterlockOrderedEXT;          break;
-        case glslang::EioShadingRateInterlockUnordered: mode = spv::ExecutionModeShadingRateInterlockUnorderedEXT;          break;
-        default:                                        mode = spv::ExecutionModeMax;                   break;
+        case glslang::EioPixelInterlockOrdered:         mode = spv::ExecutionModePixelInterlockOrderedEXT;
+            break;
+        case glslang::EioPixelInterlockUnordered:       mode = spv::ExecutionModePixelInterlockUnorderedEXT;
+            break;
+        case glslang::EioSampleInterlockOrdered:        mode = spv::ExecutionModeSampleInterlockOrderedEXT;
+            break;
+        case glslang::EioSampleInterlockUnordered:      mode = spv::ExecutionModeSampleInterlockUnorderedEXT;
+            break;
+        case glslang::EioShadingRateInterlockOrdered:   mode = spv::ExecutionModeShadingRateInterlockOrderedEXT;
+            break;
+        case glslang::EioShadingRateInterlockUnordered: mode = spv::ExecutionModeShadingRateInterlockUnorderedEXT;
+            break;
+        default:                                        mode = spv::ExecutionModeMax;
+            break;
         }
         if (mode != spv::ExecutionModeMax) {
             builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
@@ -1487,9 +1519,8 @@
             builder.addExtension(spv::E_SPV_EXT_fragment_shader_interlock);
         }
 #endif
-        break;
+    break;
 
-#ifndef GLSLANG_WEB
     case EShLangCompute:
         builder.addCapability(spv::CapabilityShader);
         builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
@@ -1505,6 +1536,7 @@
             builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives);
         }
         break;
+#ifndef GLSLANG_WEB
     case EShLangTessEvaluation:
     case EShLangTessControl:
         builder.addCapability(spv::CapabilityTessellation);
@@ -1512,7 +1544,8 @@
         glslang::TLayoutGeometry primitive;
 
         if (glslangIntermediate->getStage() == EShLangTessControl) {
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices());
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices,
+                glslangIntermediate->getVertices());
             primitive = glslangIntermediate->getOutputPrimitive();
         } else {
             primitive = glslangIntermediate->getInputPrimitive();
@@ -1574,15 +1607,24 @@
         builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices());
         break;
 
-    case EShLangRayGenNV:
-    case EShLangIntersectNV:
-    case EShLangAnyHitNV:
-    case EShLangClosestHitNV:
-    case EShLangMissNV:
-    case EShLangCallableNV:
-        builder.addCapability(spv::CapabilityRayTracingNV);
-        builder.addExtension("SPV_NV_ray_tracing");
+    case EShLangRayGen:
+    case EShLangIntersect:
+    case EShLangAnyHit:
+    case EShLangClosestHit:
+    case EShLangMiss:
+    case EShLangCallable: 
+    {
+        auto& extensions = glslangIntermediate->getRequestedExtensions();
+        if (extensions.find("GL_NV_ray_tracing") == extensions.end()) {
+            builder.addCapability(spv::CapabilityRayTracingProvisionalKHR);
+            builder.addExtension("SPV_KHR_ray_tracing");
+        }
+        else {
+            builder.addCapability(spv::CapabilityRayTracingNV);
+            builder.addExtension("SPV_NV_ray_tracing");
+        }
         break;
+    }
     case EShLangTaskNV:
     case EShLangMeshNV:
         builder.addCapability(spv::CapabilityMeshShadingNV);
@@ -1591,8 +1633,10 @@
                                                                            glslangIntermediate->getLocalSize(1),
                                                                            glslangIntermediate->getLocalSize(2));
         if (glslangIntermediate->getStage() == EShLangMeshNV) {
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices());
-            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputPrimitivesNV, glslangIntermediate->getPrimitives());
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices,
+                glslangIntermediate->getVertices());
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputPrimitivesNV,
+                glslangIntermediate->getPrimitives());
 
             switch (glslangIntermediate->getOutputPrimitive()) {
             case glslang::ElgPoints:        mode = spv::ExecutionModeOutputPoints;      break;
@@ -1624,11 +1668,11 @@
     for (auto it = iOSet.cbegin(); it != iOSet.cend(); ++it)
         entryPoint->addIdOperand(*it);
 
-#ifndef GLSLANG_WEB
-    // Add capabilities, extensions, remove unneeded decorations, etc., 
+    // Add capabilities, extensions, remove unneeded decorations, etc.,
     // based on the resulting SPIR-V.
+    // Note: WebGPU code generation must have the opportunity to aggressively
+    // prune unreachable merge blocks and continue targets.
     builder.postProcess();
-#endif
 }
 
 // Write the SPV into 'out'.
@@ -1655,6 +1699,9 @@
 void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
 {
     SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
+    if (symbol->getType().isStruct())
+        glslangTypeToIdMap[symbol->getType().getStruct()] = symbol->getId();
+
     if (symbol->getType().getQualifier().isSpecConstant())
         spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
 
@@ -1676,7 +1723,8 @@
             }
         }
 
-        // If the SPIR-V type is required to be different than the AST type,
+        // If the SPIR-V type is required to be different than the AST type
+        // (for ex SubgroupMasks or 3x4 ObjectToWorld/WorldToObject matrices),
         // translate now from the SPIR-V type to the AST type, for the consuming
         // operation.
         // Note this turns it from an l-value to an r-value.
@@ -1747,6 +1795,12 @@
 bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::TIntermBinary* node)
 {
     builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+    if (node->getLeft()->getAsSymbolNode() != nullptr && node->getLeft()->getType().isStruct()) {
+        glslangTypeToIdMap[node->getLeft()->getType().getStruct()] = node->getLeft()->getAsSymbolNode()->getId();
+    }
+    if (node->getRight()->getAsSymbolNode() != nullptr && node->getRight()->getType().isStruct()) {
+        glslangTypeToIdMap[node->getRight()->getType().getStruct()] = node->getRight()->getAsSymbolNode()->getId();
+    }
 
     SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
     if (node->getType().getQualifier().isSpecConstant())
@@ -1830,7 +1884,8 @@
                 int dummySize;
                 builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()),
                                                TranslateCoherent(node->getLeft()->getType()),
-                                               glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(), dummySize));
+                                               glslangIntermediate->getBaseAlignmentScalar(
+                                                   node->getLeft()->getType(), dummySize));
             } else {
 
                 // Load through a block reference is performed with a dot operator that
@@ -1851,13 +1906,18 @@
                 {
                     // This may be, e.g., an anonymous block-member selection, which generally need
                     // index remapping due to hidden members in anonymous blocks.
-                    std::vector<int>& remapper = memberRemapper[node->getLeft()->getType().getStruct()];
-                    assert(remapper.size() > 0);
-                    spvIndex = remapper[glslangIndex];
+                    int glslangId = glslangTypeToIdMap[node->getLeft()->getType().getStruct()];
+                    if (memberRemapper.find(glslangId) != memberRemapper.end()) {
+                        std::vector<int>& remapper = memberRemapper[glslangId];
+                        assert(remapper.size() > 0);
+                        spvIndex = remapper[glslangIndex];
+                    }
                 }
 
                 // normal case for indexing array or structure or block
-                builder.accessChainPush(builder.makeIntConstant(spvIndex), TranslateCoherent(node->getLeft()->getType()), node->getLeft()->getType().getBufferReferenceAlignment());
+                builder.accessChainPush(builder.makeIntConstant(spvIndex),
+                    TranslateCoherent(node->getLeft()->getType()),
+                        node->getLeft()->getType().getBufferReferenceAlignment());
 
                 // Add capabilities here for accessing PointSize and clip/cull distance.
                 // We have deferred generation of associated capabilities until now.
@@ -1894,9 +1954,11 @@
                 int dummySize;
                 builder.accessChainPushComponent(index, convertGlslangToSpvType(node->getLeft()->getType()),
                                                 TranslateCoherent(node->getLeft()->getType()),
-                                                glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(), dummySize));
+                                                glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(),
+                                                dummySize));
             } else
-                builder.accessChainPush(index, TranslateCoherent(node->getLeft()->getType()), node->getLeft()->getType().getBufferReferenceAlignment());
+                builder.accessChainPush(index, TranslateCoherent(node->getLeft()->getType()),
+                    node->getLeft()->getType().getBufferReferenceAlignment());
         }
         return false;
     case glslang::EOpVectorSwizzle:
@@ -1907,7 +1969,8 @@
             int dummySize;
             builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()),
                                            TranslateCoherent(node->getLeft()->getType()),
-                                           glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(), dummySize));
+                                           glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(),
+                                               dummySize));
         }
         return false;
     case glslang::EOpMatrixSwizzle:
@@ -1923,7 +1986,8 @@
             if (isTrivial(node->getRight()->getAsTyped()))
                 break; // handle below as a normal binary operation
             // otherwise, we need to do dynamic short circuiting on the right operand
-            spv::Id result = createShortCircuit(node->getOp(), *node->getLeft()->getAsTyped(), *node->getRight()->getAsTyped());
+            spv::Id result = createShortCircuit(node->getOp(), *node->getLeft()->getAsTyped(),
+                *node->getRight()->getAsTyped());
             builder.clearAccessChain();
             builder.setAccessChainRValue(result);
         }
@@ -1965,16 +2029,16 @@
 // Figure out what, if any, type changes are needed when accessing a specific built-in.
 // Returns <the type SPIR-V requires for declarion, the type to translate to on use>.
 // Also see comment for 'forceType', regarding tracking SPIR-V-required types.
-std::pair<spv::Id, spv::Id> TGlslangToSpvTraverser::getForcedType(spv::BuiltIn builtIn,
+std::pair<spv::Id, spv::Id> TGlslangToSpvTraverser::getForcedType(glslang::TBuiltInVariable glslangBuiltIn,
     const glslang::TType& glslangType)
 {
-    switch(builtIn)
+    switch(glslangBuiltIn)
     {
-        case spv::BuiltInSubgroupEqMask:
-        case spv::BuiltInSubgroupGeMask:
-        case spv::BuiltInSubgroupGtMask:
-        case spv::BuiltInSubgroupLeMask:
-        case spv::BuiltInSubgroupLtMask: {
+        case glslang::EbvSubGroupEqMask:
+        case glslang::EbvSubGroupGeMask:
+        case glslang::EbvSubGroupGtMask:
+        case glslang::EbvSubGroupLeMask:
+        case glslang::EbvSubGroupLtMask: {
             // these require changing a 64-bit scaler -> a vector of 32-bit components
             if (glslangType.isVector())
                 break;
@@ -1982,6 +2046,15 @@
                                             builder.makeUintType(64));
             return ret;
         }
+        // There are no SPIR-V builtins defined for these and map onto original non-transposed
+        // builtins. During visitBinary we insert a transpose
+        case glslang::EbvWorldToObject3x4:
+        case glslang::EbvObjectToWorld3x4: {
+            std::pair<spv::Id, spv::Id> ret(builder.makeMatrixType(builder.makeFloatType(32), 4, 3),
+                builder.makeMatrixType(builder.makeFloatType(32), 3, 4)
+            );
+            return ret;
+        }
         default:
             break;
     }
@@ -2020,7 +2093,15 @@
         } else {
             logger->missingFunctionality("forcing 32-bit vector type to non 64-bit scalar");
         }
-    } else {
+    } else if (builder.isMatrixType(objectTypeId)) {
+            // There are no SPIR-V builtins defined for 3x4 variants of ObjectToWorld/WorldToObject
+            // and we insert a transpose after loading the original non-transposed builtins
+            builder.clearAccessChain();
+            builder.setAccessChainLValue(object);
+            object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, objectTypeId);
+            return builder.createUnaryOp(spv::OpTranspose, desiredTypeId, object);
+
+    } else  {
         logger->missingFunctionality("forcing non 32-bit vector type");
     }
 
@@ -2071,7 +2152,8 @@
         } else {
             glslang::TIntermTyped* block = node->getOperand()->getAsBinaryNode()->getLeft();
             block->traverse(this);
-            unsigned int member = node->getOperand()->getAsBinaryNode()->getRight()->getAsConstantUnion()->getConstArray()[0].getUConst();
+            unsigned int member = node->getOperand()->getAsBinaryNode()->getRight()->getAsConstantUnion()
+                ->getConstArray()[0].getUConst();
             length = builder.createArrayLength(builder.accessChainGetLValue(), member);
         }
 
@@ -2097,7 +2179,8 @@
     // Does it need a swizzle inversion?  If so, evaluation is inverted;
     // operate first on the swizzle base, then apply the swizzle.
     spv::Id invertedType = spv::NoType;
-    auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ? invertedType : convertGlslangToSpvType(node->getType()); };
+    auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ?
+        invertedType : convertGlslangToSpvType(node->getType()); };
     if (node->getOp() == glslang::EOpInterpolateAtCentroid)
         invertedType = getInvertedSwizzleType(*node->getOperand());
 
@@ -2118,7 +2201,15 @@
     if (node->getOp() == glslang::EOpAtomicCounterIncrement ||
         node->getOp() == glslang::EOpAtomicCounterDecrement ||
         node->getOp() == glslang::EOpAtomicCounter          ||
-        node->getOp() == glslang::EOpInterpolateAtCentroid) {
+        node->getOp() == glslang::EOpInterpolateAtCentroid  ||
+        node->getOp() == glslang::EOpRayQueryProceed        ||
+        node->getOp() == glslang::EOpRayQueryGetRayTMin     ||
+        node->getOp() == glslang::EOpRayQueryGetRayFlags    ||
+        node->getOp() == glslang::EOpRayQueryGetWorldRayOrigin ||
+        node->getOp() == glslang::EOpRayQueryGetWorldRayDirection ||
+        node->getOp() == glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque ||
+        node->getOp() == glslang::EOpRayQueryTerminate ||
+        node->getOp() == glslang::EOpRayQueryConfirmIntersection) {
         operand = builder.accessChainGetLValue(); // Special case l-value operands
         lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
         lvalueCoherentFlags |= TranslateCoherent(operandNode->getAsTyped()->getType());
@@ -2134,11 +2225,13 @@
 
     // it could be a conversion
     if (! result)
-        result = createConversion(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType());
+        result = createConversion(node->getOp(), decorations, resultType(), operand,
+            node->getOperand()->getBasicType());
 
     // if not, then possibly an operation
     if (! result)
-        result = createUnaryOperation(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType(), lvalueCoherentFlags);
+        result = createUnaryOperation(node->getOp(), decorations, resultType(), operand,
+            node->getOperand()->getBasicType(), lvalueCoherentFlags);
 
     if (result) {
         if (invertedType) {
@@ -2209,6 +2302,12 @@
     case glslang::EOpEndStreamPrimitive:
         builder.createNoResultOp(spv::OpEndStreamPrimitive, operand);
         return false;
+    case glslang::EOpRayQueryTerminate:
+        builder.createNoResultOp(spv::OpRayQueryTerminateKHR, operand);
+        return false;
+    case glslang::EOpRayQueryConfirmIntersection:
+        builder.createNoResultOp(spv::OpRayQueryConfirmIntersectionKHR, operand);
+        return false;
 #endif
 
     default:
@@ -2231,7 +2330,8 @@
                 std::vector<spv::Id> rTypeConstituents;
                 int numrTypeConstituents = builder.getNumTypeConstituents(rType);
                 for (int i = 0; i < numrTypeConstituents; ++i) {
-                    rTypeConstituents.push_back(builder.createCompositeExtract(constituent, builder.getContainedTypeId(rType, i), i));
+                    rTypeConstituents.push_back(builder.createCompositeExtract(constituent,
+                        builder.getContainedTypeId(rType, i), i));
                 }
                 constituents[c] = createCompositeConstruct(lType, rTypeConstituents);
             } else {
@@ -2257,8 +2357,14 @@
         spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
 
     spv::Id result = spv::NoResult;
-    spv::Id invertedType = spv::NoType;  // to use to override the natural type of the node
-    auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ? invertedType : convertGlslangToSpvType(node->getType()); };
+    spv::Id invertedType = spv::NoType;                     // to use to override the natural type of the node
+    std::vector<spv::Builder::AccessChain> complexLvalues;  // for holding swizzling l-values too complex for
+                                                            // SPIR-V, for an out parameter
+    std::vector<spv::Id> temporaryLvalues;                  // temporaries to pass, as proxies for complexLValues
+
+    auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ?
+        invertedType :
+        convertGlslangToSpvType(node->getType()); };
 
     // try texturing
     result = createImageTextureFunctionCall(node);
@@ -2362,7 +2468,6 @@
         builder.setLine(node->getLoc().line, node->getLoc().getFilename());
         if (node->isUserDefined())
             result = handleUserFunctionCall(node);
-        // assert(result);  // this can happen for bad shaders because the call graph completeness checking is not yet done
         if (result) {
             builder.clearAccessChain();
             builder.setAccessChainRValue(result);
@@ -2546,7 +2651,6 @@
         binOp = glslang::EOpMod;
         break;
 
-#ifndef GLSLANG_WEB
     case glslang::EOpEmitVertex:
     case glslang::EOpEndPrimitive:
     case glslang::EOpBarrier:
@@ -2570,10 +2674,6 @@
         // These all have 0 operands and will naturally finish up in the code below for 0 operands
         break;
 
-    case glslang::EOpAtomicStore:
-        noReturnValue = true;
-        // fallthrough
-    case glslang::EOpAtomicLoad:
     case glslang::EOpAtomicAdd:
     case glslang::EOpAtomicMin:
     case glslang::EOpAtomicMax:
@@ -2585,6 +2685,14 @@
         atomic = true;
         break;
 
+#ifndef GLSLANG_WEB
+    case glslang::EOpAtomicStore:
+        noReturnValue = true;
+        // fallthrough
+    case glslang::EOpAtomicLoad:
+        atomic = true;
+        break;
+
     case glslang::EOpAtomicCounterAdd:
     case glslang::EOpAtomicCounterSubtract:
     case glslang::EOpAtomicCounterMin:
@@ -2599,13 +2707,54 @@
         atomic = true;
         break;
 
-    case glslang::EOpIgnoreIntersectionNV:
-    case glslang::EOpTerminateRayNV:
-    case glslang::EOpTraceNV:
-    case glslang::EOpExecuteCallableNV:
+    case glslang::EOpAbsDifference:
+    case glslang::EOpAddSaturate:
+    case glslang::EOpSubSaturate:
+    case glslang::EOpAverage:
+    case glslang::EOpAverageRounded:
+    case glslang::EOpMul32x16:
+        builder.addCapability(spv::CapabilityIntegerFunctions2INTEL);
+        builder.addExtension("SPV_INTEL_shader_integer_functions2");
+        binOp = node->getOp();
+        break;
+
+    case glslang::EOpIgnoreIntersection:
+    case glslang::EOpTerminateRay:
+    case glslang::EOpTrace:
+    case glslang::EOpExecuteCallable:
     case glslang::EOpWritePackedPrimitiveIndices4x8NV:
         noReturnValue = true;
         break;
+    case glslang::EOpRayQueryInitialize:
+    case glslang::EOpRayQueryTerminate:
+    case glslang::EOpRayQueryGenerateIntersection:
+    case glslang::EOpRayQueryConfirmIntersection:
+        builder.addExtension("SPV_KHR_ray_query");
+        builder.addCapability(spv::CapabilityRayQueryProvisionalKHR);
+        noReturnValue = true;
+        break;
+    case glslang::EOpRayQueryProceed:
+    case glslang::EOpRayQueryGetIntersectionType:
+    case glslang::EOpRayQueryGetRayTMin:
+    case glslang::EOpRayQueryGetRayFlags:
+    case glslang::EOpRayQueryGetIntersectionT:
+    case glslang::EOpRayQueryGetIntersectionInstanceCustomIndex:
+    case glslang::EOpRayQueryGetIntersectionInstanceId:
+    case glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset:
+    case glslang::EOpRayQueryGetIntersectionGeometryIndex:
+    case glslang::EOpRayQueryGetIntersectionPrimitiveIndex:
+    case glslang::EOpRayQueryGetIntersectionBarycentrics:
+    case glslang::EOpRayQueryGetIntersectionFrontFace:
+    case glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque:
+    case glslang::EOpRayQueryGetIntersectionObjectRayDirection:
+    case glslang::EOpRayQueryGetIntersectionObjectRayOrigin:
+    case glslang::EOpRayQueryGetWorldRayDirection:
+    case glslang::EOpRayQueryGetWorldRayOrigin:
+    case glslang::EOpRayQueryGetIntersectionObjectToWorld:
+    case glslang::EOpRayQueryGetIntersectionWorldToObject:
+        builder.addExtension("SPV_KHR_ray_query");
+        builder.addCapability(spv::CapabilityRayQueryProvisionalKHR);
+        break;
     case glslang::EOpCooperativeMatrixLoad:
     case glslang::EOpCooperativeMatrixStore:
         noReturnValue = true;
@@ -2617,6 +2766,10 @@
         break;
 #endif
 
+    case glslang::EOpDebugPrintf:
+        noReturnValue = true;
+        break;
+
     default:
         break;
     }
@@ -2667,6 +2820,41 @@
             if (arg == 1)
                 lvalue = true;
             break;
+
+        case glslang::EOpRayQueryInitialize:
+        case glslang::EOpRayQueryTerminate:
+        case glslang::EOpRayQueryConfirmIntersection:
+        case glslang::EOpRayQueryProceed:
+        case glslang::EOpRayQueryGenerateIntersection:
+        case glslang::EOpRayQueryGetIntersectionType:
+        case glslang::EOpRayQueryGetIntersectionT:
+        case glslang::EOpRayQueryGetIntersectionInstanceCustomIndex:
+        case glslang::EOpRayQueryGetIntersectionInstanceId:
+        case glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset:
+        case glslang::EOpRayQueryGetIntersectionGeometryIndex:
+        case glslang::EOpRayQueryGetIntersectionPrimitiveIndex:
+        case glslang::EOpRayQueryGetIntersectionBarycentrics:
+        case glslang::EOpRayQueryGetIntersectionFrontFace:
+        case glslang::EOpRayQueryGetIntersectionObjectRayDirection:
+        case glslang::EOpRayQueryGetIntersectionObjectRayOrigin:
+        case glslang::EOpRayQueryGetIntersectionObjectToWorld:
+        case glslang::EOpRayQueryGetIntersectionWorldToObject:
+            if (arg == 0)
+                lvalue = true;
+            break;
+
+        case glslang::EOpAtomicAdd:
+        case glslang::EOpAtomicMin:
+        case glslang::EOpAtomicMax:
+        case glslang::EOpAtomicAnd:
+        case glslang::EOpAtomicOr:
+        case glslang::EOpAtomicXor:
+        case glslang::EOpAtomicExchange:
+        case glslang::EOpAtomicCompSwap:
+            if (arg == 0)
+                lvalue = true;
+            break;
+
 #ifndef GLSLANG_WEB
         case glslang::EOpFrexp:
             if (arg == 1)
@@ -2680,19 +2868,16 @@
 
                 // Does it need a swizzle inversion?  If so, evaluation is inverted;
                 // operate first on the swizzle base, then apply the swizzle.
+                // That is, we transform
+                //
+                //    interpolate(v.zy)  ->  interpolate(v).zy
+                //
                 if (glslangOperands[0]->getAsOperator() &&
                     glslangOperands[0]->getAsOperator()->getOp() == glslang::EOpVectorSwizzle)
-                    invertedType = convertGlslangToSpvType(glslangOperands[0]->getAsBinaryNode()->getLeft()->getType());
+                    invertedType = convertGlslangToSpvType(
+                        glslangOperands[0]->getAsBinaryNode()->getLeft()->getType());
             }
             break;
-        case glslang::EOpAtomicAdd:
-        case glslang::EOpAtomicMin:
-        case glslang::EOpAtomicMax:
-        case glslang::EOpAtomicAnd:
-        case glslang::EOpAtomicOr:
-        case glslang::EOpAtomicXor:
-        case glslang::EOpAtomicExchange:
-        case glslang::EOpAtomicCompSwap:
         case glslang::EOpAtomicLoad:
         case glslang::EOpAtomicStore:
         case glslang::EOpAtomicCounterAdd:
@@ -2750,8 +2935,9 @@
                 builder.setAccessChain(save);
 
                 // Point to the first element of the array.
-                builder.accessChainPush(elementId, TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType()),
-                                                   glslangOperands[arg]->getAsTyped()->getType().getBufferReferenceAlignment());
+                builder.accessChainPush(elementId,
+                    TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType()),
+                                      glslangOperands[arg]->getAsTyped()->getType().getBufferReferenceAlignment());
 
                 spv::Builder::AccessChain::CoherentFlags coherentFlags = builder.getAccessChain().coherentFlags;
                 unsigned int alignment = builder.getAccessChain().alignment;
@@ -2761,7 +2947,8 @@
                     memoryAccess &= ~spv::MemoryAccessMakePointerAvailableKHRMask;
                 if (node->getOp() == glslang::EOpCooperativeMatrixStore)
                     memoryAccess &= ~spv::MemoryAccessMakePointerVisibleKHRMask;
-                if (builder.getStorageClass(builder.getAccessChain().base) == spv::StorageClassPhysicalStorageBufferEXT) {
+                if (builder.getStorageClass(builder.getAccessChain().base) ==
+                    spv::StorageClassPhysicalStorageBufferEXT) {
                     memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessAlignedMask);
                 }
 
@@ -2771,8 +2958,10 @@
                     memoryAccessOperands.push_back(spv::IdImmediate(false, alignment));
                 }
 
-                if (memoryAccess & (spv::MemoryAccessMakePointerAvailableKHRMask | spv::MemoryAccessMakePointerVisibleKHRMask)) {
-                    memoryAccessOperands.push_back(spv::IdImmediate(true, builder.makeUintConstant(TranslateMemoryScope(coherentFlags))));
+                if (memoryAccess &
+                    (spv::MemoryAccessMakePointerAvailableKHRMask | spv::MemoryAccessMakePointerVisibleKHRMask)) {
+                    memoryAccessOperands.push_back(spv::IdImmediate(true,
+                        builder.makeUintConstant(TranslateMemoryScope(coherentFlags))));
                 }
             } else if (arg == 2) {
                 continue;
@@ -2780,13 +2969,47 @@
         }
 #endif
 
+        // for l-values, pass the address, for r-values, pass the value
         if (lvalue) {
-            operands.push_back(builder.accessChainGetLValue());
+            if (invertedType == spv::NoType && !builder.isSpvLvalue()) {
+                // SPIR-V cannot represent an l-value containing a swizzle that doesn't
+                // reduce to a simple access chain.  So, we need a temporary vector to
+                // receive the result, and must later swizzle that into the original
+                // l-value.
+                complexLvalues.push_back(builder.getAccessChain());
+                temporaryLvalues.push_back(builder.createVariable(spv::StorageClassFunction,
+                    builder.accessChainGetInferredType(), "swizzleTemp"));
+                operands.push_back(temporaryLvalues.back());
+            } else {
+                operands.push_back(builder.accessChainGetLValue());
+            }
             lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
             lvalueCoherentFlags |= TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType());
         } else {
             builder.setLine(node->getLoc().line, node->getLoc().getFilename());
-            operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType()));
+             glslang::TOperator glslangOp = node->getOp();
+             if (arg == 1 &&
+                (glslangOp == glslang::EOpRayQueryGetIntersectionType ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionT ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionInstanceCustomIndex ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionInstanceId ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionGeometryIndex ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionPrimitiveIndex ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionBarycentrics ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionFrontFace ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionObjectRayDirection ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionObjectRayOrigin ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionObjectToWorld ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionWorldToObject
+                    )) {
+                bool cond = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getBConst();
+                operands.push_back(builder.makeIntConstant(cond ? 1 : 0));
+            }
+            else {
+                operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType()));
+            }
+
         }
     }
 
@@ -2818,12 +3041,19 @@
 
         builder.createNoResultOp(spv::OpCooperativeMatrixStoreNV, idImmOps);
         result = 0;
-    } else if (atomic) {
-        // Handle all atomics
-        result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(), lvalueCoherentFlags);
     } else
 #endif
-    {
+    if (atomic) {
+        // Handle all atomics
+        result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(),
+            lvalueCoherentFlags);
+    } else if (node->getOp() == glslang::EOpDebugPrintf) {
+        if (!nonSemanticDebugPrintf) {
+            nonSemanticDebugPrintf = builder.import("NonSemantic.DebugPrintf");
+        }
+        result = builder.createBuiltinCall(builder.makeVoidType(), nonSemanticDebugPrintf, spv::NonSemanticDebugPrintfDebugPrintf, operands);
+        builder.addExtension(spv::E_SPV_KHR_non_semantic_info);
+    } else {
         // Pass through to generic operations.
         switch (glslangOperands.size()) {
         case 0:
@@ -2844,8 +3074,14 @@
             result = createMiscOperation(node->getOp(), precision, resultType(), operands, node->getBasicType());
             break;
         }
-        if (invertedType)
+
+        if (invertedType != spv::NoResult)
             result = createInvertedSwizzle(precision, *glslangOperands[0]->getAsBinaryNode(), result);
+
+        for (unsigned int i = 0; i < temporaryLvalues.size(); ++i) {
+            builder.setAccessChain(complexLvalues[i]);
+            builder.accessChainStore(builder.createLoad(temporaryLvalues[i]));
+        }
     }
 
     if (noReturnValue)
@@ -3052,7 +3288,8 @@
             defaultSegment = (int)codeSegments.size();
         else if (child->getAsBranchNode() && child->getAsBranchNode()->getFlowOp() == glslang::EOpCase) {
             valueIndexToSegment[caseValues.size()] = (int)codeSegments.size();
-            caseValues.push_back(child->getAsBranchNode()->getExpression()->getAsConstantUnion()->getConstArray()[0].getIConst());
+            caseValues.push_back(child->getAsBranchNode()->getExpression()->getAsConstantUnion()
+                ->getConstArray()[0].getIConst());
         } else
             codeSegments.push_back(child);
     }
@@ -3065,7 +3302,8 @@
 
     // make the switch statement
     std::vector<spv::Block*> segmentBlocks; // returned, as the blocks allocated in the call
-    builder.makeSwitch(selector, control, (int)codeSegments.size(), caseValues, valueIndexToSegment, defaultSegment, segmentBlocks);
+    builder.makeSwitch(selector, control, (int)codeSegments.size(), caseValues, valueIndexToSegment, defaultSegment,
+        segmentBlocks);
 
     // emit all the code in the segments
     breakForLoop.push(false);
@@ -3322,7 +3560,8 @@
 
 // When inverting a swizzle with a parent op, this function
 // will apply the swizzle operation to a completed parent operation.
-spv::Id TGlslangToSpvTraverser::createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped& node, spv::Id parentResult)
+spv::Id TGlslangToSpvTraverser::createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped& node,
+    spv::Id parentResult)
 {
     std::vector<unsigned> swizzle;
     convertSwizzle(*node.getAsBinaryNode()->getRight()->getAsAggregate(), swizzle);
@@ -3405,8 +3644,11 @@
         builder.addCapability(spv::CapabilityAtomicStorage);
         spvType = builder.makeUintType(32);
         break;
-    case glslang::EbtAccStructNV:
-        spvType = builder.makeAccelerationStructureNVType();
+    case glslang::EbtAccStruct:
+        spvType = builder.makeAccelerationStructureType();
+        break;
+    case glslang::EbtRayQuery:
+        spvType = builder.makeRayQueryType();
         break;
     case glslang::EbtReference:
         {
@@ -3458,10 +3700,13 @@
 
             // else, we haven't seen it...
             if (type.getBasicType() == glslang::EbtBlock)
-                memberRemapper[glslangMembers].resize(glslangMembers->size());
+                memberRemapper[glslangTypeToIdMap[glslangMembers]].resize(glslangMembers->size());
             spvType = convertGlslangStructToSpvType(type, glslangMembers, explicitLayout, qualifier);
         }
         break;
+    case glslang::EbtString:
+        // no type used for OpString
+        return 0;
     default:
         assert(0);
         break;
@@ -3535,8 +3780,8 @@
                 builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
                 builder.addCapability(spv::CapabilityRuntimeDescriptorArrayEXT);
             }
-            spvType = builder.makeRuntimeArray(spvType);
 #endif
+            spvType = builder.makeRuntimeArray(spvType);
         }
         if (stride > 0)
             builder.addDecoration(spvType, spv::DecorationArrayStride, stride);
@@ -3587,22 +3832,23 @@
 {
     // Create a vector of struct types for SPIR-V to consume
     std::vector<spv::Id> spvMembers;
-    int memberDelta = 0;  // how much the member's index changes from glslang to SPIR-V, normally 0, except sometimes for blocks
+    int memberDelta = 0;  // how much the member's index changes from glslang to SPIR-V, normally 0,
+                          // except sometimes for blocks
     std::vector<std::pair<glslang::TType*, glslang::TQualifier> > deferredForwardPointers;
     for (int i = 0; i < (int)glslangMembers->size(); i++) {
         glslang::TType& glslangMember = *(*glslangMembers)[i].type;
         if (glslangMember.hiddenMember()) {
             ++memberDelta;
             if (type.getBasicType() == glslang::EbtBlock)
-                memberRemapper[glslangMembers][i] = -1;
+                memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = -1;
         } else {
             if (type.getBasicType() == glslang::EbtBlock) {
                 if (filterMember(glslangMember)) {
                     memberDelta++;
-                    memberRemapper[glslangMembers][i] = -1;
+                    memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = -1;
                     continue;
                 }
-                memberRemapper[glslangMembers][i] = i - memberDelta;
+                memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = i - memberDelta;
             }
             // modify just this child's view of the qualifier
             glslang::TQualifier memberQualifier = glslangMember.getQualifier();
@@ -3623,10 +3869,12 @@
                     deferredForwardPointers.push_back(std::make_pair(&glslangMember, memberQualifier));
                 }
                 spvMembers.push_back(
-                    convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember, true));
+                    convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember,
+                        true));
             } else {
                 spvMembers.push_back(
-                    convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember, false));
+                    convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier, lastBufferBlockMember,
+                        false));
             }
         }
     }
@@ -3660,7 +3908,7 @@
         glslang::TType& glslangMember = *(*glslangMembers)[i].type;
         int member = i;
         if (type.getBasicType() == glslang::EbtBlock) {
-            member = memberRemapper[glslangMembers][i];
+            member = memberRemapper[glslangTypeToIdMap[glslangMembers]][i];
             if (filterMember(glslangMember))
                 continue;
         }
@@ -3701,6 +3949,7 @@
             for (unsigned int i = 0; i < memory.size(); ++i)
                 builder.addMemberDecoration(spvType, member, memory[i]);
         }
+
 #endif
 
         // Location assignment was already completed correctly by the front end,
@@ -3813,11 +4062,11 @@
     alignment |= type.getBufferReferenceAlignment();
 
     spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type),
-                                               TranslateNonUniformDecoration(type.getQualifier()),
-                                               nominalTypeId,
-                                               spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask),
-                                               TranslateMemoryScope(coherentFlags),
-                                               alignment);
+        TranslateNonUniformDecoration(type.getQualifier()),
+        nominalTypeId,
+        spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask),
+        TranslateMemoryScope(coherentFlags),
+        alignment);
 
     // Need to convert to abstract types when necessary
     if (type.getBasicType() == glslang::EbtBool) {
@@ -3831,7 +4080,8 @@
             int vecSize = builder.getNumTypeComponents(nominalTypeId);
             spv::Id bvecType = builder.makeVectorType(builder.makeBoolType(), vecSize);
             if (nominalTypeId != bvecType)
-                loadedId = builder.createBinOp(spv::OpINotEqual, bvecType, loadedId, makeSmearedConstant(builder.makeUintConstant(0), vecSize));
+                loadedId = builder.createBinOp(spv::OpINotEqual, bvecType, loadedId,
+                    makeSmearedConstant(builder.makeUintConstant(0), vecSize));
         }
     }
 
@@ -3880,7 +4130,8 @@
     alignment |= type.getBufferReferenceAlignment();
 
     builder.accessChainStore(rvalue,
-                             spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerVisibleKHRMask),
+                             spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) &
+                                ~spv::MemoryAccessMakePointerVisibleKHRMask),
                              TranslateMemoryScope(coherentFlags), alignment);
 }
 
@@ -3941,7 +4192,8 @@
             // set up the target storage
             builder.clearAccessChain();
             builder.setAccessChainLValue(lValue);
-            builder.accessChainPush(builder.makeIntConstant(index), TranslateCoherent(type), type.getBufferReferenceAlignment());
+            builder.accessChainPush(builder.makeIntConstant(index), TranslateCoherent(type),
+                type.getBufferReferenceAlignment());
 
             // store the member
             multiTypeStore(glslangElementType, elementRValue);
@@ -3961,7 +4213,8 @@
             // set up the target storage
             builder.clearAccessChain();
             builder.setAccessChainLValue(lValue);
-            builder.accessChainPush(builder.makeIntConstant(m), TranslateCoherent(type), type.getBufferReferenceAlignment());
+            builder.accessChainPush(builder.makeIntConstant(m), TranslateCoherent(type),
+                type.getBufferReferenceAlignment());
 
             // store the member
             multiTypeStore(glslangMemberType, memberRValue);
@@ -3996,18 +4249,21 @@
 }
 
 // Given an array type, returns the integer stride required for that array
-int TGlslangToSpvTraverser::getArrayStride(const glslang::TType& arrayType, glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout)
+int TGlslangToSpvTraverser::getArrayStride(const glslang::TType& arrayType, glslang::TLayoutPacking explicitLayout,
+    glslang::TLayoutMatrix matrixLayout)
 {
     int size;
     int stride;
-    glslangIntermediate->getMemberAlignment(arrayType, size, stride, explicitLayout, matrixLayout == glslang::ElmRowMajor);
+    glslangIntermediate->getMemberAlignment(arrayType, size, stride, explicitLayout,
+        matrixLayout == glslang::ElmRowMajor);
 
     return stride;
 }
 
 // Given a matrix type, or array (of array) of matrixes type, returns the integer stride required for that matrix
 // when used as a member of an interface block
-int TGlslangToSpvTraverser::getMatrixStride(const glslang::TType& matrixType, glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout)
+int TGlslangToSpvTraverser::getMatrixStride(const glslang::TType& matrixType, glslang::TLayoutPacking explicitLayout,
+    glslang::TLayoutMatrix matrixLayout)
 {
     glslang::TType elementType;
     elementType.shallowCopy(matrixType);
@@ -4015,7 +4271,8 @@
 
     int size;
     int stride;
-    glslangIntermediate->getMemberAlignment(elementType, size, stride, explicitLayout, matrixLayout == glslang::ElmRowMajor);
+    glslangIntermediate->getMemberAlignment(elementType, size, stride, explicitLayout,
+        matrixLayout == glslang::ElmRowMajor);
 
     return stride;
 }
@@ -4026,8 +4283,8 @@
 // 'currentOffset' should be passed in already initialized, ready to modify, and reflecting
 // the migration of data from nextOffset -> currentOffset.  It should be -1 on the first call.
 // -1 means a non-forced member offset (no decoration needed).
-void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset, int& nextOffset,
-                                                glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout)
+void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType,
+    int& currentOffset, int& nextOffset, glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout)
 {
     // this will get a positive value when deemed necessary
     nextOffset = -1;
@@ -4057,7 +4314,8 @@
 
     int memberSize;
     int dummyStride;
-    int memberAlignment = glslangIntermediate->getMemberAlignment(memberType, memberSize, dummyStride, explicitLayout, matrixLayout == glslang::ElmRowMajor);
+    int memberAlignment = glslangIntermediate->getMemberAlignment(memberType, memberSize, dummyStride, explicitLayout,
+        matrixLayout == glslang::ElmRowMajor);
 
     // Adjust alignment for HLSL rules
     // TODO: make this consistent in early phases of code:
@@ -4076,7 +4334,8 @@
     glslang::RoundToPow2(currentOffset, memberAlignment);
 
     // Bump up to vec4 if there is a bad straddle
-    if (explicitLayout != glslang::ElpScalar && glslangIntermediate->improperStraddle(memberType, memberSize, currentOffset))
+    if (explicitLayout != glslang::ElpScalar && glslangIntermediate->improperStraddle(memberType, memberSize,
+        currentOffset))
         glslang::RoundToPow2(currentOffset, 16);
 
     nextOffset = currentOffset + memberSize;
@@ -4148,7 +4407,8 @@
 // Make all the functions, skeletally, without actually visiting their bodies.
 void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslFunctions)
 {
-    const auto getParamDecorations = [&](std::vector<spv::Decoration>& decorations, const glslang::TType& type, bool useVulkanMemoryModel) {
+    const auto getParamDecorations = [&](std::vector<spv::Decoration>& decorations, const glslang::TType& type,
+        bool useVulkanMemoryModel) {
         spv::Decoration paramPrecision = TranslatePrecisionDecoration(type);
         if (paramPrecision != spv::NoPrecision)
             decorations.push_back(paramPrecision);
@@ -4159,9 +4419,11 @@
             // memory and use RestrictPointer/AliasedPointer.
             if (originalParam(type.getQualifier().storage, type, false) ||
                 !writableParam(type.getQualifier().storage)) {
-                decorations.push_back(type.getQualifier().restrict ? spv::DecorationRestrict : spv::DecorationAliased);
+                decorations.push_back(type.getQualifier().isRestrict() ? spv::DecorationRestrict :
+                                                                         spv::DecorationAliased);
             } else {
-                decorations.push_back(type.getQualifier().restrict ? spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT);
+                decorations.push_back(type.getQualifier().isRestrict() ? spv::DecorationRestrictPointerEXT :
+                                                                         spv::DecorationAliasedPointerEXT);
             }
         }
     };
@@ -4244,7 +4506,8 @@
     builder.setBuildPoint(shaderEntry->getLastBlock());
     for (int i = 0; i < (int)initializers.size(); ++i) {
         glslang::TIntermAggregate* initializer = initializers[i]->getAsAggregate();
-        if (initializer && initializer->getOp() != glslang::EOpFunction && initializer->getOp() != glslang::EOpLinkerObjects) {
+        if (initializer && initializer->getOp() != glslang::EOpFunction && initializer->getOp() !=
+            glslang::EOpLinkerObjects) {
 
             // We're on a top-level node that's not a function.  Treat as an initializer, whose
             // code goes into the beginning of the entry point.
@@ -4272,7 +4535,8 @@
     builder.setBuildPoint(functionBlock);
 }
 
-void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments, spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
+void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments,
+    spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
 {
     const glslang::TIntermSequence& glslangArguments = node.getSequence();
 
@@ -4285,7 +4549,8 @@
         sampler = glslangArguments[0]->getAsTyped()->getType().getSampler();
         cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
 #ifndef GLSLANG_WEB
-        f16ShadowCompare = sampler.shadow && glslangArguments[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16;
+        f16ShadowCompare = sampler.shadow &&
+            glslangArguments[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16;
 #endif
     }
 
@@ -4661,7 +4926,8 @@
                 operands.push_back(imageOperand);
             }
             if (mask & spv::ImageOperandsMakeTexelVisibleKHRMask) {
-                spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) };
+                spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(
+                    TranslateCoherent(imageType))) };
                 operands.push_back(imageOperand);
             }
 
@@ -4689,18 +4955,22 @@
             // imageAtomicStore has a void return type so base the pointer type on
             // the type of the value operand.
             if (node->getOp() == glslang::EOpImageAtomicStore) {
-                resultTypeId = builder.makePointer(spv::StorageClassImage, builder.getTypeId(operands[2].word));                
+                resultTypeId = builder.makePointer(spv::StorageClassImage, builder.getTypeId(*opIt));
             } else {
                 resultTypeId = builder.makePointer(spv::StorageClassImage, resultType());
             }
             spv::Id pointer = builder.createOp(spv::OpImageTexelPointer, resultTypeId, operands);
+            if (imageType.getQualifier().nonUniform) {
+                builder.addDecoration(pointer, spv::DecorationNonUniformEXT);
+            }
 
             std::vector<spv::Id> operands;
             operands.push_back(pointer);
             for (; opIt != arguments.end(); ++opIt)
                 operands.push_back(*opIt);
 
-            return createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(), lvalueCoherentFlags);
+            return createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(),
+                lvalueCoherentFlags);
         }
     }
 
@@ -4725,7 +4995,8 @@
             std::vector<spv::Id> comps;
             comps.push_back(zero);
             comps.push_back(zero);
-            operands.push_back(builder.makeCompositeConstant(builder.makeVectorType(builder.makeIntType(32), 2), comps));
+            operands.push_back(builder.makeCompositeConstant(
+                builder.makeVectorType(builder.makeIntType(32), 2), comps));
         }
 
         for (; opIt != arguments.end(); ++opIt)
@@ -4814,7 +5085,8 @@
         else
             dRefComp = builder.getNumComponents(params.coords) - 1;
         indexes.push_back(dRefComp);
-        params.Dref = builder.createCompositeExtract(params.coords, builder.getScalarTypeId(builder.getTypeId(params.coords)), indexes);
+        params.Dref = builder.createCompositeExtract(params.coords,
+            builder.getScalarTypeId(builder.getTypeId(params.coords)), indexes);
     }
 
     // lod
@@ -4939,7 +5211,8 @@
             flags.clear();
 
             builder.accessChainPush(builder.makeIntConstant(i), flags, 0);
-            builder.accessChainStore(builder.createCompositeExtract(res, builder.getContainedTypeId(resType, i+1), i+1));
+            builder.accessChainStore(builder.createCompositeExtract(res, builder.getContainedTypeId(resType, i+1),
+                i+1));
         }
         return builder.createCompositeExtract(res, resultType(), 0);
     }
@@ -4962,13 +5235,13 @@
         // copy the projective coordinate if we have to
         if (projTargetComp != projSourceComp) {
             spv::Id projComp = builder.createCompositeExtract(params.coords,
-                                                              builder.getScalarTypeId(builder.getTypeId(params.coords)),
-                                                              projSourceComp);
+                                    builder.getScalarTypeId(builder.getTypeId(params.coords)), projSourceComp);
             params.coords = builder.createCompositeInsert(projComp, params.coords,
-                                                          builder.getTypeId(params.coords), projTargetComp);
+                                    builder.getTypeId(params.coords), projTargetComp);
         }
     }
 
+#ifndef GLSLANG_WEB
     // nonprivate
     if (imageType.getQualifier().nonprivate) {
         params.nonprivate = true;
@@ -4978,6 +5251,7 @@
     if (imageType.getQualifier().volatil) {
         params.volatil = true;
     }
+#endif
 
     std::vector<spv::Id> result( 1, 
         builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather,
@@ -5043,7 +5317,8 @@
             ++lValueCount;
         } else if (writableParam(qualifiers[a])) {
             // need space to hold the copy
-            arg = builder.createVariable(spv::StorageClassFunction, builder.getContainedTypeId(function->getParamType(a)), "param");
+            arg = builder.createVariable(spv::StorageClassFunction,
+                builder.getContainedTypeId(function->getParamType(a)), "param");
             if (qualifiers[a] == glslang::EvqIn || qualifiers[a] == glslang::EvqInOut) {
                 // need to copy the input into output space
                 builder.setAccessChain(lValues[lValueCount]);
@@ -5212,6 +5487,30 @@
         binOp = spv::OpLogicalNotEqual;
         break;
 
+    case glslang::EOpAbsDifference:
+        binOp = isUnsigned ? spv::OpAbsUSubINTEL : spv::OpAbsISubINTEL;
+        break;
+
+    case glslang::EOpAddSaturate:
+        binOp = isUnsigned ? spv::OpUAddSatINTEL : spv::OpIAddSatINTEL;
+        break;
+
+    case glslang::EOpSubSaturate:
+        binOp = isUnsigned ? spv::OpUSubSatINTEL : spv::OpISubSatINTEL;
+        break;
+
+    case glslang::EOpAverage:
+        binOp = isUnsigned ? spv::OpUAverageINTEL : spv::OpIAverageINTEL;
+        break;
+
+    case glslang::EOpAverageRounded:
+        binOp = isUnsigned ? spv::OpUAverageRoundedINTEL : spv::OpIAverageRoundedINTEL;
+        break;
+
+    case glslang::EOpMul32x16:
+        binOp = isUnsigned ? spv::OpUMul32x16INTEL : spv::OpIMul32x16INTEL;
+        break;
+
     case glslang::EOpLessThan:
     case glslang::EOpGreaterThan:
     case glslang::EOpLessThanEqual:
@@ -5434,7 +5733,7 @@
 }
 
 spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDecorations& decorations, spv::Id typeId,
-                                                     spv::Id operand, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
+    spv::Id operand, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
 {
     spv::Op unaryOp = spv::OpNop;
     int extBuiltins = -1;
@@ -5695,6 +5994,24 @@
     case glslang::EOpFwidthCoarse:
         unaryOp = spv::OpFwidthCoarse;
         break;
+    case glslang::EOpRayQueryProceed:
+        unaryOp = spv::OpRayQueryProceedKHR;
+        break;
+    case glslang::EOpRayQueryGetRayTMin:
+        unaryOp = spv::OpRayQueryGetRayTMinKHR;
+        break;
+    case glslang::EOpRayQueryGetRayFlags:
+        unaryOp = spv::OpRayQueryGetRayFlagsKHR;
+        break;
+    case glslang::EOpRayQueryGetWorldRayOrigin:
+        unaryOp = spv::OpRayQueryGetWorldRayOriginKHR;
+        break;
+    case glslang::EOpRayQueryGetWorldRayDirection:
+        unaryOp = spv::OpRayQueryGetWorldRayDirectionKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque:
+        unaryOp = spv::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR;
+        break;
     case glslang::EOpInterpolateAtCentroid:
         if (typeProxy == glslang::EbtFloat16)
             builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
@@ -5726,6 +6043,18 @@
             libCall = spv::GLSLstd450FindSMsb;
         break;
 
+    case glslang::EOpCountLeadingZeros:
+        builder.addCapability(spv::CapabilityIntegerFunctions2INTEL);
+        builder.addExtension("SPV_INTEL_shader_integer_functions2");
+        unaryOp = spv::OpUCountLeadingZerosINTEL;
+        break;
+
+    case glslang::EOpCountTrailingZeros:
+        builder.addCapability(spv::CapabilityIntegerFunctions2INTEL);
+        builder.addExtension("SPV_INTEL_shader_integer_functions2");
+        unaryOp = spv::OpUCountTrailingZerosINTEL;
+        break;
+
     case glslang::EOpBallot:
     case glslang::EOpReadFirstInvocation:
     case glslang::EOpAnyInvocation:
@@ -6315,7 +6644,9 @@
 }
 
 // For glslang ops that map to SPV atomic opCodes
-spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv::Decoration /*precision*/, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
+spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv::Decoration /*precision*/,
+    spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy,
+    const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
 {
     spv::Op opCode = spv::OpNop;
 
@@ -6331,12 +6662,14 @@
     case glslang::EOpAtomicMin:
     case glslang::EOpImageAtomicMin:
     case glslang::EOpAtomicCounterMin:
-        opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ? spv::OpAtomicUMin : spv::OpAtomicSMin;
+        opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ?
+            spv::OpAtomicUMin : spv::OpAtomicSMin;
         break;
     case glslang::EOpAtomicMax:
     case glslang::EOpImageAtomicMax:
     case glslang::EOpAtomicCounterMax:
-        opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ? spv::OpAtomicUMax : spv::OpAtomicSMax;
+        opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ?
+            spv::OpAtomicUMax : spv::OpAtomicSMax;
         break;
     case glslang::EOpAtomicAnd:
     case glslang::EOpImageAtomicAnd:
@@ -6401,7 +6734,8 @@
         scopeId = builder.makeUintConstant(spv::ScopeDevice);
     }
     // semantics default to relaxed 
-    spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() ? 
+    spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() &&
+        glslangIntermediate->usingVulkanMemoryModel() ?
                                                     spv::MemorySemanticsVolatileMask :
                                                     spv::MemorySemanticsMaskNone);
     spv::Id semanticsId2 = semanticsId;
@@ -6414,20 +6748,24 @@
         valueId = operands[2];
         if (operands.size() > 3) {
             scopeId = operands[3];
-            semanticsId = builder.makeUintConstant(builder.getConstantScalar(operands[4]) | builder.getConstantScalar(operands[5]));
-            semanticsId2 = builder.makeUintConstant(builder.getConstantScalar(operands[6]) | builder.getConstantScalar(operands[7]));
+            semanticsId = builder.makeUintConstant(
+                builder.getConstantScalar(operands[4]) | builder.getConstantScalar(operands[5]));
+            semanticsId2 = builder.makeUintConstant(
+                builder.getConstantScalar(operands[6]) | builder.getConstantScalar(operands[7]));
         }
     } else if (opCode == spv::OpAtomicLoad) {
         if (operands.size() > 1) {
             scopeId = operands[1];
-            semanticsId = builder.makeUintConstant(builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]));
+            semanticsId = builder.makeUintConstant(
+                builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]));
         }
     } else {
         // atomic store or RMW
         valueId = operands[1];
         if (operands.size() > 2) {
             scopeId = operands[2];
-            semanticsId = builder.makeUintConstant(builder.getConstantScalar(operands[3]) | builder.getConstantScalar(operands[4]));
+            semanticsId = builder.makeUintConstant
+                (builder.getConstantScalar(operands[3]) | builder.getConstantScalar(operands[4]));
         }
     }
 
@@ -6472,7 +6810,8 @@
 }
 
 // Create group invocation operations.
-spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
+spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op, spv::Id typeId,
+    std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
     bool isUnsigned = isTypeUnsignedInt(typeProxy);
     bool isFloat = isTypeFloat(typeProxy);
@@ -6686,8 +7025,10 @@
            op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax ||
            op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast ||
            op == spv::OpSubgroupReadInvocationKHR ||
-           op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD || op == spv::OpGroupSMinNonUniformAMD ||
-           op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD || op == spv::OpGroupSMaxNonUniformAMD ||
+           op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD ||
+           op == spv::OpGroupSMinNonUniformAMD ||
+           op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD ||
+           op == spv::OpGroupSMaxNonUniformAMD ||
            op == spv::OpGroupFAddNonUniformAMD || op == spv::OpGroupIAddNonUniformAMD);
 
     // Handle group invocation operations scalar by scalar.
@@ -7076,7 +7417,8 @@
     return builder.createOp(opCode, typeId, spvGroupOperands);
 }
 
-spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
+spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::Decoration precision,
+    spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy)
 {
     bool isUnsigned = isTypeUnsignedInt(typeProxy);
     bool isFloat = isTypeFloat(typeProxy);
@@ -7170,6 +7512,50 @@
     case glslang::EOpRefract:
         libCall = spv::GLSLstd450Refract;
         break;
+    case glslang::EOpBarrier:
+        {
+            // This is for the extended controlBarrier function, with four operands.
+            // The unextended barrier() goes through createNoArgOperation.
+            assert(operands.size() == 4);
+            unsigned int executionScope = builder.getConstantScalar(operands[0]);
+            unsigned int memoryScope = builder.getConstantScalar(operands[1]);
+            unsigned int semantics = builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]);
+            builder.createControlBarrier((spv::Scope)executionScope, (spv::Scope)memoryScope,
+                (spv::MemorySemanticsMask)semantics);
+            if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask |
+                             spv::MemorySemanticsMakeVisibleKHRMask |
+                             spv::MemorySemanticsOutputMemoryKHRMask |
+                             spv::MemorySemanticsVolatileMask)) {
+                builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
+            }
+            if (glslangIntermediate->usingVulkanMemoryModel() && (executionScope == spv::ScopeDevice ||
+                memoryScope == spv::ScopeDevice)) {
+                builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
+            }
+            return 0;
+        }
+        break;
+    case glslang::EOpMemoryBarrier:
+        {
+            // This is for the extended memoryBarrier function, with three operands.
+            // The unextended memoryBarrier() goes through createNoArgOperation.
+            assert(operands.size() == 3);
+            unsigned int memoryScope = builder.getConstantScalar(operands[0]);
+            unsigned int semantics = builder.getConstantScalar(operands[1]) | builder.getConstantScalar(operands[2]);
+            builder.createMemoryBarrier((spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics);
+            if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask |
+                             spv::MemorySemanticsMakeVisibleKHRMask |
+                             spv::MemorySemanticsOutputMemoryKHRMask |
+                             spv::MemorySemanticsVolatileMask)) {
+                builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
+            }
+            if (glslangIntermediate->usingVulkanMemoryModel() && memoryScope == spv::ScopeDevice) {
+                builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
+            }
+            return 0;
+        }
+        break;
+
 #ifndef GLSLANG_WEB
     case glslang::EOpInterpolateAtSample:
         if (typeProxy == glslang::EbtFloat16)
@@ -7226,7 +7612,8 @@
             if (builder.getNumComponents(operands[0]) == 1)
                 frexpIntType = builder.makeIntegerType(width, true);
             else
-                frexpIntType = builder.makeVectorType(builder.makeIntegerType(width, true), builder.getNumComponents(operands[0]));
+                frexpIntType = builder.makeVectorType(builder.makeIntegerType(width, true),
+                    builder.getNumComponents(operands[0]));
             typeId = builder.makeStructResultType(typeId0, frexpIntType);
             consumedOperands = 1;
         }
@@ -7328,66 +7715,106 @@
         extBuiltins = getExtBuiltins(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
         libCall = spv::InterpolateAtVertexAMD;
         break;
-    case glslang::EOpBarrier:
-        {
-            // This is for the extended controlBarrier function, with four operands.
-            // The unextended barrier() goes through createNoArgOperation.
-            assert(operands.size() == 4);
-            unsigned int executionScope = builder.getConstantScalar(operands[0]);
-            unsigned int memoryScope = builder.getConstantScalar(operands[1]);
-            unsigned int semantics = builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]);
-            builder.createControlBarrier((spv::Scope)executionScope, (spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics);
-            if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask |
-                             spv::MemorySemanticsMakeVisibleKHRMask |
-                             spv::MemorySemanticsOutputMemoryKHRMask |
-                             spv::MemorySemanticsVolatileMask)) {
-                builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
-            }
-            if (glslangIntermediate->usingVulkanMemoryModel() && (executionScope == spv::ScopeDevice || memoryScope == spv::ScopeDevice)) {
-                builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
-            }
-            return 0;
-        }
-        break;
-    case glslang::EOpMemoryBarrier:
-        {
-            // This is for the extended memoryBarrier function, with three operands.
-            // The unextended memoryBarrier() goes through createNoArgOperation.
-            assert(operands.size() == 3);
-            unsigned int memoryScope = builder.getConstantScalar(operands[0]);
-            unsigned int semantics = builder.getConstantScalar(operands[1]) | builder.getConstantScalar(operands[2]);
-            builder.createMemoryBarrier((spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics);
-            if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask |
-                             spv::MemorySemanticsMakeVisibleKHRMask |
-                             spv::MemorySemanticsOutputMemoryKHRMask |
-                             spv::MemorySemanticsVolatileMask)) {
-                builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
-            }
-            if (glslangIntermediate->usingVulkanMemoryModel() && memoryScope == spv::ScopeDevice) {
-                builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
-            }
-            return 0;
-        }
-        break;
 
-    case glslang::EOpReportIntersectionNV:
-    {
+    case glslang::EOpReportIntersection:
         typeId = builder.makeBoolType();
-        opCode = spv::OpReportIntersectionNV;
-    }
-    break;
-    case glslang::EOpTraceNV:
-    {
-        builder.createNoResultOp(spv::OpTraceNV, operands);
+        opCode = spv::OpReportIntersectionKHR;
+        break;
+    case glslang::EOpTrace:
+        builder.createNoResultOp(spv::OpTraceRayKHR, operands);
         return 0;
-    }
-    break;
-    case glslang::EOpExecuteCallableNV:
-    {
-        builder.createNoResultOp(spv::OpExecuteCallableNV, operands);
+    case glslang::EOpExecuteCallable:
+        builder.createNoResultOp(spv::OpExecuteCallableKHR, operands);
         return 0;
-    }
-    break;
+
+    case glslang::EOpRayQueryInitialize:
+        builder.createNoResultOp(spv::OpRayQueryInitializeKHR, operands);
+        return 0;
+    case glslang::EOpRayQueryTerminate:
+        builder.createNoResultOp(spv::OpRayQueryTerminateKHR, operands);
+        return 0;
+    case glslang::EOpRayQueryGenerateIntersection:
+        builder.createNoResultOp(spv::OpRayQueryGenerateIntersectionKHR, operands);
+        return 0;
+    case glslang::EOpRayQueryConfirmIntersection:
+        builder.createNoResultOp(spv::OpRayQueryConfirmIntersectionKHR, operands);
+        return 0;
+    case glslang::EOpRayQueryProceed:
+        typeId = builder.makeBoolType();
+        opCode = spv::OpRayQueryProceedKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionType:
+        typeId = builder.makeUintType(32);
+        opCode = spv::OpRayQueryGetIntersectionTypeKHR;
+        break;
+    case glslang::EOpRayQueryGetRayTMin:
+        typeId = builder.makeFloatType(32);
+        opCode = spv::OpRayQueryGetRayTMinKHR;
+        break;
+    case glslang::EOpRayQueryGetRayFlags:
+        typeId = builder.makeIntType(32);
+        opCode = spv::OpRayQueryGetRayFlagsKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionT:
+        typeId = builder.makeFloatType(32);
+        opCode = spv::OpRayQueryGetIntersectionTKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionInstanceCustomIndex:
+        typeId = builder.makeIntType(32);
+        opCode = spv::OpRayQueryGetIntersectionInstanceCustomIndexKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionInstanceId:
+        typeId = builder.makeIntType(32);
+        opCode = spv::OpRayQueryGetIntersectionInstanceIdKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset:
+        typeId = builder.makeIntType(32);
+        opCode = spv::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionGeometryIndex:
+        typeId = builder.makeIntType(32);
+        opCode = spv::OpRayQueryGetIntersectionGeometryIndexKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionPrimitiveIndex:
+        typeId = builder.makeIntType(32);
+        opCode = spv::OpRayQueryGetIntersectionPrimitiveIndexKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionBarycentrics:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 2);
+        opCode = spv::OpRayQueryGetIntersectionBarycentricsKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionFrontFace:
+        typeId = builder.makeBoolType();
+        opCode = spv::OpRayQueryGetIntersectionFrontFaceKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque:
+        typeId = builder.makeBoolType();
+        opCode = spv::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionObjectRayDirection:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 3);
+        opCode = spv::OpRayQueryGetIntersectionObjectRayDirectionKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionObjectRayOrigin:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 3);
+        opCode = spv::OpRayQueryGetIntersectionObjectRayOriginKHR;
+        break;
+    case glslang::EOpRayQueryGetWorldRayDirection:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 3);
+        opCode = spv::OpRayQueryGetWorldRayDirectionKHR;
+        break;
+    case glslang::EOpRayQueryGetWorldRayOrigin:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 3);
+        opCode = spv::OpRayQueryGetWorldRayOriginKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionObjectToWorld:
+        typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3);
+        opCode = spv::OpRayQueryGetIntersectionObjectToWorldKHR;
+        break;
+    case glslang::EOpRayQueryGetIntersectionWorldToObject:
+        typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3);
+        opCode = spv::OpRayQueryGetIntersectionWorldToObjectKHR;
+        break;
     case glslang::EOpWritePackedPrimitiveIndices4x8NV:
         builder.createNoResultOp(spv::OpWritePackedPrimitiveIndices4x8NV, operands);
         return 0;
@@ -7415,7 +7842,7 @@
         id = builder.createCompositeExtract(mulOp, typeId, 0);
         for (int i = 1; i < componentCount; ++i) {
             builder.setPrecision(id, precision);
-            id = builder.createBinOp(spv::OpIAdd, typeId, id, builder.createCompositeExtract(operands[0], typeId, i));
+            id = builder.createBinOp(spv::OpIAdd, typeId, id, builder.createCompositeExtract(mulOp, typeId, i));
         }
     } else {
         switch (consumedOperands) {
@@ -7476,17 +7903,11 @@
 // Intrinsics with no arguments (or no return value, and no precision).
 spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId)
 {
-#ifndef GLSLANG_WEB
     // GLSL memory barriers use queuefamily scope in new model, device scope in old model
-    spv::Scope memoryBarrierScope = glslangIntermediate->usingVulkanMemoryModel() ? spv::ScopeQueueFamilyKHR : spv::ScopeDevice;
+    spv::Scope memoryBarrierScope = glslangIntermediate->usingVulkanMemoryModel() ?
+        spv::ScopeQueueFamilyKHR : spv::ScopeDevice;
 
     switch (op) {
-    case glslang::EOpEmitVertex:
-        builder.createNoResultOp(spv::OpEmitVertex);
-        return 0;
-    case glslang::EOpEndPrimitive:
-        builder.createNoResultOp(spv::OpEndPrimitive);
-        return 0;
     case glslang::EOpBarrier:
         if (glslangIntermediate->getStage() == EShLangTessControl) {
             if (glslangIntermediate->usingVulkanMemoryModel()) {
@@ -7507,18 +7928,10 @@
         builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAllMemory |
                                                         spv::MemorySemanticsAcquireReleaseMask);
         return 0;
-    case glslang::EOpMemoryBarrierAtomicCounter:
-        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAtomicCounterMemoryMask |
-                                                        spv::MemorySemanticsAcquireReleaseMask);
-        return 0;
     case glslang::EOpMemoryBarrierBuffer:
         builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsUniformMemoryMask |
                                                         spv::MemorySemanticsAcquireReleaseMask);
         return 0;
-    case glslang::EOpMemoryBarrierImage:
-        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsImageMemoryMask |
-                                                        spv::MemorySemanticsAcquireReleaseMask);
-        return 0;
     case glslang::EOpMemoryBarrierShared:
         builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsWorkgroupMemoryMask |
                                                         spv::MemorySemanticsAcquireReleaseMask);
@@ -7527,6 +7940,15 @@
         builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsAllMemory |
                                                          spv::MemorySemanticsAcquireReleaseMask);
         return 0;
+#ifndef GLSLANG_WEB
+    case glslang::EOpMemoryBarrierAtomicCounter:
+        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAtomicCounterMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
+        return 0;
+    case glslang::EOpMemoryBarrierImage:
+        builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsImageMemoryMask |
+                                                        spv::MemorySemanticsAcquireReleaseMask);
+        return 0;
     case glslang::EOpAllMemoryBarrierWithGroupSync:
         builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice,
                                         spv::MemorySemanticsAllMemory |
@@ -7571,6 +7993,14 @@
         builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsWorkgroupMemoryMask |
                                                         spv::MemorySemanticsAcquireReleaseMask);
         return spv::NoResult;
+
+    case glslang::EOpEmitVertex:
+        builder.createNoResultOp(spv::OpEmitVertex);
+        return 0;
+    case glslang::EOpEndPrimitive:
+        builder.createNoResultOp(spv::OpEndPrimitive);
+        return 0;
+
     case glslang::EOpSubgroupElect: {
         std::vector<spv::Id> operands;
         return createSubgroupOperation(op, typeId, operands, glslang::EbtVoid);
@@ -7581,13 +8011,24 @@
         spv::Id id = builder.createBuiltinCall(typeId, getExtBuiltins(spv::E_SPV_AMD_gcn_shader), spv::TimeAMD, args);
         return builder.setPrecision(id, precision);
     }
-    case glslang::EOpIgnoreIntersectionNV:
-        builder.createNoResultOp(spv::OpIgnoreIntersectionNV);
+    case glslang::EOpIgnoreIntersection:
+        builder.createNoResultOp(spv::OpIgnoreIntersectionKHR);
         return 0;
-    case glslang::EOpTerminateRayNV:
-        builder.createNoResultOp(spv::OpTerminateRayNV);
+    case glslang::EOpTerminateRay:
+        builder.createNoResultOp(spv::OpTerminateRayKHR);
         return 0;
-
+    case glslang::EOpRayQueryInitialize:
+        builder.createNoResultOp(spv::OpRayQueryInitializeKHR);
+        return 0;
+    case glslang::EOpRayQueryTerminate:
+        builder.createNoResultOp(spv::OpRayQueryTerminateKHR);
+        return 0;
+    case glslang::EOpRayQueryGenerateIntersection:
+        builder.createNoResultOp(spv::OpRayQueryGenerateIntersectionKHR);
+        return 0;
+    case glslang::EOpRayQueryConfirmIntersection:
+        builder.createNoResultOp(spv::OpRayQueryConfirmIntersectionKHR);
+        return 0;
     case glslang::EOpBeginInvocationInterlock:
         builder.createNoResultOp(spv::OpBeginInvocationInterlockEXT);
         return 0;
@@ -7618,10 +8059,10 @@
         builder.addCapability(spv::CapabilityShaderClockKHR);
         return builder.createOp(spv::OpReadClockKHR, typeId, args);
     }
+#endif
     default:
         break;
     }
-#endif
 
     logger->missingFunctionality("unknown operation with no arguments");
 
@@ -7639,7 +8080,7 @@
 
     // it was not found, create it
     spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false);
-    auto forcedType = getForcedType(builtIn, symbol->getType());
+    auto forcedType = getForcedType(symbol->getQualifier().builtIn, symbol->getType());
     id = createSpvVariable(symbol, forcedType.first);
     symbolValues[symbol->getId()] = id;
     if (forcedType.second != spv::NoType)
@@ -7704,7 +8145,8 @@
 #ifndef GLSLANG_WEB
     if (symbol->getType().isImage()) {
         std::vector<spv::Decoration> memory;
-        TranslateMemoryDecoration(symbol->getType().getQualifier(), memory, glslangIntermediate->usingVulkanMemoryModel());
+        TranslateMemoryDecoration(symbol->getType().getQualifier(), memory,
+            glslangIntermediate->usingVulkanMemoryModel());
         for (unsigned int i = 0; i < memory.size(); ++i)
             builder.addDecoration(id, memory[i]);
     }
@@ -7758,7 +8200,8 @@
     }
 
     if (symbol->isReference()) {
-        builder.addDecoration(id, symbol->getType().getQualifier().restrict ? spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT);
+        builder.addDecoration(id, symbol->getType().getQualifier().restrict ?
+            spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT);
     }
 #endif
 
@@ -7820,13 +8263,13 @@
         // hand off to the non-spec-constant path
         assert(node.getAsConstantUnion() != nullptr || node.getAsSymbolNode() != nullptr);
         int nextConst = 0;
-        return createSpvConstantFromConstUnionArray(node.getType(), node.getAsConstantUnion() ? node.getAsConstantUnion()->getConstArray() : node.getAsSymbolNode()->getConstArray(),
-                                 nextConst, false);
+        return createSpvConstantFromConstUnionArray(node.getType(), node.getAsConstantUnion() ?
+            node.getAsConstantUnion()->getConstArray() : node.getAsSymbolNode()->getConstArray(),
+            nextConst, false);
     }
 
     // We now know we have a specialization constant to build
 
-#ifndef GLSLANG_WEB
     // gl_WorkGroupSize is a special case until the front-end handles hierarchical specialization constants,
     // even then, it's specialization ids are handled by special case syntax in GLSL: layout(local_size_x = ...
     if (node.getType().getQualifier().builtIn == glslang::EbvWorkGroupSize) {
@@ -7841,7 +8284,6 @@
         }
         return builder.makeCompositeConstant(builder.makeVectorType(builder.makeUintType(32), 3), dimConstId, true);
     }
-#endif
 
     // An AST node labelled as specialization constant should be a symbol node.
     // Its initializer should either be a sub tree with constant nodes, or a constant union array.
@@ -7876,7 +8318,8 @@
 // If there are not enough elements present in 'consts', 0 will be substituted;
 // an empty 'consts' can be used to create a fully zeroed SPIR-V constant.
 //
-spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glslang::TType& glslangType, const glslang::TConstUnionArray& consts, int& nextConst, bool specConstant)
+spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glslang::TType& glslangType,
+    const glslang::TConstUnionArray& consts, int& nextConst, bool specConstant)
 {
     // vector of constants for SPIR-V
     std::vector<spv::Id> spvConsts;
@@ -7994,6 +8437,9 @@
             scalar = builder.createUnaryOp(spv::OpBitcast, typeId, scalar);
             break;
 #endif
+        case glslang::EbtString:
+            scalar = builder.getStringId(consts[nextConst].getSConst()->c_str());
+            break;
         default:
             assert(0);
             break;
@@ -8094,7 +8540,8 @@
 
 // Emit short-circuiting code, where 'right' is never evaluated unless
 // the left side is true (for &&) or false (for ||).
-spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslang::TIntermTyped& left, glslang::TIntermTyped& right)
+spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslang::TIntermTyped& left,
+    glslang::TIntermTyped& right)
 {
     spv::Id boolTypeId = builder.makeBoolType();
 
@@ -8177,7 +8624,8 @@
     // return 5; // make OpArrayLength result type be an int with signedness of 0
     // return 6; // revert version 5 change, which makes a different (new) kind of incorrect code,
                  // versions 4 and 6 each generate OpArrayLength as it has long been done
-    return 7; // GLSL volatile keyword maps to both SPIR-V decorations Volatile and Coherent
+    // return 7; // GLSL volatile keyword maps to both SPIR-V decorations Volatile and Coherent
+    return 8; // switch to new dead block eliminator; use OpUnreachable
 }
 
 // Write SPIR-V out to a binary file
diff --git a/SPIRV/GlslangToSpv.h b/SPIRV/GlslangToSpv.h
index 86e1c23..3907be4 100755
--- a/SPIRV/GlslangToSpv.h
+++ b/SPIRV/GlslangToSpv.h
@@ -40,7 +40,7 @@
 #endif
 
 #include "SpvTools.h"
-#include "../glslang/Include/intermediate.h"
+#include "glslang/Include/intermediate.h"
 
 #include <string>
 #include <vector>
diff --git a/SPIRV/InReadableOrder.cpp b/SPIRV/InReadableOrder.cpp
index 52b2961..9d9410b 100644
--- a/SPIRV/InReadableOrder.cpp
+++ b/SPIRV/InReadableOrder.cpp
@@ -61,17 +61,22 @@
 // Use by calling visit() on the root block.
 class ReadableOrderTraverser {
 public:
-    explicit ReadableOrderTraverser(std::function<void(Block*)> callback) : callback_(callback) {}
+    ReadableOrderTraverser(std::function<void(Block*, spv::ReachReason, Block*)> callback)
+      : callback_(callback) {}
     // Visits the block if it hasn't been visited already and isn't currently
-    // being delayed.  Invokes callback(block), then descends into its
+    // being delayed.  Invokes callback(block, why, header), then descends into its
     // successors.  Delays merge-block and continue-block processing until all
-    // the branches have been completed.
-    void visit(Block* block)
+    // the branches have been completed.  If |block| is an unreachable merge block or
+    // an unreachable continue target, then |header| is the corresponding header block.
+    void visit(Block* block, spv::ReachReason why, Block* header)
     {
         assert(block);
+        if (why == spv::ReachViaControlFlow) {
+            reachableViaControlFlow_.insert(block);
+        }
         if (visited_.count(block) || delayed_.count(block))
             return;
-        callback_(block);
+        callback_(block, why, header);
         visited_.insert(block);
         Block* mergeBlock = nullptr;
         Block* continueBlock = nullptr;
@@ -87,27 +92,40 @@
                 delayed_.insert(continueBlock);
             }
         }
-        const auto successors = block->getSuccessors();
-        for (auto it = successors.cbegin(); it != successors.cend(); ++it)
-            visit(*it);
+        if (why == spv::ReachViaControlFlow) {
+            const auto& successors = block->getSuccessors();
+            for (auto it = successors.cbegin(); it != successors.cend(); ++it)
+                visit(*it, why, nullptr);
+        }
         if (continueBlock) {
+            const spv::ReachReason continueWhy =
+                (reachableViaControlFlow_.count(continueBlock) > 0)
+                    ? spv::ReachViaControlFlow
+                    : spv::ReachDeadContinue;
             delayed_.erase(continueBlock);
-            visit(continueBlock);
+            visit(continueBlock, continueWhy, block);
         }
         if (mergeBlock) {
+            const spv::ReachReason mergeWhy =
+                (reachableViaControlFlow_.count(mergeBlock) > 0)
+                    ? spv::ReachViaControlFlow
+                    : spv::ReachDeadMerge;
             delayed_.erase(mergeBlock);
-            visit(mergeBlock);
+            visit(mergeBlock, mergeWhy, block);
         }
     }
 
 private:
-    std::function<void(Block*)> callback_;
+    std::function<void(Block*, spv::ReachReason, Block*)> callback_;
     // Whether a block has already been visited or is being delayed.
     std::unordered_set<Block *> visited_, delayed_;
+
+    // The set of blocks that actually are reached via control flow.
+    std::unordered_set<Block *> reachableViaControlFlow_;
 };
 }
 
-void spv::inReadableOrder(Block* root, std::function<void(Block*)> callback)
+void spv::inReadableOrder(Block* root, std::function<void(Block*, spv::ReachReason, Block*)> callback)
 {
-    ReadableOrderTraverser(callback).visit(root);
+    ReadableOrderTraverser(callback).visit(root, spv::ReachViaControlFlow, nullptr);
 }
diff --git a/SPIRV/Logger.cpp b/SPIRV/Logger.cpp
index 7ea0c63..cdc8469 100644
--- a/SPIRV/Logger.cpp
+++ b/SPIRV/Logger.cpp
@@ -69,4 +69,4 @@
 
 } // end spv namespace
 
-#endif
\ No newline at end of file
+#endif
diff --git a/SPIRV/NonSemanticDebugPrintf.h b/SPIRV/NonSemanticDebugPrintf.h
new file mode 100644
index 0000000..83796d7
--- /dev/null
+++ b/SPIRV/NonSemanticDebugPrintf.h
@@ -0,0 +1,50 @@
+// 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
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Materials, and to
+// permit persons to whom the Materials are furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Materials.
+// 
+// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
+// KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
+// SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
+//    https://www.khronos.org/registry/
+// 
+// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+// MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+// 
+
+#ifndef SPIRV_UNIFIED1_NonSemanticDebugPrintf_H_
+#define SPIRV_UNIFIED1_NonSemanticDebugPrintf_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum {
+    NonSemanticDebugPrintfRevision = 1,
+    NonSemanticDebugPrintfRevision_BitWidthPadding = 0x7fffffff
+};
+
+enum NonSemanticDebugPrintfInstructions {
+    NonSemanticDebugPrintfDebugPrintf = 1,
+    NonSemanticDebugPrintfInstructionsMax = 0x7fffffff
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // SPIRV_UNIFIED1_NonSemanticDebugPrintf_H_
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index bd20895..6cf70a1 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2014-2015 LunarG, Inc.
 // Copyright (C) 2015-2018 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -496,7 +497,8 @@
     return type->getResultId();
 }
 
-Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format)
+Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, bool ms, unsigned sampled,
+    ImageFormat format)
 {
     assert(sampled == 1 || sampled == 2);
 
@@ -601,16 +603,31 @@
 }
 
 #ifndef GLSLANG_WEB
-Id Builder::makeAccelerationStructureNVType()
+Id Builder::makeAccelerationStructureType()
 {
     Instruction *type;
-    if (groupedTypes[OpTypeAccelerationStructureNV].size() == 0) {
-        type = new Instruction(getUniqueId(), NoType, OpTypeAccelerationStructureNV);
-        groupedTypes[OpTypeAccelerationStructureNV].push_back(type);
+    if (groupedTypes[OpTypeAccelerationStructureKHR].size() == 0) {
+        type = new Instruction(getUniqueId(), NoType, OpTypeAccelerationStructureKHR);
+        groupedTypes[OpTypeAccelerationStructureKHR].push_back(type);
         constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
         module.mapInstruction(type);
     } else {
-        type = groupedTypes[OpTypeAccelerationStructureNV].back();
+        type = groupedTypes[OpTypeAccelerationStructureKHR].back();
+    }
+
+    return type->getResultId();
+}
+
+Id Builder::makeRayQueryType()
+{
+    Instruction *type;
+    if (groupedTypes[OpTypeRayQueryProvisionalKHR].size() == 0) {
+        type = new Instruction(getUniqueId(), NoType, OpTypeRayQueryProvisionalKHR);
+        groupedTypes[OpTypeRayQueryProvisionalKHR].push_back(type);
+        constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+        module.mapInstruction(type);
+    } else {
+        type = groupedTypes[OpTypeRayQueryProvisionalKHR].back();
     }
 
     return type->getResultId();
@@ -1270,7 +1287,8 @@
 
 // Comments in header
 Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const char* name,
-                                     const std::vector<Id>& paramTypes, const std::vector<std::vector<Decoration>>& decorations, Block **entry)
+                                     const std::vector<Id>& paramTypes,
+                                     const std::vector<std::vector<Decoration>>& decorations, Block **entry)
 {
     // Make the function and initial instructions in it
     Id typeId = makeFunctionType(returnType, paramTypes);
@@ -1373,7 +1391,8 @@
 }
 
 // av/vis/nonprivate are unnecessary and illegal for some storage classes.
-spv::MemoryAccessMask Builder::sanitizeMemoryAccessForStorageClass(spv::MemoryAccessMask memoryAccess, StorageClass sc) const
+spv::MemoryAccessMask Builder::sanitizeMemoryAccessForStorageClass(spv::MemoryAccessMask memoryAccess, StorageClass sc)
+    const
 {
     switch (sc) {
     case spv::StorageClassUniform:
@@ -1392,7 +1411,8 @@
 }
 
 // Comments in header
-void Builder::createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
+void Builder::createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess, spv::Scope scope,
+    unsigned int alignment)
 {
     Instruction* store = new Instruction(OpStore);
     store->addIdOperand(lValue);
@@ -1495,7 +1515,8 @@
     // Generate code for spec constants if in spec constant operation
     // generation mode.
     if (generatingOpCodeForSpecConst) {
-        return createSpecConstantOp(OpCompositeExtract, typeId, std::vector<Id>(1, composite), std::vector<Id>(1, index));
+        return createSpecConstantOp(OpCompositeExtract, typeId, std::vector<Id>(1, composite),
+            std::vector<Id>(1, index));
     }
     Instruction* extract = new Instruction(getUniqueId(), typeId, OpCompositeExtract);
     extract->addIdOperand(composite);
@@ -1697,7 +1718,8 @@
     return op->getResultId();
 }
 
-Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector<Id>& operands, const std::vector<unsigned>& literals)
+Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector<Id>& operands,
+    const std::vector<unsigned>& literals)
 {
     Instruction* op = new Instruction(getUniqueId(), typeId, OpSpecConstantOp);
     op->addImmediateOperand((unsigned) opCode);
@@ -2187,7 +2209,8 @@
         if (constituent == 0)
             resultId = subResultId;
         else
-            resultId = setPrecision(createBinOp(equal ? OpLogicalAnd : OpLogicalOr, boolType, resultId, subResultId), precision);
+            resultId = setPrecision(createBinOp(equal ? OpLogicalAnd : OpLogicalOr, boolType, resultId, subResultId),
+                                    precision);
     }
 
     return resultId;
@@ -2196,7 +2219,8 @@
 // OpCompositeConstruct
 Id Builder::createCompositeConstruct(Id typeId, const std::vector<Id>& constituents)
 {
-    assert(isAggregateType(typeId) || (getNumTypeConstituents(typeId) > 1 && getNumTypeConstituents(typeId) == (int)constituents.size()));
+    assert(isAggregateType(typeId) || (getNumTypeConstituents(typeId) > 1 &&
+           getNumTypeConstituents(typeId) == (int)constituents.size()));
 
     if (generatingOpCodeForSpecConst) {
         // Sometime, even in spec-constant-op mode, the constant composite to be
@@ -2609,7 +2633,8 @@
 }
 
 // Comments in header
-void Builder::accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType, AccessChain::CoherentFlags coherentFlags, unsigned int alignment)
+void Builder::accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType,
+    AccessChain::CoherentFlags coherentFlags, unsigned int alignment)
 {
     accessChain.coherentFlags |= coherentFlags;
     accessChain.alignment |= alignment;
@@ -2663,7 +2688,8 @@
 }
 
 // Comments in header
-Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
+Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType,
+    spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
 {
     Id id;
 
@@ -2721,7 +2747,13 @@
         }
 
         // load through the access chain
-        id = createLoad(collapseAccessChain(), memoryAccess, scope, alignment);
+        id = collapseAccessChain();
+        // Apply nonuniform both to the access chain and the loaded value.
+        // Buffer accesses need the access chain decorated, and this is where
+        // loaded image types get decorated. TODO: This should maybe move to
+        // createImageTextureFunctionCall.
+        addDecoration(id, nonUniform);
+        id = createLoad(id, memoryAccess, scope, alignment);
         setPrecision(id, precision);
         addDecoration(id, nonUniform);
     }
@@ -3075,7 +3107,8 @@
         dumpSourceInstructions(iItr->first, *iItr->second, out);
 }
 
-void Builder::dumpInstructions(std::vector<unsigned int>& out, const std::vector<std::unique_ptr<Instruction> >& instructions) const
+void Builder::dumpInstructions(std::vector<unsigned int>& out,
+    const std::vector<std::unique_ptr<Instruction> >& instructions) const
 {
     for (int i = 0; i < (int)instructions.size(); ++i) {
         instructions[i]->dump(out);
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index 55754f6..71b90d6 100644
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -1,7 +1,8 @@
 //
 // Copyright (C) 2014-2015 LunarG, Inc.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2020 Google, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -94,6 +95,7 @@
         const char* file_c_str = str.c_str();
         fileString->addStringOperand(file_c_str);
         strings.push_back(std::unique_ptr<Instruction>(fileString));
+        module.mapInstruction(fileString);
         stringIds[file_c_str] = strId;
         return strId;
     }
@@ -181,7 +183,9 @@
     Id makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols);
 
     // accelerationStructureNV type
-    Id makeAccelerationStructureNVType();
+    Id makeAccelerationStructureType();
+    // rayQueryEXT type
+    Id makeRayQueryType();
 
     // For querying about types.
     Id getTypeId(Id resultId) const { return module.getTypeId(resultId); }
@@ -196,7 +200,8 @@
     Id getContainedTypeId(Id typeId) const;
     Id getContainedTypeId(Id typeId, int) const;
     StorageClass getTypeStorageClass(Id typeId) const { return module.getStorageClass(typeId); }
-    ImageFormat getImageTypeFormat(Id typeId) const { return (ImageFormat)module.getInstruction(typeId)->getImmediateOperand(6); }
+    ImageFormat getImageTypeFormat(Id typeId) const
+        { return (ImageFormat)module.getInstruction(typeId)->getImmediateOperand(6); }
 
     bool isPointer(Id resultId)      const { return isPointerType(getTypeId(resultId)); }
     bool isScalar(Id resultId)       const { return isScalarType(getTypeId(resultId)); }
@@ -206,12 +211,17 @@
     bool isAggregate(Id resultId)    const { return isAggregateType(getTypeId(resultId)); }
     bool isSampledImage(Id resultId) const { return isSampledImageType(getTypeId(resultId)); }
 
-    bool isBoolType(Id typeId)               { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); }
-    bool isIntType(Id typeId)          const { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) != 0; }
-    bool isUintType(Id typeId)         const { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) == 0; }
+    bool isBoolType(Id typeId)
+        { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); }
+    bool isIntType(Id typeId)          const
+        { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) != 0; }
+    bool isUintType(Id typeId)         const
+        { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) == 0; }
     bool isFloatType(Id typeId)        const { return getTypeClass(typeId) == OpTypeFloat; }
     bool isPointerType(Id typeId)      const { return getTypeClass(typeId) == OpTypePointer; }
-    bool isScalarType(Id typeId)       const { return getTypeClass(typeId) == OpTypeFloat  || getTypeClass(typeId) == OpTypeInt || getTypeClass(typeId) == OpTypeBool; }
+    bool isScalarType(Id typeId)       const
+        { return getTypeClass(typeId) == OpTypeFloat || getTypeClass(typeId) == OpTypeInt ||
+          getTypeClass(typeId) == OpTypeBool; }
     bool isVectorType(Id typeId)       const { return getTypeClass(typeId) == OpTypeVector; }
     bool isMatrixType(Id typeId)       const { return getTypeClass(typeId) == OpTypeMatrix; }
     bool isStructType(Id typeId)       const { return getTypeClass(typeId) == OpTypeStruct; }
@@ -221,7 +231,8 @@
 #else
     bool isCooperativeMatrixType(Id typeId)const { return getTypeClass(typeId) == OpTypeCooperativeMatrixNV; }
 #endif
-    bool isAggregateType(Id typeId)    const { return isArrayType(typeId) || isStructType(typeId) || isCooperativeMatrixType(typeId); }
+    bool isAggregateType(Id typeId)    const
+        { return isArrayType(typeId) || isStructType(typeId) || isCooperativeMatrixType(typeId); }
     bool isImageType(Id typeId)        const { return getTypeClass(typeId) == OpTypeImage; }
     bool isSamplerType(Id typeId)      const { return getTypeClass(typeId) == OpTypeSampler; }
     bool isSampledImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeSampledImage; }
@@ -233,7 +244,8 @@
     bool isConstant(Id resultId) const { return isConstantOpCode(getOpCode(resultId)); }
     bool isConstantScalar(Id resultId) const { return getOpCode(resultId) == OpConstant; }
     bool isSpecConstant(Id resultId) const { return isSpecConstantOpCode(getOpCode(resultId)); }
-    unsigned int getConstantScalar(Id resultId) const { return module.getInstruction(resultId)->getImmediateOperand(0); }
+    unsigned int getConstantScalar(Id resultId) const
+        { return module.getInstruction(resultId)->getImmediateOperand(0); }
     StorageClass getStorageClass(Id resultId) const { return getTypeStorageClass(getTypeId(resultId)); }
 
     int getScalarTypeWidth(Id typeId) const
@@ -275,14 +287,22 @@
 
     // For making new constants (will return old constant if the requested one was already made).
     Id makeBoolConstant(bool b, bool specConstant = false);
-    Id makeInt8Constant(int i, bool specConstant = false)        { return makeIntConstant(makeIntType(8),  (unsigned)i, specConstant); }
-    Id makeUint8Constant(unsigned u, bool specConstant = false)  { return makeIntConstant(makeUintType(8),           u, specConstant); }
-    Id makeInt16Constant(int i, bool specConstant = false)       { return makeIntConstant(makeIntType(16),  (unsigned)i, specConstant); }
-    Id makeUint16Constant(unsigned u, bool specConstant = false) { return makeIntConstant(makeUintType(16),           u, specConstant); }
-    Id makeIntConstant(int i, bool specConstant = false)         { return makeIntConstant(makeIntType(32),  (unsigned)i, specConstant); }
-    Id makeUintConstant(unsigned u, bool specConstant = false)   { return makeIntConstant(makeUintType(32),           u, specConstant); }
-    Id makeInt64Constant(long long i, bool specConstant = false)            { return makeInt64Constant(makeIntType(64),  (unsigned long long)i, specConstant); }
-    Id makeUint64Constant(unsigned long long u, bool specConstant = false)  { return makeInt64Constant(makeUintType(64),                     u, specConstant); }
+    Id makeInt8Constant(int i, bool specConstant = false)
+        { return makeIntConstant(makeIntType(8),  (unsigned)i, specConstant); }
+    Id makeUint8Constant(unsigned u, bool specConstant = false)
+        { return makeIntConstant(makeUintType(8),           u, specConstant); }
+    Id makeInt16Constant(int i, bool specConstant = false)
+        { return makeIntConstant(makeIntType(16),  (unsigned)i, specConstant); }
+    Id makeUint16Constant(unsigned u, bool specConstant = false)
+        { return makeIntConstant(makeUintType(16),           u, specConstant); }
+    Id makeIntConstant(int i, bool specConstant = false)
+        { return makeIntConstant(makeIntType(32),  (unsigned)i, specConstant); }
+    Id makeUintConstant(unsigned u, bool specConstant = false)
+        { return makeIntConstant(makeUintType(32),           u, specConstant); }
+    Id makeInt64Constant(long long i, bool specConstant = false)
+        { return makeInt64Constant(makeIntType(64),  (unsigned long long)i, specConstant); }
+    Id makeUint64Constant(unsigned long long u, bool specConstant = false)
+        { return makeInt64Constant(makeUintType(64),                     u, specConstant); }
     Id makeFloatConstant(float f, bool specConstant = false);
     Id makeDoubleConstant(double d, bool specConstant = false);
     Id makeFloat16Constant(float f16, bool specConstant = false);
@@ -313,8 +333,8 @@
     // Make a shader-style function, and create its entry block if entry is non-zero.
     // Return the function, pass back the entry.
     // The returned pointer is only valid for the lifetime of this builder.
-    Function* makeFunctionEntry(Decoration precision, Id returnType, const char* name, const std::vector<Id>& paramTypes,
-                                const std::vector<std::vector<Decoration>>& precisions, Block **entry = 0);
+    Function* makeFunctionEntry(Decoration precision, Id returnType, const char* name,
+        const std::vector<Id>& paramTypes, const std::vector<std::vector<Decoration>>& precisions, Block **entry = 0);
 
     // Create a return. An 'implicit' return is one not appearing in the source
     // code.  In the case of an implicit return, no post-return block is inserted.
@@ -333,10 +353,12 @@
     Id createUndefined(Id type);
 
     // Store into an Id and return the l-value
-    void createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
+    void createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone,
+        spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
 
     // Load from an Id and return it
-    Id createLoad(Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
+    Id createLoad(Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone,
+        spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
 
     // Create an OpAccessChain instruction
     Id createAccessChain(StorageClass, Id base, const std::vector<Id>& offsets);
@@ -495,7 +517,7 @@
     // recursion stack can hold the memory for it.
     //
     void makeSwitch(Id condition, unsigned int control, int numSegments, const std::vector<int>& caseValues,
-                    const std::vector<int>& valueToSegment, int defaultSegment, std::vector<Block*>& segmentBB); // return argument
+                    const std::vector<int>& valueToSegment, int defaultSegment, std::vector<Block*>& segmentBB);
 
     // Add a branch to the innermost switch's merge block.
     void addSwitchBreak();
@@ -512,7 +534,7 @@
         Block &head, &body, &merge, &continue_target;
     private:
         LoopBlocks();
-        LoopBlocks& operator=(const LoopBlocks&);
+        LoopBlocks& operator=(const LoopBlocks&) = delete;
     };
 
     // Start a new loop and prepare the builder to generate code for it.  Until
@@ -569,10 +591,13 @@
         std::vector<Id> indexChain;
         Id instr;                      // cache the instruction that generates this access chain
         std::vector<unsigned> swizzle; // each std::vector element selects the next GLSL component number
-        Id component;                  // a dynamic component index, can coexist with a swizzle, done after the swizzle, NoResult if not present
-        Id preSwizzleBaseType;         // dereferenced type, before swizzle or component is applied; NoType unless a swizzle or component is present
+        Id component;                  // a dynamic component index, can coexist with a swizzle,
+                                       // done after the swizzle, NoResult if not present
+        Id preSwizzleBaseType;         // dereferenced type, before swizzle or component is applied;
+                                       // NoType unless a swizzle or component is present
         bool isRValue;                 // true if 'base' is an r-value, otherwise, base is an l-value
-        unsigned int alignment;        // bitwise OR of alignment values passed in. Accumulates worst alignment. Only tracks base and (optional) component selection alignment.
+        unsigned int alignment;        // bitwise OR of alignment values passed in. Accumulates worst alignment.
+                                       // Only tracks base and (optional) component selection alignment.
 
         // Accumulate whether anything in the chain of structures has coherent decorations.
         struct CoherentFlags {
@@ -583,12 +608,17 @@
             CoherentFlags operator |=(const CoherentFlags &other) { return *this; }
 #else
             bool isVolatile() const { return volatil; }
+            bool anyCoherent() const {
+                return coherent || devicecoherent || queuefamilycoherent || workgroupcoherent ||
+                    subgroupcoherent || shadercallcoherent;
+            }
 
             unsigned coherent : 1;
             unsigned devicecoherent : 1;
             unsigned queuefamilycoherent : 1;
             unsigned workgroupcoherent : 1;
             unsigned subgroupcoherent : 1;
+            unsigned shadercallcoherent : 1;
             unsigned nonprivate : 1;
             unsigned volatil : 1;
             unsigned isImage : 1;
@@ -599,6 +629,7 @@
                 queuefamilycoherent = 0;
                 workgroupcoherent = 0;
                 subgroupcoherent = 0;
+                shadercallcoherent = 0;
                 nonprivate = 0;
                 volatil = 0;
                 isImage = 0;
@@ -610,6 +641,7 @@
                 queuefamilycoherent |= other.queuefamilycoherent;
                 workgroupcoherent |= other.workgroupcoherent;
                 subgroupcoherent |= other.subgroupcoherent;
+                shadercallcoherent |= other.shadercallcoherent;
                 nonprivate |= other.nonprivate;
                 volatil |= other.volatil;
                 isImage |= other.isImage;
@@ -655,11 +687,13 @@
     }
 
     // push new swizzle onto the end of any existing swizzle, merging into a single swizzle
-    void accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType, AccessChain::CoherentFlags coherentFlags, unsigned int alignment);
+    void accessChainPushSwizzle(std::vector<unsigned>& swizzle, Id preSwizzleBaseType,
+        AccessChain::CoherentFlags coherentFlags, unsigned int alignment);
 
     // push a dynamic component selection onto the access chain, only applicable with a
     // non-trivial swizzle or no swizzle
-    void accessChainPushComponent(Id component, Id preSwizzleBaseType, AccessChain::CoherentFlags coherentFlags, unsigned int alignment)
+    void accessChainPushComponent(Id component, Id preSwizzleBaseType, AccessChain::CoherentFlags coherentFlags,
+        unsigned int alignment)
     {
         if (accessChain.swizzle.size() != 1) {
             accessChain.component = component;
@@ -671,10 +705,18 @@
     }
 
     // use accessChain and swizzle to store value
-    void accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
+    void accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone,
+        spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
 
     // use accessChain and swizzle to load an r-value
-    Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
+    Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType,
+        spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax,
+            unsigned int alignment = 0);
+
+    // Return whether or not the access chain can be represented in SPIR-V
+    // as an l-value.
+    // E.g., a[3].yx cannot be, while a[3].y and a[3].y[x] can be.
+    bool isSpvLvalue() const { return accessChain.swizzle.size() <= 1; }
 
     // get the direct pointer for an l-value
     Id accessChainGetLValue();
@@ -683,22 +725,28 @@
     // based on the type of the base and the chain of dereferences.
     Id accessChainGetInferredType();
 
-    // Add capabilities, extensions, remove unneeded decorations, etc., 
+    // Add capabilities, extensions, remove unneeded decorations, etc.,
     // based on the resulting SPIR-V.
     void postProcess();
 
+    // Prune unreachable blocks in the CFG and remove unneeded decorations.
+    void postProcessCFG();
+
+#ifndef GLSLANG_WEB
+    // Add capabilities, extensions based on instructions in the module.
+    void postProcessFeatures();
     // Hook to visit each instruction in a block in a function
     void postProcess(Instruction&);
-    // Hook to visit each instruction in a reachable block in a function.
-    void postProcessReachable(const Instruction&);
     // Hook to visit each non-32-bit sized float/int operation in a block.
     void postProcessType(const Instruction&, spv::Id typeId);
+#endif
 
     void dump(std::vector<unsigned int>&) const;
 
     void createBranch(Block* block);
     void createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock);
-    void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control, const std::vector<unsigned int>& operands);
+    void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control,
+        const std::vector<unsigned int>& operands);
 
     // Sets to generate opcode for specialization constants.
     void setToSpecConstCodeGenMode() { generatingOpCodeForSpecConst = true; }
@@ -724,7 +772,8 @@
     void dumpSourceInstructions(const spv::Id fileId, const std::string& text, std::vector<unsigned int>&) const;
     void dumpInstructions(std::vector<unsigned int>&, const std::vector<std::unique_ptr<Instruction> >&) const;
     void dumpModuleProcesses(std::vector<unsigned int>&) const;
-    spv::MemoryAccessMask sanitizeMemoryAccessForStorageClass(spv::MemoryAccessMask memoryAccess, StorageClass sc) const;
+    spv::MemoryAccessMask sanitizeMemoryAccessForStorageClass(spv::MemoryAccessMask memoryAccess, StorageClass sc)
+        const;
 
     unsigned int spvVersion;     // the version of SPIR-V to emit in the header
     SourceLanguage source;
@@ -759,10 +808,14 @@
     std::vector<std::unique_ptr<Instruction> > externals;
     std::vector<std::unique_ptr<Function> > functions;
 
-     // not output, internally used for quick & dirty canonical (unique) creation
-    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedConstants;       // map type opcodes to constant inst.
-    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedStructConstants; // map struct-id to constant instructions
-    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedTypes;           // map type opcodes to type instructions
+    // not output, internally used for quick & dirty canonical (unique) creation
+
+    // map type opcodes to constant inst.
+    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedConstants;
+    // map struct-id to constant instructions
+    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedStructConstants;
+    // map type opcodes to type instructions
+    std::unordered_map<unsigned int, std::vector<Instruction*>> groupedTypes;
 
     // stack of switches
     std::stack<Block*> switchMerges;
diff --git a/SPIRV/SpvPostProcess.cpp b/SPIRV/SpvPostProcess.cpp
index 832ee3e..d40174d 100644
--- a/SPIRV/SpvPostProcess.cpp
+++ b/SPIRV/SpvPostProcess.cpp
@@ -39,6 +39,7 @@
 #include <cassert>
 #include <cstdlib>
 
+#include <unordered_map>
 #include <unordered_set>
 #include <algorithm>
 
@@ -57,6 +58,7 @@
 
 namespace spv {
 
+#ifndef GLSLANG_WEB
 // Hook to visit each operand type and result type of an instruction.
 // Will be called multiple times for one instruction, once for each typed
 // operand and the result.
@@ -318,17 +320,16 @@
         }
     }
 }
-
-// Called for each instruction in a reachable block.
-void Builder::postProcessReachable(const Instruction&)
-{
-    // did have code here, but questionable to do so without deleting the instructions
-}
+#endif
 
 // comment in header
-void Builder::postProcess()
+void Builder::postProcessCFG()
 {
+    // reachableBlocks is the set of blockss reached via control flow, or which are
+    // unreachable continue targert or unreachable merge.
     std::unordered_set<const Block*> reachableBlocks;
+    std::unordered_map<Block*, Block*> headerForUnreachableContinue;
+    std::unordered_set<Block*> unreachableMerges;
     std::unordered_set<Id> unreachableDefinitions;
     // Collect IDs defined in unreachable blocks. For each function, label the
     // reachable blocks first. Then for each unreachable block, collect the
@@ -336,16 +337,41 @@
     for (auto fi = module.getFunctions().cbegin(); fi != module.getFunctions().cend(); fi++) {
         Function* f = *fi;
         Block* entry = f->getEntryBlock();
-        inReadableOrder(entry, [&reachableBlocks](const Block* b) { reachableBlocks.insert(b); });
+        inReadableOrder(entry,
+            [&reachableBlocks, &unreachableMerges, &headerForUnreachableContinue]
+            (Block* b, ReachReason why, Block* header) {
+               reachableBlocks.insert(b);
+               if (why == ReachDeadContinue) headerForUnreachableContinue[b] = header;
+               if (why == ReachDeadMerge) unreachableMerges.insert(b);
+            });
         for (auto bi = f->getBlocks().cbegin(); bi != f->getBlocks().cend(); bi++) {
             Block* b = *bi;
-            if (reachableBlocks.count(b) == 0) {
-                for (auto ii = b->getInstructions().cbegin(); ii != b->getInstructions().cend(); ii++)
+            if (unreachableMerges.count(b) != 0 || headerForUnreachableContinue.count(b) != 0) {
+                auto ii = b->getInstructions().cbegin();
+                ++ii; // Keep potential decorations on the label.
+                for (; ii != b->getInstructions().cend(); ++ii)
+                    unreachableDefinitions.insert(ii->get()->getResultId());
+            } else if (reachableBlocks.count(b) == 0) {
+                // The normal case for unreachable code.  All definitions are considered dead.
+                for (auto ii = b->getInstructions().cbegin(); ii != b->getInstructions().cend(); ++ii)
                     unreachableDefinitions.insert(ii->get()->getResultId());
             }
         }
     }
 
+    // Modify unreachable merge blocks and unreachable continue targets.
+    // Delete their contents.
+    for (auto mergeIter = unreachableMerges.begin(); mergeIter != unreachableMerges.end(); ++mergeIter) {
+        (*mergeIter)->rewriteAsCanonicalUnreachableMerge();
+    }
+    for (auto continueIter = headerForUnreachableContinue.begin();
+         continueIter != headerForUnreachableContinue.end();
+         ++continueIter) {
+        Block* continue_target = continueIter->first;
+        Block* header = continueIter->second;
+        continue_target->rewriteAsCanonicalUnreachableContinue(header);
+    }
+
     // Remove unneeded decorations, for unreachable instructions
     decorations.erase(std::remove_if(decorations.begin(), decorations.end(),
         [&unreachableDefinitions](std::unique_ptr<Instruction>& I) -> bool {
@@ -353,7 +379,11 @@
             return unreachableDefinitions.count(decoration_id) != 0;
         }),
         decorations.end());
+}
 
+#ifndef GLSLANG_WEB
+// comment in header
+void Builder::postProcessFeatures() {
     // Add per-instruction capabilities, extensions, etc.,
 
     // Look for any 8/16 bit type in physical storage buffer class, and set the
@@ -374,13 +404,6 @@
         }
     }
 
-    // process all reachable instructions...
-    for (auto bi = reachableBlocks.cbegin(); bi != reachableBlocks.cend(); ++bi) {
-        const Block* block = *bi;
-        const auto function = [this](const std::unique_ptr<Instruction>& inst) { postProcessReachable(*inst.get()); };
-        std::for_each(block->getInstructions().begin(), block->getInstructions().end(), function);
-    }
-
     // process all block-contained instructions
     for (auto fi = module.getFunctions().cbegin(); fi != module.getFunctions().cend(); fi++) {
         Function* f = *fi;
@@ -414,5 +437,14 @@
         }
     }
 }
+#endif
+
+// comment in header
+void Builder::postProcess() {
+  postProcessCFG();
+#ifndef GLSLANG_WEB
+  postProcessFeatures();
+#endif
+}
 
 }; // end spv namespace
diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp
index 698f154..1e968ba 100644
--- a/SPIRV/SpvTools.cpp
+++ b/SPIRV/SpvTools.cpp
@@ -1,6 +1,6 @@
 //
 // Copyright (C) 2014-2016 LunarG, Inc.
-// Copyright (C) 2018 Google, Inc.
+// Copyright (C) 2018-2020 Google, Inc.
 //
 // All rights reserved.
 //
@@ -67,6 +67,8 @@
             logger->missingFunctionality("Target version for SPIRV-Tools validator");
             return spv_target_env::SPV_ENV_VULKAN_1_1;
         }
+    case glslang::EShTargetVulkan_1_2:
+        return spv_target_env::SPV_ENV_VULKAN_1_2;
     default:
         break;
     }
@@ -128,8 +130,8 @@
 
 // Apply the SPIRV-Tools optimizer to generated SPIR-V, for the purpose of
 // legalizing HLSL SPIR-V.
-void SpirvToolsLegalize(const glslang::TIntermediate&, std::vector<unsigned int>& spirv,
-                        spv::SpvBuildLogger*, const SpvOptions* options)
+void SpirvToolsLegalize(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+                        spv::SpvBuildLogger* logger, const SpvOptions* options)
 {
     spv_target_env target_env = SPV_ENV_UNIVERSAL_1_2;
 
@@ -173,6 +175,7 @@
     if (options->generateDebugInfo) {
         optimizer.RegisterPass(spvtools::CreatePropagateLineInfoPass());
     }
+    optimizer.RegisterPass(spvtools::CreateWrapOpKillPass());
     optimizer.RegisterPass(spvtools::CreateDeadBranchElimPass());
     optimizer.RegisterPass(spvtools::CreateMergeReturnPass());
     optimizer.RegisterPass(spvtools::CreateInlineExhaustivePass());
@@ -196,8 +199,6 @@
     optimizer.RegisterPass(spvtools::CreateDeadInsertElimPass());
     if (options->optimizeSize) {
         optimizer.RegisterPass(spvtools::CreateRedundancyEliminationPass());
-        // TODO(greg-lunarg): Add this when AMD driver issues are resolved
-        // optimizer.RegisterPass(CreateCommonUniformElimPass());
     }
     optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
     optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());
@@ -206,7 +207,8 @@
     }
 
     spvtools::OptimizerOptions spvOptOptions;
-    spvOptOptions.set_run_validator(false); // The validator may run as a seperate step later on
+    optimizer.SetTargetEnv(MapToSpirvToolsEnv(intermediate.getSpv(), logger));
+    spvOptOptions.set_run_validator(false); // The validator may run as a separate step later on
     optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
 }
 
diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h
index 7422d01..59c914d 100644
--- a/SPIRV/SpvTools.h
+++ b/SPIRV/SpvTools.h
@@ -46,7 +46,7 @@
 #include <ostream>
 #endif
 
-#include "../glslang/MachineIndependent/localintermediate.h"
+#include "glslang/MachineIndependent/localintermediate.h"
 #include "Logger.h"
 
 namespace glslang {
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
index 930e799..4faa89e 100644
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -75,6 +75,7 @@
     GLSLextAMDInst,
     GLSLextNVInst,
     OpenCLExtInst,
+    NonSemanticDebugPrintfExtInst,
 };
 
 // Container class for a single instance of a SPIR-V stream, with methods for disassembly.
@@ -480,8 +481,12 @@
             if (opCode == OpExtInst) {
                 ExtInstSet extInstSet = GLSL450Inst;
                 const char* name = idDescriptor[stream[word - 2]].c_str();
-                if (0 == memcmp("OpenCL", name, 6)) {
+                if (strcmp("OpenCL.std", name) == 0) {
                     extInstSet = OpenCLExtInst;
+                } else if (strcmp("OpenCL.DebugInfo.100", name) == 0) {
+                    extInstSet = OpenCLExtInst;
+                } else if (strcmp("NonSemantic.DebugPrintf", name) == 0) {
+                    extInstSet = NonSemanticDebugPrintfExtInst;
                 } 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 ||
@@ -505,6 +510,8 @@
                 }
                 else if (extInstSet == GLSLextNVInst) {
                     out << "(" << GLSLextNVGetDebugNames(name, entrypoint) << ")";
+                } else if (extInstSet == NonSemanticDebugPrintfExtInst) {
+                    out << "(DebugPrintf)";
                 }
             }
             break;
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
index b0bcdfb..b1f2b82 100644
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -1,5 +1,6 @@
 //
 // Copyright (C) 2014-2015 LunarG, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -99,12 +100,12 @@
 
     default: return "Bad";
 
-    case ExecutionModelRayGenerationNV: return "RayGenerationNV";
-    case ExecutionModelIntersectionNV:  return "IntersectionNV";
-    case ExecutionModelAnyHitNV:        return "AnyHitNV";
-    case ExecutionModelClosestHitNV:    return "ClosestHitNV";
-    case ExecutionModelMissNV:          return "MissNV";
-    case ExecutionModelCallableNV:      return "CallableNV";
+    case ExecutionModelRayGenerationKHR: return "RayGenerationKHR";
+    case ExecutionModelIntersectionKHR:  return "IntersectionKHR";
+    case ExecutionModelAnyHitKHR:        return "AnyHitKHR";
+    case ExecutionModelClosestHitKHR:    return "ClosestHitKHR";
+    case ExecutionModelMissKHR:          return "MissKHR";
+    case ExecutionModelCallableKHR:      return "CallableKHR";
     }
 }
 
@@ -209,12 +210,12 @@
     case 11: return "Image";
     case 12: return "StorageBuffer";
 
-    case StorageClassRayPayloadNV:            return "RayPayloadNV";
-    case StorageClassHitAttributeNV:          return "HitAttributeNV";
-    case StorageClassIncomingRayPayloadNV:    return "IncomingRayPayloadNV";
-    case StorageClassShaderRecordBufferNV:    return "ShaderRecordBufferNV";
-    case StorageClassCallableDataNV:          return "CallableDataNV";
-    case StorageClassIncomingCallableDataNV:  return "IncomingCallableDataNV";
+    case StorageClassRayPayloadKHR:            return "RayPayloadKHR";
+    case StorageClassHitAttributeKHR:          return "HitAttributeKHR";
+    case StorageClassIncomingRayPayloadKHR:    return "IncomingRayPayloadKHR";
+    case StorageClassShaderRecordBufferKHR:    return "ShaderRecordBufferKHR";
+    case StorageClassCallableDataKHR:          return "CallableDataKHR";
+    case StorageClassIncomingCallableDataKHR:  return "IncomingCallableDataKHR";
 
     case StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT";
 
@@ -361,32 +362,33 @@
     case 4996: return "BaryCoordSmoothCentroidAMD";
     case 4997: return "BaryCoordSmoothSampleAMD";
     case 4998: return "BaryCoordPullModelAMD";
-    case BuiltInLaunchIdNV:                 return "LaunchIdNV";
-    case BuiltInLaunchSizeNV:               return "LaunchSizeNV";
-    case BuiltInWorldRayOriginNV:           return "WorldRayOriginNV";
-    case BuiltInWorldRayDirectionNV:        return "WorldRayDirectionNV";
-    case BuiltInObjectRayOriginNV:          return "ObjectRayOriginNV";
-    case BuiltInObjectRayDirectionNV:       return "ObjectRayDirectionNV";
-    case BuiltInRayTminNV:                  return "RayTminNV";
-    case BuiltInRayTmaxNV:                  return "RayTmaxNV";
-    case BuiltInInstanceCustomIndexNV:      return "InstanceCustomIndexNV";
-    case BuiltInObjectToWorldNV:            return "ObjectToWorldNV";
-    case BuiltInWorldToObjectNV:            return "WorldToObjectNV";
-    case BuiltInHitTNV:                     return "HitTNV";
-    case BuiltInHitKindNV:                  return "HitKindNV";
-    case BuiltInIncomingRayFlagsNV:         return "IncomingRayFlagsNV";
-    case BuiltInViewportMaskNV:             return "ViewportMaskNV";
-    case BuiltInSecondaryPositionNV:        return "SecondaryPositionNV";
-    case BuiltInSecondaryViewportMaskNV:    return "SecondaryViewportMaskNV";
-    case BuiltInPositionPerViewNV:          return "PositionPerViewNV";
-    case BuiltInViewportMaskPerViewNV:      return "ViewportMaskPerViewNV";
+    case BuiltInLaunchIdKHR:                 return "LaunchIdKHR";
+    case BuiltInLaunchSizeKHR:               return "LaunchSizeKHR";
+    case BuiltInWorldRayOriginKHR:           return "WorldRayOriginKHR";
+    case BuiltInWorldRayDirectionKHR:        return "WorldRayDirectionKHR";
+    case BuiltInObjectRayOriginKHR:          return "ObjectRayOriginKHR";
+    case BuiltInObjectRayDirectionKHR:       return "ObjectRayDirectionKHR";
+    case BuiltInRayTminKHR:                  return "RayTminKHR";
+    case BuiltInRayTmaxKHR:                  return "RayTmaxKHR";
+    case BuiltInInstanceCustomIndexKHR:      return "InstanceCustomIndexKHR";
+    case BuiltInRayGeometryIndexKHR:         return "RayGeometryIndexKHR";
+    case BuiltInObjectToWorldKHR:            return "ObjectToWorldKHR";
+    case BuiltInWorldToObjectKHR:            return "WorldToObjectKHR";
+    case BuiltInHitTKHR:                     return "HitTKHR";
+    case BuiltInHitKindKHR:                  return "HitKindKHR";
+    case BuiltInIncomingRayFlagsKHR:         return "IncomingRayFlagsKHR";
+    case BuiltInViewportMaskNV:              return "ViewportMaskNV";
+    case BuiltInSecondaryPositionNV:         return "SecondaryPositionNV";
+    case BuiltInSecondaryViewportMaskNV:     return "SecondaryViewportMaskNV";
+    case BuiltInPositionPerViewNV:           return "PositionPerViewNV";
+    case BuiltInViewportMaskPerViewNV:       return "ViewportMaskPerViewNV";
 //    case BuiltInFragmentSizeNV:             return "FragmentSizeNV";        // superseded by BuiltInFragSizeEXT
 //    case BuiltInInvocationsPerPixelNV:      return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT
-    case BuiltInBaryCoordNV:                return "BaryCoordNV";
-    case BuiltInBaryCoordNoPerspNV:         return "BaryCoordNoPerspNV";
+    case BuiltInBaryCoordNV:                 return "BaryCoordNV";
+    case BuiltInBaryCoordNoPerspNV:          return "BaryCoordNoPerspNV";
 
-    case BuiltInFragSizeEXT:                return "FragSizeEXT";
-    case BuiltInFragInvocationCountEXT:     return "FragInvocationCountEXT";
+    case BuiltInFragSizeEXT:                 return "FragSizeEXT";
+    case BuiltInFragInvocationCountEXT:      return "FragInvocationCountEXT";
 
     case 5264: return "FullyCoveredEXT";
 
@@ -890,6 +892,9 @@
     case CapabilityPerViewAttributesNV:             return "PerViewAttributesNV";
     case CapabilityGroupNonUniformPartitionedNV:    return "GroupNonUniformPartitionedNV";
     case CapabilityRayTracingNV:                    return "RayTracingNV";
+    case CapabilityRayTracingProvisionalKHR:        return "RayTracingProvisionalKHR";
+    case CapabilityRayQueryProvisionalKHR:          return "RayQueryProvisionalKHR";
+    case CapabilityRayTraversalPrimitiveCullingProvisionalKHR: return "RayTraversalPrimitiveCullingProvisionalKHR";
     case CapabilityComputeDerivativeGroupQuadsNV:   return "ComputeDerivativeGroupQuadsNV";
     case CapabilityComputeDerivativeGroupLinearNV:  return "ComputeDerivativeGroupLinearNV";
     case CapabilityFragmentBarycentricNV:           return "FragmentBarycentricNV";
@@ -931,6 +936,8 @@
     case CapabilityDemoteToHelperInvocationEXT:             return "DemoteToHelperInvocationEXT";
     case CapabilityShaderClockKHR:                          return "ShaderClockKHR";
 
+    case CapabilityIntegerFunctions2INTEL:              return "CapabilityIntegerFunctions2INTEL";
+
     default: return "Bad";
     }
 }
@@ -1324,15 +1331,40 @@
     case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
 
     case OpGroupNonUniformPartitionNV:       return "OpGroupNonUniformPartitionNV";
-    case OpReportIntersectionNV:             return "OpReportIntersectionNV";
-    case OpIgnoreIntersectionNV:             return "OpIgnoreIntersectionNV";
-    case OpTerminateRayNV:                   return "OpTerminateRayNV";
-    case OpTraceNV:                          return "OpTraceNV";
-    case OpTypeAccelerationStructureNV:      return "OpTypeAccelerationStructureNV";
-    case OpExecuteCallableNV:                return "OpExecuteCallableNV";
+    case OpReportIntersectionKHR:            return "OpReportIntersectionKHR";
+    case OpIgnoreIntersectionKHR:            return "OpIgnoreIntersectionKHR";
+    case OpTerminateRayKHR:                  return "OpTerminateRayKHR";
+    case OpTraceRayKHR:                      return "OpTraceRayKHR";
+    case OpTypeAccelerationStructureKHR:     return "OpTypeAccelerationStructureKHR";
+    case OpExecuteCallableKHR:               return "OpExecuteCallableKHR";
     case OpImageSampleFootprintNV:           return "OpImageSampleFootprintNV";
     case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
 
+    case OpTypeRayQueryProvisionalKHR:                                        return "OpTypeRayQueryProvisionalKHR";
+    case OpRayQueryInitializeKHR:                                             return "OpRayQueryInitializeKHR";
+    case OpRayQueryTerminateKHR:                                              return "OpRayQueryTerminateKHR";
+    case OpRayQueryGenerateIntersectionKHR:                                   return "OpRayQueryGenerateIntersectionKHR";
+    case OpRayQueryConfirmIntersectionKHR:                                    return "OpRayQueryConfirmIntersectionKHR";
+    case OpRayQueryProceedKHR:                                                return "OpRayQueryProceedKHR";
+    case OpRayQueryGetIntersectionTypeKHR:                                    return "OpRayQueryGetIntersectionTypeKHR";
+    case OpRayQueryGetRayTMinKHR:                                             return "OpRayQueryGetRayTMinKHR";
+    case OpRayQueryGetRayFlagsKHR:                                            return "OpRayQueryGetRayFlagsKHR";
+    case OpRayQueryGetIntersectionTKHR:                                       return "OpRayQueryGetIntersectionTKHR";
+    case OpRayQueryGetIntersectionInstanceCustomIndexKHR:                     return "OpRayQueryGetIntersectionInstanceCustomIndexKHR";
+    case OpRayQueryGetIntersectionInstanceIdKHR:                              return "OpRayQueryGetIntersectionInstanceIdKHR";
+    case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR:  return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR";
+    case OpRayQueryGetIntersectionGeometryIndexKHR:                           return "OpRayQueryGetIntersectionGeometryIndexKHR";
+    case OpRayQueryGetIntersectionPrimitiveIndexKHR:                          return "OpRayQueryGetIntersectionPrimitiveIndexKHR";
+    case OpRayQueryGetIntersectionBarycentricsKHR:                            return "OpRayQueryGetIntersectionBarycentricsKHR";
+    case OpRayQueryGetIntersectionFrontFaceKHR:                               return "OpRayQueryGetIntersectionFrontFaceKHR";
+    case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR:                     return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR";
+    case OpRayQueryGetIntersectionObjectRayDirectionKHR:                      return "OpRayQueryGetIntersectionObjectRayDirectionKHR";
+    case OpRayQueryGetIntersectionObjectRayOriginKHR:                         return "OpRayQueryGetIntersectionObjectRayOriginKHR";
+    case OpRayQueryGetWorldRayDirectionKHR:                                   return "OpRayQueryGetWorldRayDirectionKHR";
+    case OpRayQueryGetWorldRayOriginKHR:                                      return "OpRayQueryGetWorldRayOriginKHR";
+    case OpRayQueryGetIntersectionObjectToWorldKHR:                           return "OpRayQueryGetIntersectionObjectToWorldKHR";
+    case OpRayQueryGetIntersectionWorldToObjectKHR:                           return "OpRayQueryGetIntersectionWorldToObjectKHR";
+
     case OpTypeCooperativeMatrixNV:         return "OpTypeCooperativeMatrixNV";
     case OpCooperativeMatrixLoadNV:         return "OpCooperativeMatrixLoadNV";
     case OpCooperativeMatrixStoreNV:        return "OpCooperativeMatrixStoreNV";
@@ -2692,31 +2724,125 @@
 
     InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
 
-    InstructionDesc[OpTypeAccelerationStructureNV].setResultAndType(true, false);
+    InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
 
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'NV 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[OpTraceRayKHR].operands.push(OperandId, "'NV 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[OpReportIntersectionNV].operands.push(OperandId, "'Hit Parameter'");
-    InstructionDesc[OpReportIntersectionNV].operands.push(OperandId, "'Hit Kind'");
+    InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'");
+    InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'");
 
-    InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false);
+    InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false);
 
-    InstructionDesc[OpTerminateRayNV].setResultAndType(false, false);
+    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[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index");
+    InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData ID");
+    InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false);
+
+    // Ray Query
+    InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
+    InstructionDesc[OpTypeRayQueryProvisionalKHR].setResultAndType(true, false);
+
+    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[OpRayQueryTerminateKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryTerminateKHR].setResultAndType(false, false);
+
+    InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'THit'");
+    InstructionDesc[OpRayQueryGenerateIntersectionKHR].setResultAndType(false, false);
+
+    InstructionDesc[OpRayQueryConfirmIntersectionKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryConfirmIntersectionKHR].setResultAndType(false, false);
+
+    InstructionDesc[OpRayQueryProceedKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryProceedKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionTypeKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetRayTMinKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetRayTMinKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetRayFlagsKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetRayFlagsKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionTKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetWorldRayOriginKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetWorldRayOriginKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].setResultAndType(true, true);
+
+    InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'RayQuery'");
+    InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'Committed'");
+    InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true);
 
     InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'");
diff --git a/SPIRV/hex_float.h b/SPIRV/hex_float.h
index 905b21a..8be8e9f 100644
--- a/SPIRV/hex_float.h
+++ b/SPIRV/hex_float.h
@@ -784,8 +784,8 @@
   if (val.isInfinity()) {
     // Fail the parse.  Emulate standard behaviour by setting the value to
     // the closest normal value, and set the fail bit on the stream.
-    value.set_value((value.isNegative() | negate_value) ? T::lowest()
-                                                        : T::max());
+    value.set_value((value.isNegative() || negate_value) ? T::lowest()
+                                                         : T::max());
     is.setstate(std::ios_base::failbit);
   }
   return is;
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index 1e96f7b..dae36cf 100644
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -1,4 +1,4 @@
-// Copyright (c) 2014-2019 The Khronos Group Inc.
+// 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"),
@@ -49,12 +49,12 @@
 
 typedef unsigned int Id;
 
-#define SPV_VERSION 0x10400
-#define SPV_REVISION 1
+#define SPV_VERSION 0x10500
+#define SPV_REVISION 3
 
 static const unsigned int MagicNumber = 0x07230203;
-static const unsigned int Version = 0x00010400;
-static const unsigned int Revision = 1;
+static const unsigned int Version = 0x00010500;
+static const unsigned int Revision = 3;
 static const unsigned int OpCodeMask = 0xffff;
 static const unsigned int WordCountShift = 16;
 
@@ -78,11 +78,17 @@
     ExecutionModelKernel = 6,
     ExecutionModelTaskNV = 5267,
     ExecutionModelMeshNV = 5268,
+    ExecutionModelRayGenerationKHR = 5313,
     ExecutionModelRayGenerationNV = 5313,
+    ExecutionModelIntersectionKHR = 5314,
     ExecutionModelIntersectionNV = 5314,
+    ExecutionModelAnyHitKHR = 5315,
     ExecutionModelAnyHitNV = 5315,
+    ExecutionModelClosestHitKHR = 5316,
     ExecutionModelClosestHitNV = 5316,
+    ExecutionModelMissKHR = 5317,
     ExecutionModelMissNV = 5317,
+    ExecutionModelCallableKHR = 5318,
     ExecutionModelCallableNV = 5318,
     ExecutionModelMax = 0x7fffffff,
 };
@@ -179,11 +185,17 @@
     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,
@@ -558,20 +570,35 @@
     BuiltInFragmentSizeNV = 5292,
     BuiltInFragInvocationCountEXT = 5293,
     BuiltInInvocationsPerPixelNV = 5293,
+    BuiltInLaunchIdKHR = 5319,
     BuiltInLaunchIdNV = 5319,
+    BuiltInLaunchSizeKHR = 5320,
     BuiltInLaunchSizeNV = 5320,
+    BuiltInWorldRayOriginKHR = 5321,
     BuiltInWorldRayOriginNV = 5321,
+    BuiltInWorldRayDirectionKHR = 5322,
     BuiltInWorldRayDirectionNV = 5322,
+    BuiltInObjectRayOriginKHR = 5323,
     BuiltInObjectRayOriginNV = 5323,
+    BuiltInObjectRayDirectionKHR = 5324,
     BuiltInObjectRayDirectionNV = 5324,
+    BuiltInRayTminKHR = 5325,
     BuiltInRayTminNV = 5325,
+    BuiltInRayTmaxKHR = 5326,
     BuiltInRayTmaxNV = 5326,
+    BuiltInInstanceCustomIndexKHR = 5327,
     BuiltInInstanceCustomIndexNV = 5327,
+    BuiltInObjectToWorldKHR = 5330,
     BuiltInObjectToWorldNV = 5330,
+    BuiltInWorldToObjectKHR = 5331,
     BuiltInWorldToObjectNV = 5331,
+    BuiltInHitTKHR = 5332,
     BuiltInHitTNV = 5332,
+    BuiltInHitKindKHR = 5333,
     BuiltInHitKindNV = 5333,
+    BuiltInIncomingRayFlagsKHR = 5351,
     BuiltInIncomingRayFlagsNV = 5351,
+    BuiltInRayGeometryIndexKHR = 5352,
     BuiltInWarpsPerSMNV = 5374,
     BuiltInSMCountNV = 5375,
     BuiltInWarpIDNV = 5376,
@@ -709,6 +736,7 @@
     ScopeInvocation = 4,
     ScopeQueueFamily = 5,
     ScopeQueueFamilyKHR = 5,
+    ScopeShaderCallKHR = 6,
     ScopeMax = 0x7fffffff,
 };
 
@@ -833,6 +861,8 @@
     CapabilitySignedZeroInfNanPreserve = 4466,
     CapabilityRoundingModeRTE = 4467,
     CapabilityRoundingModeRTZ = 4468,
+    CapabilityRayQueryProvisionalKHR = 4471,
+    CapabilityRayTraversalPrimitiveCullingProvisionalKHR = 4478,
     CapabilityFloat16ImageAMD = 5008,
     CapabilityImageGatherBiasLodAMD = 5009,
     CapabilityFragmentMaskAMD = 5010,
@@ -886,6 +916,7 @@
     CapabilityPhysicalStorageBufferAddresses = 5347,
     CapabilityPhysicalStorageBufferAddressesEXT = 5347,
     CapabilityComputeDerivativeGroupLinearNV = 5350,
+    CapabilityRayTracingProvisionalKHR = 5353,
     CapabilityCooperativeMatrixNV = 5357,
     CapabilityFragmentShaderSampleInterlockEXT = 5363,
     CapabilityFragmentShaderShadingRateInterlockEXT = 5372,
@@ -903,6 +934,53 @@
     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 Op {
     OpNop = 0,
     OpUndef = 1,
@@ -1254,6 +1332,13 @@
     OpSubgroupAnyKHR = 4429,
     OpSubgroupAllEqualKHR = 4430,
     OpSubgroupReadInvocationKHR = 4432,
+    OpTypeRayQueryProvisionalKHR = 4472,
+    OpRayQueryInitializeKHR = 4473,
+    OpRayQueryTerminateKHR = 4474,
+    OpRayQueryGenerateIntersectionKHR = 4475,
+    OpRayQueryConfirmIntersectionKHR = 4476,
+    OpRayQueryProceedKHR = 4477,
+    OpRayQueryGetIntersectionTypeKHR = 4479,
     OpGroupIAddNonUniformAMD = 5000,
     OpGroupFAddNonUniformAMD = 5001,
     OpGroupFMinNonUniformAMD = 5002,
@@ -1268,11 +1353,17 @@
     OpImageSampleFootprintNV = 5283,
     OpGroupNonUniformPartitionNV = 5296,
     OpWritePackedPrimitiveIndices4x8NV = 5299,
+    OpReportIntersectionKHR = 5334,
     OpReportIntersectionNV = 5334,
+    OpIgnoreIntersectionKHR = 5335,
     OpIgnoreIntersectionNV = 5335,
+    OpTerminateRayKHR = 5336,
     OpTerminateRayNV = 5336,
     OpTraceNV = 5337,
+    OpTraceRayKHR = 5337,
+    OpTypeAccelerationStructureKHR = 5341,
     OpTypeAccelerationStructureNV = 5341,
+    OpExecuteCallableKHR = 5344,
     OpExecuteCallableNV = 5344,
     OpTypeCooperativeMatrixNV = 5358,
     OpCooperativeMatrixLoadNV = 5359,
@@ -1429,6 +1520,23 @@
     OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
     OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
     OpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
+    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,
     OpMax = 0x7fffffff,
 };
 
@@ -1787,6 +1895,13 @@
     case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
+    case OpTypeRayQueryProvisionalKHR: *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;
@@ -1960,6 +2075,23 @@
     case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupAvcSicGetInterRawSadsINTEL: *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;
     }
 }
 #endif /* SPV_ENABLE_UTILITY_CODE */
@@ -1974,6 +2106,7 @@
 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)); }
 
 }  // end namespace spv
 
diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
index 7e2d4bc..6523035 100755
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -226,6 +226,35 @@
         return nullptr;
     }
 
+    // Change this block into a canonical dead merge block.  Delete instructions
+    // as necessary.  A canonical dead merge block has only an OpLabel and an
+    // OpUnreachable.
+    void rewriteAsCanonicalUnreachableMerge() {
+        assert(localVariables.empty());
+        // Delete all instructions except for the label.
+        assert(instructions.size() > 0);
+        instructions.resize(1);
+        successors.clear();
+        addInstruction(std::unique_ptr<Instruction>(new Instruction(OpUnreachable)));
+    }
+    // Change this block into a canonical dead continue target branching to the
+    // given header ID.  Delete instructions as necessary.  A canonical dead continue
+    // target has only an OpLabel and an unconditional branch back to the corresponding
+    // header.
+    void rewriteAsCanonicalUnreachableContinue(Block* header) {
+        assert(localVariables.empty());
+        // Delete all instructions except for the label.
+        assert(instructions.size() > 0);
+        instructions.resize(1);
+        successors.clear();
+        // Add OpBranch back to the header.
+        assert(header != nullptr);
+        Instruction* branch = new Instruction(OpBranch);
+        branch->addIdOperand(header->getId());
+        addInstruction(std::unique_ptr<Instruction>(branch));
+        successors.push_back(header);
+    }
+
     bool isTerminated() const
     {
         switch (instructions.back()->getOpCode()) {
@@ -235,6 +264,7 @@
         case OpKill:
         case OpReturn:
         case OpReturnValue:
+        case OpUnreachable:
             return true;
         default:
             return false;
@@ -268,10 +298,24 @@
     bool unreachable;
 };
 
+// The different reasons for reaching a block in the inReadableOrder traversal.
+enum ReachReason {
+    // Reachable from the entry block via transfers of control, i.e. branches.
+    ReachViaControlFlow = 0,
+    // A continue target that is not reachable via control flow.
+    ReachDeadContinue,
+    // A merge block that is not reachable via control flow.
+    ReachDeadMerge
+};
+
 // Traverses the control-flow graph rooted at root in an order suited for
 // readable code generation.  Invokes callback at every node in the traversal
-// order.
-void inReadableOrder(Block* root, std::function<void(Block*)> callback);
+// order.  The callback arguments are:
+// - the block,
+// - the reason we reached the block,
+// - if the reason was that block is an unreachable continue or unreachable merge block
+//   then the last parameter is the corresponding header block.
+void inReadableOrder(Block* root, std::function<void(Block*, ReachReason, Block* header)> callback);
 
 //
 // SPIR-V IR Function.
@@ -321,7 +365,7 @@
             parameterInstructions[p]->dump(out);
 
         // Blocks
-        inReadableOrder(blocks[0], [&out](const Block* b) { b->dump(out); });
+        inReadableOrder(blocks[0], [&out](const Block* b, ReachReason, Block*) { b->dump(out); });
         Instruction end(0, 0, OpFunctionEnd);
         end.dump(out);
     }
diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt
index 5cea53d..591ac34 100644
--- a/StandAlone/CMakeLists.txt
+++ b/StandAlone/CMakeLists.txt
@@ -1,28 +1,29 @@
 add_library(glslang-default-resource-limits
-            ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp)
+            ${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 ${CMAKE_CURRENT_SOURCE_DIR}
-                           PUBLIC ${PROJECT_SOURCE_DIR})
+                           PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+                           PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
+
 
 set(SOURCES StandAlone.cpp DirStackFileIncluder.h)
-set(REMAPPER_SOURCES spirv-remap.cpp)
 
 add_executable(glslangValidator ${SOURCES})
-add_executable(spirv-remap ${REMAPPER_SOURCES})
 set_property(TARGET glslangValidator PROPERTY FOLDER tools)
-set_property(TARGET spirv-remap PROPERTY FOLDER tools)
 glslang_set_link_args(glslangValidator)
-glslang_set_link_args(spirv-remap)
 
 set(LIBRARIES
     glslang
     SPIRV
-    SPVRemapper
     glslang-default-resource-limits)
 
+if(ENABLE_SPVREMAPPER)
+    set(LIBRARIES ${LIBRARIES} SPVRemapper)
+endif()
+
 if(WIN32)
     set(LIBRARIES ${LIBRARIES} psapi)
 elseif(UNIX)
@@ -32,22 +33,36 @@
 endif(WIN32)
 
 target_link_libraries(glslangValidator ${LIBRARIES})
-target_link_libraries(spirv-remap ${LIBRARIES})
-target_include_directories(glslangValidator PUBLIC ../External)
+target_include_directories(glslangValidator PUBLIC
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
+    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
+
+if(ENABLE_SPVREMAPPER)
+    set(REMAPPER_SOURCES spirv-remap.cpp)
+    add_executable(spirv-remap ${REMAPPER_SOURCES})
+    set_property(TARGET spirv-remap PROPERTY FOLDER tools)
+    glslang_set_link_args(spirv-remap)
+    target_link_libraries(spirv-remap ${LIBRARIES})
+endif()
 
 if(WIN32)
     source_group("Source" FILES ${SOURCES})
 endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS glslangValidator
+    install(TARGETS glslangValidator EXPORT glslangValidatorTargets
             RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+    install(EXPORT glslangValidatorTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 
-    install(TARGETS spirv-remap
+    if(ENABLE_SPVREMAPPER)
+        install(TARGETS spirv-remap EXPORT spirv-remapTargets
             RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
-            
+        install(EXPORT spirv-remapTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+    endif()
+
     if(BUILD_SHARED_LIBS)
-        install(TARGETS glslang-default-resource-limits
+        install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+        install(EXPORT glslang-default-resource-limitsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
     endif()
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/StandAlone/ResourceLimits.cpp b/StandAlone/ResourceLimits.cpp
index 028caa6..7c7f4c4 100644
--- a/StandAlone/ResourceLimits.cpp
+++ b/StandAlone/ResourceLimits.cpp
@@ -134,6 +134,7 @@
     /* .maxTaskWorkGroupSizeY_NV = */ 1,
     /* .maxTaskWorkGroupSizeZ_NV = */ 1,
     /* .maxMeshViewCountNV = */ 4,
+    /* .maxDualSourceDrawBuffersEXT = */ 1,
 
     /* .limits = */ {
         /* .nonInductiveForLoops = */ 1,
@@ -243,6 +244,7 @@
             << "MaxTaskWorkGroupSizeY_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_NV << "\n"
             << "MaxTaskWorkGroupSizeZ_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_NV << "\n"
             << "MaxMeshViewCountNV "                        << DefaultTBuiltInResource.maxMeshViewCountNV << "\n"
+            << "MaxDualSourceDrawBuffersEXT "               << DefaultTBuiltInResource.maxDualSourceDrawBuffersEXT << "\n"
             << "nonInductiveForLoops "                      << DefaultTBuiltInResource.limits.nonInductiveForLoops << "\n"
             << "whileLoops "                                << DefaultTBuiltInResource.limits.whileLoops << "\n"
             << "doWhileLoops "                              << DefaultTBuiltInResource.limits.doWhileLoops << "\n"
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 4be3a4f..a7ce53d 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013-2016 LunarG, Inc.
+// Copyright (C) 2016-2020 Google, Inc.
 //
 // All rights reserved.
 //
@@ -204,7 +205,7 @@
         text.append("#define ");
         fixLine(def);
 
-        Processes.push_back("D");
+        Processes.push_back("define-macro ");
         Processes.back().append(def);
 
         // The first "=" needs to turn into a space
@@ -222,7 +223,7 @@
         text.append("#undef ");
         fixLine(undef);
 
-        Processes.push_back("U");
+        Processes.push_back("undef-macro ");
         Processes.back().append(undef);
 
         text.append(undef);
@@ -241,6 +242,7 @@
     std::string text;  // contents of preamble
 };
 
+// Track the user's #define and #undef from the command line.
 TPreamble UserPreamble;
 
 //
@@ -257,12 +259,12 @@
         case EShLangGeometry:        name = "geom.spv";    break;
         case EShLangFragment:        name = "frag.spv";    break;
         case EShLangCompute:         name = "comp.spv";    break;
-        case EShLangRayGenNV:        name = "rgen.spv";    break;
-        case EShLangIntersectNV:     name = "rint.spv";    break;
-        case EShLangAnyHitNV:        name = "rahit.spv";   break;
-        case EShLangClosestHitNV:    name = "rchit.spv";   break;
-        case EShLangMissNV:          name = "rmiss.spv";   break;
-        case EShLangCallableNV:      name = "rcall.spv";   break;
+        case EShLangRayGen:          name = "rgen.spv";    break;
+        case EShLangIntersect:       name = "rint.spv";    break;
+        case EShLangAnyHit:          name = "rahit.spv";   break;
+        case EShLangClosestHit:      name = "rchit.spv";   break;
+        case EShLangMiss:            name = "rmiss.spv";   break;
+        case EShLangCallable:        name = "rcall.spv";   break;
         case EShLangMeshNV:          name = "mesh.spv";    break;
         case EShLangTaskNV:          name = "task.spv";    break;
         default:                     name = "unknown";     break;
@@ -292,9 +294,12 @@
 //
 // Give error and exit with failure code.
 //
-void Error(const char* message)
+void Error(const char* message, const char* detail = nullptr)
 {
-    fprintf(stderr, "%s: Error %s (use -h for usage)\n", ExecutableName, message);
+    fprintf(stderr, "%s: Error: ", ExecutableName);
+    if (detail != nullptr)
+        fprintf(stderr, "%s: ", detail);
+    fprintf(stderr, "%s (use -h for usage)\n", message);
     exit(EFailUsage);
 }
 
@@ -482,7 +487,7 @@
                         Options |= EOptionAutoMapLocations;
                     } else if (lowerword == "uniform-base") {
                         if (argc <= 1)
-                            Error("no <base> provided for --uniform-base");
+                            Error("no <base> provided", lowerword.c_str());
                         uniformBase = ::strtol(argv[1], NULL, 10);
                         bumpArg();
                         break;
@@ -493,15 +498,23 @@
                             else if (strcmp(argv[1], "opengl100") == 0)
                                 setOpenGlSpv();
                             else
-                                Error("--client expects vulkan100 or opengl100");
-                        }
+                                Error("expects vulkan100 or opengl100", lowerword.c_str());
+                        } else
+                            Error("expects vulkan100 or opengl100", lowerword.c_str());
+                        bumpArg();
+                    } else if (lowerword == "define-macro" ||
+                               lowerword == "d") {
+                        if (argc > 1)
+                            UserPreamble.addDef(argv[1]);
+                        else
+                            Error("expects <name[=def]>", argv[0]);
                         bumpArg();
                     } else if (lowerword == "dump-builtin-symbols") {
                         DumpBuiltinSymbols = true;
                     } else if (lowerword == "entry-point") {
                         entryPointName = argv[1];
                         if (argc <= 1)
-                            Error("no <name> provided for --entry-point");
+                            Error("no <name> provided", lowerword.c_str());
                         bumpArg();
                     } else if (lowerword == "flatten-uniform-arrays" || // synonyms
                                lowerword == "flatten-uniform-array"  ||
@@ -576,7 +589,7 @@
                     } else if (lowerword == "source-entrypoint" || // synonyms
                                lowerword == "sep") {
                         if (argc <= 1)
-                            Error("no <entry-point> provided for --source-entrypoint");
+                            Error("no <entry-point> provided", lowerword.c_str());
                         sourceEntryPointName = argv[1];
                         bumpArg();
                         break;
@@ -597,6 +610,9 @@
                             } else if (strcmp(argv[1], "vulkan1.1") == 0) {
                                 setVulkanSpv();
                                 ClientVersion = glslang::EShTargetVulkan_1_1;
+                            } else if (strcmp(argv[1], "vulkan1.2") == 0) {
+                                setVulkanSpv();
+                                ClientVersion = glslang::EShTargetVulkan_1_2;
                             } else if (strcmp(argv[1], "opengl") == 0) {
                                 setOpenGlSpv();
                                 ClientVersion = glslang::EShTargetOpenGL_450;
@@ -619,22 +635,32 @@
                                 TargetLanguage = glslang::EShTargetSpv;
                                 TargetVersion = glslang::EShTargetSpv_1_5;
                             } else
-                                Error("--target-env expected one of: vulkan1.0, vulkan1.1, opengl,\n"
+                                Error("--target-env expected one of: vulkan1.0, vulkan1.1, vulkan1.2, opengl,\n"
                                       "spirv1.0, spirv1.1, spirv1.2, spirv1.3, spirv1.4, or spirv1.5");
                         }
                         bumpArg();
+                    } else if (lowerword == "undef-macro" ||
+                               lowerword == "u") {
+                        if (argc > 1)
+                            UserPreamble.addUndef(argv[1]);
+                        else
+                            Error("expects <name>", argv[0]);
+                        bumpArg();
                     } else if (lowerword == "variable-name" || // synonyms
                                lowerword == "vn") {
                         Options |= EOptionOutputHexadecimal;
                         if (argc <= 1)
-                            Error("no <C-variable-name> provided for --variable-name");
+                            Error("no <C-variable-name> provided", lowerword.c_str());
                         variableName = argv[1];
                         bumpArg();
                         break;
                     } else if (lowerword == "version") {
                         Options |= EOptionDumpVersions;
-                    } else {
+                    } else if (lowerword == "help") {
                         usage();
+                        break;
+                    } else {
+                        Error("unrecognized command-line option", argv[0]);
                     }
                 }
                 break;
@@ -645,7 +671,7 @@
                 if (argv[0][2] == 0)
                     Options |= EOptionReadHlsl;
                 else
-                    UserPreamble.addDef(getStringOperand("-D<macro> macro name"));
+                    UserPreamble.addDef(getStringOperand("-D<name[=def]>"));
                 break;
             case 'u':
                 uniformLocationOverrides.push_back(getUniformOverride());
@@ -688,7 +714,7 @@
                 bumpArg();
                 break;
             case 'U':
-                UserPreamble.addUndef(getStringOperand("-U<macro>: macro name"));
+                UserPreamble.addUndef(getStringOperand("-U<name>"));
                 break;
             case 'V':
                 setVulkanSpv();
@@ -760,7 +786,7 @@
                 Options |= EOptionOutputHexadecimal;
                 break;
             default:
-                usage();
+                Error("unrecognized command-line option", argv[0]);
                 break;
             }
         } else {
@@ -807,6 +833,10 @@
             TargetLanguage = glslang::EShTargetSpv;
             TargetVersion = glslang::EShTargetSpv_1_3;
             break;
+        case glslang::EShTargetVulkan_1_2:
+            TargetLanguage = glslang::EShTargetSpv;
+            TargetVersion = glslang::EShTargetSpv_1_5;
+            break;
         case glslang::EShTargetOpenGL_450:
             TargetLanguage = glslang::EShTargetSpv;
             TargetVersion = glslang::EShTargetSpv_1_0;
@@ -988,7 +1018,7 @@
 
             // Set base bindings
             shader->setShiftBinding(res, baseBinding[res][compUnit.stage]);
-            
+
             // Set bindings for particular resource sets
             // TODO: use a range based for loop here, when available in all environments.
             for (auto i = baseBindingForSet[res][compUnit.stage].begin();
@@ -1110,7 +1140,6 @@
             for (int stage = 0; stage < EShLangCount; ++stage) {
                 if (program.getIntermediate((EShLanguage)stage)) {
                     std::vector<unsigned int> spirv;
-                    std::string warningsErrors;
                     spv::SpvBuildLogger logger;
                     glslang::SpvOptions spvOptions;
                     if (Options & EOptionDebug)
@@ -1263,7 +1292,7 @@
     ProcessConfigFile();
 
     if ((Options & EOptionReadHlsl) && !((Options & EOptionOutputPreprocessed) || (Options & EOptionSpv)))
-        Error("ERROR: HLSL requires SPIR-V code generation (or preprocessing only)");
+        Error("HLSL requires SPIR-V code generation (or preprocessing only)");
 
     //
     // Two modes:
@@ -1400,17 +1429,17 @@
     else if (stageName == "comp")
         return EShLangCompute;
     else if (stageName == "rgen")
-        return EShLangRayGenNV;
+        return EShLangRayGen;
     else if (stageName == "rint")
-        return EShLangIntersectNV;
+        return EShLangIntersect;
     else if (stageName == "rahit")
-        return EShLangAnyHitNV;
+        return EShLangAnyHit;
     else if (stageName == "rchit")
-        return EShLangClosestHitNV;
+        return EShLangClosestHit;
     else if (stageName == "rmiss")
-        return EShLangMissNV;
+        return EShLangMiss;
     else if (stageName == "rcall")
-        return EShLangCallableNV;
+        return EShLangCallable;
     else if (stageName == "mesh")
         return EShLangMeshNV;
     else if (stageName == "task")
@@ -1498,8 +1527,8 @@
            "Options:\n"
            "  -C          cascading errors; risk crash from accumulation of error recoveries\n"
            "  -D          input is HLSL (this is the default when any suffix is .hlsl)\n"
-           "  -D<macro=def>\n"
-           "  -D<macro>   define a pre-processor macro\n"
+           "  -D<name[=def]> | --define-macro <name[=def]> | --D <name[=def]>\n"
+           "              define a pre-processor macro\n"
            "  -E          print pre-processed GLSL; cannot be used with -l;\n"
            "              errors will appear on stderr\n"
            "  -G[ver]     create SPIR-V binary, under OpenGL semantics; turns on -l;\n"
@@ -1515,7 +1544,8 @@
            "  -Os         optimizes SPIR-V to minimize size\n"
            "  -S <stage>  uses specified stage rather than parsing the file extension\n"
            "              choices for <stage> are vert, tesc, tese, geom, frag, or comp\n"
-           "  -U<macro>   undefine a pre-processor macro\n"
+           "  -U<name> | --undef-macro <name> | --U <name>\n"
+           "              undefine a pre-processor macro\n"
            "  -V[ver]     create SPIR-V binary, under Vulkan semantics; turns on -l;\n"
            "              default file name is <stage>.spv (-o overrides this)\n"
            "              'ver', when present, is the version of the input semantics,\n"
@@ -1621,16 +1651,17 @@
            "  --sep                             synonym for --source-entrypoint\n"
            "  --stdin                           read from stdin instead of from a file;\n"
            "                                    requires providing the shader stage using -S\n"
-           "  --target-env {vulkan1.0 | vulkan1.1 | opengl | \n"
+           "  --target-env {vulkan1.0 | vulkan1.1 | vulkan1.2 | opengl | \n"
            "                spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3 | spirv1.4 | spirv1.5}\n"
-           "                                    set execution environment that emitted code\n"
-           "                                    will execute in (versus source language\n"
-           "                                    semantics selected by --client) defaults:\n"
-           "                                     * 'vulkan1.0' under '--client vulkan<ver>'\n"
-           "                                     * 'opengl' under '--client opengl<ver>'\n"
-           "                                     * 'spirv1.0' under --target-env vulkan1.0\n"
-           "                                     * 'spirv1.3' under --target-env vulkan1.1\n"
-           "                                    multiple --targen-env can be specified.\n"
+           "                                    Set the execution environment that the\n"
+           "                                    generated code will be executed in.\n"
+           "                                    Defaults to:\n"
+           "                                     * vulkan1.0 under --client vulkan<ver>\n"
+           "                                     * opengl    under --client opengl<ver>\n"
+           "                                     * spirv1.0  under --target-env vulkan1.0\n"
+           "                                     * spirv1.3  under --target-env vulkan1.1\n"
+           "                                     * spirv1.5  under --target-env vulkan1.2\n"
+           "                                    Multiple --target-env can be specified.\n"
            "  --variable-name <name>\n"
            "  --vn <name>                       creates a C header file that contains a\n"
            "                                    uint32_t array named <name>\n"
diff --git a/StandAlone/resource_limits_c.cpp b/StandAlone/resource_limits_c.cpp
new file mode 100644
index 0000000..a1f681c
--- /dev/null
+++ b/StandAlone/resource_limits_c.cpp
@@ -0,0 +1,65 @@
+/**
+BSD 2-Clause License
+
+Copyright (c) 2020, Travis Fort
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+2. 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.
+
+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 HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+
+#include "resource_limits_c.h"
+#include "ResourceLimits.h"
+#include <stdlib.h>
+#include <string.h>
+#include <string>
+
+const glslang_resource_t* glslang_default_resource(void)
+{
+    return reinterpret_cast<const glslang_resource_t*>(&glslang::DefaultTBuiltInResource);
+}
+
+#if defined(__clang__) || defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#elif defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4996)
+#endif
+
+const char* glslang_default_resource_string()
+{
+    std::string cpp_str = glslang::GetDefaultTBuiltInResourceString();
+    char* c_str = (char*)malloc(cpp_str.length() + 1);
+    strcpy(c_str, cpp_str.c_str());
+    return c_str;
+}
+
+#if defined(__clang__) || defined(__GNUC__)
+#pragma GCC diagnostic pop
+#elif defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+void glslang_decode_resource_limits(glslang_resource_t* resources, char* config)
+{
+    glslang::DecodeResourceLimits(reinterpret_cast<TBuiltInResource*>(resources), config);
+}
diff --git a/StandAlone/resource_limits_c.h b/StandAlone/resource_limits_c.h
new file mode 100644
index 0000000..108fd5e
--- /dev/null
+++ b/StandAlone/resource_limits_c.h
@@ -0,0 +1,54 @@
+/**
+BSD 2-Clause License
+
+Copyright (c) 2020, Travis Fort
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+2. 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.
+
+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 HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+
+#ifndef _STAND_ALONE_RESOURCE_LIMITS_C_INCLUDED_
+#define _STAND_ALONE_RESOURCE_LIMITS_C_INCLUDED_
+
+#include "../glslang/Include/glslang_c_interface.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// These are the default resources for TBuiltInResources, used for both
+//  - parsing this string for the case where the user didn't supply one,
+//  - dumping out a template for user construction of a config file.
+const glslang_resource_t* glslang_default_resource(void);
+
+// Returns the DefaultTBuiltInResource as a human-readable string.
+// NOTE: User is responsible for freeing this string.
+const char* glslang_default_resource_string();
+
+// Decodes the resource limits from |config| to |resources|.
+void glslang_decode_resource_limits(glslang_resource_t* resources, char* config);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _STAND_ALONE_RESOURCE_LIMITS_C_INCLUDED_
diff --git a/StandAlone/spirv-remap.cpp b/StandAlone/spirv-remap.cpp
index 5e2ed0a..48878c3 100644
--- a/StandAlone/spirv-remap.cpp
+++ b/StandAlone/spirv-remap.cpp
@@ -334,8 +334,6 @@
     if (outputDir.empty())
         usage(argv[0], "Output directory required");
 
-    std::string errmsg;
-
     // Main operations: read, remap, and write.
     execute(inputFile, outputDir, opts, verbosity);
 
diff --git a/Test/100.frag b/Test/100.frag
index 4f0c69b..439fc6c 100644
--- a/Test/100.frag
+++ b/Test/100.frag
@@ -201,6 +201,19 @@
     return fooinit();

 }

 

+// Test extension GL_EXT_blend_func_extended

+void blendFuncFail() // Error since extension GL_EXT_blend_func_extended is disabled

+{

+    gl_SecondaryFragColorEXT = vec4(1.0);   

+    gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT - 1] = vec4(0.1);

+}

+#extension GL_EXT_blend_func_extended : enable

+void blendFunc() 

+{

+    gl_SecondaryFragColorEXT = vec4(1.0);

+    gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT - 1] = vec4(0.1);

+}

+

 // Test extra-function initializers

 const float fi1 = 3.0;

 const float fi2 = 4.0;

@@ -219,6 +232,9 @@
 

 int init2 = gl_FrontFacing ? 1 : 2;

 

+#define A__B // error

+int a__b;    // error

+

 #pragma STDGL invariant(all)

 

 #line 3000

diff --git a/Test/120.vert b/Test/120.vert
index d276557..7b98492 100644
--- a/Test/120.vert
+++ b/Test/120.vert
@@ -201,3 +201,15 @@
 
 #define macr(A,B) A ## B
 int macr(qrs,tuv);
+
+layout(std140) uniform BlockName    // ERROR
+{
+    int test;
+};
+
+#extension GL_ARB_uniform_buffer_object : enable
+
+layout(std140) uniform BlockName
+{
+    int test;
+};
\ No newline at end of file
diff --git a/Test/130.frag b/Test/130.frag
index 3e39411..c352df4 100644
--- a/Test/130.frag
+++ b/Test/130.frag
@@ -62,12 +62,14 @@
     b3 < b3;                   // ERROR
     uv3 > uv3;                 // ERROR
     uvec2(2, 3) >= uvec2(3,3); // ERROR
+    int samples = gl_NumSamples; // ERROR
     int(bl4) <= int(bl4);      // true
     int(bl4.x) > int(bl4.y);   // false
 }
 
 #extension GL_ARB_texture_gather : enable
 #extension GL_ARB_texture_rectangle : enable
+#extension GL_ARB_sample_shading : enable
 
 uniform sampler2D samp2D;
 uniform sampler2DShadow samp2DS;
@@ -83,6 +85,7 @@
     s = textureGatherOffset(samp2DA, vec3(0.3), ivec2(1));
     s = textureGatherOffset(samp2DS, vec2(0.3), 1.3, ivec2(1)); // ERROR
     s = textureGatherOffset(samp2D, vec2(0.3), ivec2(1), 2);    // ERROR
+    int samples = gl_NumSamples;
 }
 
 #extension GL_ARB_gpu_shader5 : enable
@@ -167,3 +170,12 @@
 }
 
 layout(early_fragment_tests) out;         // ERROR
+
+#extension GL_ARB_explicit_uniform_location : enable
+
+layout(location = 3) uniform vec4 ucolor0; // ERROR: explicit attrib location is also required for version < 330
+
+#extension GL_ARB_explicit_attrib_location : enable
+
+layout(location = 4) uniform vec4 ucolor1;
+
diff --git a/Test/140.frag b/Test/140.frag
index 2bc2f59..5efdbed 100644
--- a/Test/140.frag
+++ b/Test/140.frag
@@ -17,6 +17,7 @@
 #error GL_ES is not set
 #endif
 
+
 in struct S { float f; } s; // ERROR
 
 float patch = 3.1;
@@ -51,3 +52,9 @@
 {
     return i1 + i2;
 }
+
+uniform sampler2DMS aaa1; // ERROR
+
+#extension GL_ARB_texture_multisample : enable
+
+uniform sampler2DMS aaa2;
diff --git a/Test/150.frag b/Test/150.frag
index e87d633..228e4f0 100644
--- a/Test/150.frag
+++ b/Test/150.frag
@@ -49,3 +49,136 @@
    return gl_PrimitiveID;

    gl_PerFragment; // ERROR, block name can't get reused

 }

+

+in double type1;    // ERROR

+#extension GL_ARB_gpu_shader_fp64 : enable

+double type2;

+double type3 = 2.0;

+int absTest = sqrt(type3);

+double absTest2 = sqrt(type3);

+double absTest3 = sqrt(2);

+float dk = sqrt(11);

+

+#extension GL_ARB_shader_bit_encoding: enable

+

+float f;

+vec4 v4;

+ivec4 iv4a;

+uvec2 uv2c;

+void bitEncodingPass()

+{

+    int i = floatBitsToInt(f);

+    uvec4 uv11 = floatBitsToUint(v4);

+    vec4 v14 = intBitsToFloat(iv4a);

+    vec2 v15 = uintBitsToFloat(uv2c);

+}

+

+#extension GL_ARB_shader_bit_encoding: disable

+

+void bitEncodingFail()

+{

+    int i = floatBitsToInt(f); // Error, extention GL_ARB_bit_encoding is diabled

+}

+

+#extension GL_ARB_shading_language_packing : enable

+vec2 v2a;

+uint uy;

+

+void packingPass()

+{

+    uint u19 = packSnorm2x16(v2a);

+    vec2 v20 = unpackSnorm2x16(uy);

+    uint u15 = packUnorm2x16(v2a);

+    vec2 v16 = unpackUnorm2x16(uy);

+    uint u17 = packHalf2x16(v2a);

+    vec2 v18 = unpackHalf2x16(uy);

+}

+

+#extension GL_ARB_shading_language_packing : disable

+void packingFail()

+{

+    uint u19 = packSnorm2x16(v2a); // Error, extension GL_ARB_shading_language_packing is disabled

+}

+

+// Testing extension GL_ARB_texture_query_lod

+uniform sampler1D samp1D;

+uniform sampler2DShadow samp2Ds;

+

+void qlodFail()

+{

+    vec2 lod;

+    float pf;

+    vec2 pf2;

+    vec3 pf3;

+

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

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

+}

+

+#extension GL_ARB_texture_query_lod : enable

+

+uniform isampler2D isamp2D;

+uniform usampler3D usamp3D;

+uniform samplerCube sampCube;

+uniform isampler1DArray isamp1DA;

+uniform usampler2DArray usamp2DA;

+

+uniform sampler1DShadow samp1Ds;

+uniform samplerCubeShadow sampCubes;

+uniform sampler1DArrayShadow samp1DAs;

+uniform sampler2DArrayShadow samp2DAs;

+

+uniform samplerBuffer sampBuf;

+uniform sampler2DRect sampRect;

+

+void qlodPass()

+{

+    vec2 lod;

+    float pf;

+    vec2 pf2;

+    vec3 pf3;

+

+    lod = textureQueryLod(samp1D, pf);

+    lod = textureQueryLod(isamp2D, pf2);

+    lod = textureQueryLod(usamp3D, pf3);

+    lod = textureQueryLod(sampCube, pf3);

+    lod = textureQueryLod(isamp1DA, pf);

+    lod = textureQueryLod(usamp2DA, pf2);

+

+    lod = textureQueryLod(samp1Ds, pf);

+    lod = textureQueryLod(samp2Ds, pf2);

+    lod = textureQueryLod(sampCubes, pf3);

+    lod = textureQueryLod(samp1DAs, pf);

+    lod = textureQueryLod(samp2DAs, pf2);

+

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

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

+}

+

+// Test extension GL_EXT_shader_integer_mix

+#extension GL_EXT_shader_integer_mix : enable

+bool b1, b2, b;

+int x,y;

+uint z,w;

+

+void testmix()

+{

+    int ival  = mix(x, y, b);

+    ivec2 iv2 = mix(ivec2(x), ivec2(y), bvec2(b));

+    ivec3 iv3 = mix(ivec3(x), ivec3(y), bvec3(b));

+    ivec4 iv4 = mix(ivec4(x), ivec4(x), bvec4(b));

+    uint  uiv = mix(z, w, b);

+    uvec2 uv2 = mix(uvec2(z), uvec2(z), bvec2(b));

+    uvec3 uv3 = mix(uvec3(z), uvec3(z), bvec3(b));

+    uvec4 uv4 = mix(uvec4(z), uvec4(z), bvec4(b));

+    bool  bv  = mix(b1, b2, b);

+    bvec2 bv2 = mix(bvec2(b1), bvec2(b2), bvec2(b));

+    bvec3 bv3 = mix(bvec3(b1), bvec3(b2), bvec3(b));

+    bvec4 bv4 = mix(bvec4(b1), bvec4(b2), bvec4(b));

+}

+

+#extension GL_EXT_shader_integer_mix : disable

+void testmixFail()

+{

+    int ival  = mix(x, y, b); // Error since extenson GL_EXT_shader_integer_mix is disabled

+}

diff --git a/Test/150.vert b/Test/150.vert
index 4dd9e5c..f9a920c 100644
--- a/Test/150.vert
+++ b/Test/150.vert
@@ -25,5 +25,21 @@
 };

 int a[5]; // ERROR, resizing user-block member

 

+in double dvarerr; // Error since extension GL_ARB_vertex_attrib_64bit is not enabled

+#extension GL_ARB_vertex_attrib_64bit: enable

+in double dvar;

+in dvec2  dv2var;

+in dvec3  dv3var;

+in dvec4  dv4var;

+in dmat2  dmat2var;

+in dmat3  dmat3var;

+in dmat4  dmat4var;

+in dmat2x3 dmat23var;

+in dmat2x4 dmat24var;

+in dmat3x2 dmat32var;

+in dmat3x4 dmat34var;

+in dmat4x2 dmat42var;

+in dmat4x3 dmat43var;

+

 #line 3000

 #error line of this error should be 3001

diff --git a/Test/300.frag b/Test/300.frag
index ca2e2cb..279864a 100644
--- a/Test/300.frag
+++ b/Test/300.frag
@@ -149,6 +149,39 @@
 
 layout(early_fragment_tests) in;  // ERROR
 
+// Test extension GL_EXT_shader_integer_mix
+#extension GL_EXT_shader_integer_mix : enable
+bool b1, b2, b;
+int x,y;
+uint z,w;
+
+void testmix()
+{
+    int ival  = mix(x, y, b);
+    ivec2 iv2 = mix(ivec2(x), ivec2(y), bvec2(b));
+    ivec3 iv3 = mix(ivec3(x), ivec3(y), bvec3(b));
+    ivec4 iv4 = mix(ivec4(x), ivec4(x), bvec4(b));
+    uint  uiv = mix(z, w, b);
+    uvec2 uv2 = mix(uvec2(z), uvec2(z), bvec2(b));
+    uvec3 uv3 = mix(uvec3(z), uvec3(z), bvec3(b));
+    uvec4 uv4 = mix(uvec4(z), uvec4(z), bvec4(b));
+    bool  bv  = mix(b1, b2, b);
+    bvec2 bv2 = mix(bvec2(b1), bvec2(b2), bvec2(b));
+    bvec3 bv3 = mix(bvec3(b1), bvec3(b2), bvec3(b));
+    bvec4 bv4 = mix(bvec4(b1), bvec4(b2), bvec4(b));
+}
+
+#extension GL_EXT_shader_integer_mix : disable
+void testmixFail()
+{
+    int ival  = mix(x, y, b); // Error since extenson GL_EXT_shader_integer_mix is disabled
+}
+
+// Test layout qualifier "index" with extension GL_EXT_blend_func_extended
+layout(location = 0, index = 1) out vec4 outVarFail; // Error Index supported with extension GL_EXT_blend_func_extended enabled
+#extension GL_EXT_blend_func_extended : enable
+layout(location = 0, index = 2) out vec4 outVarPass;
+
 #ifndef GL_FRAGMENT_PRECISION_HIGH
 #error missing GL_FRAGMENT_PRECISION_HIGH
 #endif
diff --git a/Test/310.frag b/Test/310.frag
index 8a11f67..5cdcca7 100755
--- a/Test/310.frag
+++ b/Test/310.frag
@@ -448,4 +448,40 @@
 {
     gl_DeviceIndex;
     gl_ViewIndex;
-}
+}

+

+#extension GL_EXT_shader_implicit_conversions : enable

+

+// Test function overloading

+void func(uint a, uvec4 b)

+{

+

+}

+

+int func(uint a, uvec4 b) // Error function overloading because of same signature and different return type

+{

+    return 0;

+}

+

+int b;

+

+void testimplicit() {

+

+    uint a = b; // int->uint

+    mediump vec4 col = vec4(1, 2, 3, 4); // ivec4 -> vec4

+    int  b = a + 2; // ERROR: cannot convert from ' temp uint' to ' temp int'

+

+    // Test binary ops

+    uint c = b * 3; 

+    uint d = b * 3u;

+    uint e = b%3;

+    uint f = (b > 3)? b : c;     

+    func(b, ivec4(1,2,3,4)); 

+}

+

+#extension GL_EXT_shader_implicit_conversions : disable

+

+void testimplicitFail() {

+    uint a = b; // Error GL_EXT_shader_implicit_conversions is disabled

+}

+

diff --git a/Test/330.frag b/Test/330.frag
index 9afa8f8..364fc0a 100644
--- a/Test/330.frag
+++ b/Test/330.frag
@@ -126,27 +126,26 @@
 layout(location=0, index=0) in; // ERROR, not just on in
 layout(location=0, index=0) out; // ERROR, need a variable
 layout(location=26, index=0) out indexBlock { int a; } indexBlockI; // ERROR, not on a block
-

-uniform sampler1D samp1D;

-uniform sampler2DShadow samp2Ds;

-

-void qlod()

-{

-    vec2 lod;

-    float pf;

-    vec2 pf2;

-    vec3 pf3;

-

-    lod = textureQueryLod(samp1D, pf);      // ERROR, not until 400

-    lod = textureQueryLod(samp2Ds, pf2);    // ERROR, not until 400

-}

-

-int precise;                // okay, not a keyword yet

-struct SKeyMem { int precise; } KeyMem; // okay, not a keyword yet

-

-void fooKeyMem()

-{

-    KeyMem.precise;

-}

-

-layout(location=28, index=2) out vec4 outIndex2; // ERROR index out of range
\ No newline at end of file
+
+int precise;                // okay, not a keyword yet
+struct SKeyMem { int precise; } KeyMem; // okay, not a keyword yet
+
+void fooKeyMem()
+{
+    KeyMem.precise;
+}
+
+layout(location=28, index=2) out vec4 outIndex2; // ERROR index out of range
+
+layout(location=4) uniform vec4 ucolor0; // ERROR: extension is not enabled
+
+#extension GL_ARB_explicit_uniform_location : enable
+
+layout(location=5) uniform vec4 ucolor1;
+
+layout(location=6) uniform ColorsBuffer // ERROR: location cannot be applied in uniform buffer block
+{
+    vec4 colors[128];
+} colorsBuffer;
+
+
diff --git a/Test/410.vert b/Test/410.vert
index 0ecf476..1891a67 100644
--- a/Test/410.vert
+++ b/Test/410.vert
@@ -6,4 +6,5 @@
 
 void main()
 {
+    int test = gl_MaxFragmentUniformVectors;
 }
diff --git a/Test/420.frag b/Test/420.frag
index 1444758..d3020b3 100644
--- a/Test/420.frag
+++ b/Test/420.frag
@@ -12,3 +12,31 @@
 layout(depth_any) out float gl_FragDepth;  // ERROR, done after use
 
 layout(binding=0) uniform atomic_uint a[];
+
+uniform writeonly image2D      i2D;
+ivec2 iv2dim = imageSize(i2D); // ERROR: imageSize called without enabling GL_ARB_shader_image_size extension
+#extension GL_ARB_shader_image_size : enable
+ivec2 iv2dim1 = imageSize(i2D);
+
+#extension GL_ARB_shader_storage_buffer_object : enable
+
+layout(binding = 0,std430) buffer Buffer
+{
+    int atomi;
+    uint atomu;
+};
+
+void atomicOpPass()
+{
+    int origi = atomicAdd(atomi, 3);
+    uint origu = atomicAnd(atomu, 7u);
+    origi = atomicExchange(atomi, 4);
+    origu = atomicCompSwap(atomu, 10u, 8u);
+}
+
+#extension GL_ARB_shader_storage_buffer_object : disable
+
+layout(binding = 1,std430) buffer BufferFail // Error std430 and "buffer" block support disabled 
+{
+    int atom1i;
+};
diff --git a/Test/450.comp b/Test/450.comp
index fb2b56a..316674d 100644
--- a/Test/450.comp
+++ b/Test/450.comp
@@ -1,5 +1,8 @@
 #version 450 core

 layout(local_size_x = 0) in; // ERROR, 0 not allowed

+

+layout(binding=10000) uniform atomic_uint;     // ERROR

+

 void main()

 {

     shared float f;   // ERROR shared must be global

diff --git a/Test/460.vert b/Test/460.vert
index fd87d8b..cf4f4ad 100644
--- a/Test/460.vert
+++ b/Test/460.vert
@@ -7,6 +7,7 @@
 void main()

 {

     bool b1;

+    float array[int(mod(float (7.1), float (4.0)))];

     b1 = anyInvocation(b1);

     b1 = allInvocations(b1);

     b1 = allInvocationsEqual(b1);

diff --git a/Test/atomic_uint.frag b/Test/atomic_uint.frag
index 9a95a48..4155214 100644
--- a/Test/atomic_uint.frag
+++ b/Test/atomic_uint.frag
@@ -1,6 +1,7 @@
 #version 420 core
 
 layout(binding = 0) uniform atomic_uint counter;
+layout(binding = 0, offset = 9) uniform atomic_uint counter;
 
 uint func(atomic_uint c)
 {
@@ -41,7 +42,7 @@
 layout(binding=0, offset=32) uniform atomic_uint aOffset;

 layout(binding=0, offset=4) uniform atomic_uint;

 layout(binding=0) uniform atomic_uint bar3;           // offset is 4

-layout(binding=0) uniform atomic_uint ac[3];          // offset = 8

+layout(binding=0) uniform atomic_uint ac[2];          // offset = 8

 layout(binding=0) uniform atomic_uint ad;             // offset = 20

 layout(offset=8) uniform atomic_uint bar4;            // ERROR, no binding

 layout(binding = 0, offset = 12) uniform atomic_uint overlap;  // ERROR, overlapping offsets

diff --git a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
index 2e58bdd..887e4ac 100644
--- a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
+++ b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
@@ -1,6 +1,6 @@
 hlsl.aliasOpaque.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 87
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
index d334b7e..ad9e6c1 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
@@ -1,6 +1,6 @@
 hlsl.flattenOpaque.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 185
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
index 921cb96..6ed8da2 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
@@ -1,6 +1,6 @@
 hlsl.flattenOpaqueInit.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 134
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
index 39770f4..81ab5e6 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -1,6 +1,6 @@
 hlsl.flattenOpaqueInitMix.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 97
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenSubset.frag.out b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
index 4628479..562070d 100644
--- a/Test/baseLegalResults/hlsl.flattenSubset.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
@@ -1,6 +1,6 @@
 hlsl.flattenSubset.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
index 0d7ab56..5cc280b 100644
--- a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
@@ -1,6 +1,6 @@
 hlsl.flattenSubset2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
index 27482b3..f4c9c5a 100644
--- a/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
+++ b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
@@ -1,6 +1,6 @@
 hlsl.partialFlattenLocal.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 158
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out b/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
index e54fb7e..7be570b 100644
--- a/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
+++ b/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
@@ -1,6 +1,6 @@
 hlsl.partialFlattenMixed.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/100.frag.out b/Test/baseResults/100.frag.out
index 5e702e8..2ac6054 100644
--- a/Test/baseResults/100.frag.out
+++ b/Test/baseResults/100.frag.out
@@ -82,13 +82,19 @@
 ERROR: 0:193: '.length' : not supported for this version or the enabled extensions 
 ERROR: 0:194: '.' : cannot apply to an array: method
 ERROR: 0:194: 'a' : can't use function syntax on variable 
-ERROR: 0:214: 'non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)' : not supported for this version or the enabled extensions 
+ERROR: 0:207: 'gl_SecondaryFragColorEXT' : required extension not requested: GL_EXT_blend_func_extended
+ERROR: 0:208: 'gl_SecondaryFragDataEXT' : required extension not requested: GL_EXT_blend_func_extended
+ERROR: 0:208: 'gl_MaxDualSourceDrawBuffersEXT' : required extension not requested: GL_EXT_blend_func_extended
+ERROR: 0:227: 'non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)' : not supported for this version or the enabled extensions 
+ERROR: 0:235: '#define' : names containing consecutive underscores are reserved, and an error if version < 300: A__B
+ERROR: 0:236: 'a__b' : identifiers containing consecutive underscores ("__") are reserved, and an error if version < 300 
 ERROR: 0:3000: '#error' : line of this error should be 3000  
 ERROR: 0:3002: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
-ERROR: 77 compilation errors.  No code generated.
+ERROR: 82 compilation errors.  No code generated.
 
 
 Shader version: 100
+Requested GL_EXT_blend_func_extended
 Requested GL_EXT_frag_depth
 Requested GL_EXT_shader_non_constant_global_initializers
 Requested GL_EXT_shader_texture_lod
@@ -359,36 +365,76 @@
 0:201    Sequence
 0:201      Branch: Return with expression
 0:201        Function Call: fooinit( ( global mediump float)
-0:209  Function Definition: fooinit( ( global mediump float)
-0:209    Function Parameters: 
-0:211    Sequence
-0:211      Branch: Return with expression
-0:211        Constant:
-0:211          12.000000
-0:214  Sequence
-0:214    move second child to first child ( temp mediump int)
-0:214      'init1' ( global mediump int)
-0:214      Test condition and select ( temp mediump int)
-0:214        Condition
-0:214        'gl_FrontFacing' ( gl_FrontFacing bool Face)
-0:214        true case
+0:205  Function Definition: blendFuncFail( ( global void)
+0:205    Function Parameters: 
+0:207    Sequence
+0:207      move second child to first child ( temp mediump 4-component vector of float)
+0:207        'gl_SecondaryFragColorEXT' ( out mediump 4-component vector of float SecondaryFragColorEXT)
+0:207        Constant:
+0:207          1.000000
+0:207          1.000000
+0:207          1.000000
+0:207          1.000000
+0:208      move second child to first child ( temp mediump 4-component vector of float)
+0:208        direct index ( temp mediump 4-component vector of float SecondaryFragDataEXT)
+0:208          'gl_SecondaryFragDataEXT' ( out 1-element array of mediump 4-component vector of float SecondaryFragDataEXT)
+0:208          Constant:
+0:208            0 (const int)
+0:208        Constant:
+0:208          0.100000
+0:208          0.100000
+0:208          0.100000
+0:208          0.100000
+0:211  Function Definition: blendFunc( ( global void)
+0:211    Function Parameters: 
+0:213    Sequence
+0:213      move second child to first child ( temp mediump 4-component vector of float)
+0:213        'gl_SecondaryFragColorEXT' ( out mediump 4-component vector of float SecondaryFragColorEXT)
+0:213        Constant:
+0:213          1.000000
+0:213          1.000000
+0:213          1.000000
+0:213          1.000000
+0:214      move second child to first child ( temp mediump 4-component vector of float)
+0:214        direct index ( temp mediump 4-component vector of float SecondaryFragDataEXT)
+0:214          'gl_SecondaryFragDataEXT' ( out 1-element array of mediump 4-component vector of float SecondaryFragDataEXT)
+0:214          Constant:
+0:214            0 (const int)
 0:214        Constant:
-0:214          1 (const int)
-0:214        false case
-0:214        Constant:
-0:214          2 (const int)
-0:220  Sequence
-0:220    move second child to first child ( temp mediump int)
-0:220      'init2' ( global mediump int)
-0:220      Test condition and select ( temp mediump int)
-0:220        Condition
-0:220        'gl_FrontFacing' ( gl_FrontFacing bool Face)
-0:220        true case
-0:220        Constant:
-0:220          1 (const int)
-0:220        false case
-0:220        Constant:
-0:220          2 (const int)
+0:214          0.100000
+0:214          0.100000
+0:214          0.100000
+0:214          0.100000
+0:222  Function Definition: fooinit( ( global mediump float)
+0:222    Function Parameters: 
+0:224    Sequence
+0:224      Branch: Return with expression
+0:224        Constant:
+0:224          12.000000
+0:227  Sequence
+0:227    move second child to first child ( temp mediump int)
+0:227      'init1' ( global mediump int)
+0:227      Test condition and select ( temp mediump int)
+0:227        Condition
+0:227        'gl_FrontFacing' ( gl_FrontFacing bool Face)
+0:227        true case
+0:227        Constant:
+0:227          1 (const int)
+0:227        false case
+0:227        Constant:
+0:227          2 (const int)
+0:233  Sequence
+0:233    move second child to first child ( temp mediump int)
+0:233      'init2' ( global mediump int)
+0:233      Test condition and select ( temp mediump int)
+0:233        Condition
+0:233        'gl_FrontFacing' ( gl_FrontFacing bool Face)
+0:233        true case
+0:233        Constant:
+0:233          1 (const int)
+0:233        false case
+0:233        Constant:
+0:233          2 (const int)
 0:?   Linker Objects
 0:?     'a' ( global 3-element array of mediump int)
 0:?     'uint' ( global mediump int)
@@ -421,12 +467,14 @@
 0:?       5.000000
 0:?     'init1' ( global mediump int)
 0:?     'init2' ( global mediump int)
+0:?     'a__b' ( global mediump int)
 
 
 Linked fragment stage:
 
 
 Shader version: 100
+Requested GL_EXT_blend_func_extended
 Requested GL_EXT_frag_depth
 Requested GL_EXT_shader_non_constant_global_initializers
 Requested GL_EXT_shader_texture_lod
@@ -517,30 +565,30 @@
 0:152      'f124' ( global mediump float)
 0:152      Constant:
 0:152        50000000000.000000
-0:214  Sequence
-0:214    move second child to first child ( temp mediump int)
-0:214      'init1' ( global mediump int)
-0:214      Test condition and select ( temp mediump int)
-0:214        Condition
-0:214        'gl_FrontFacing' ( gl_FrontFacing bool Face)
-0:214        true case
-0:214        Constant:
-0:214          1 (const int)
-0:214        false case
-0:214        Constant:
-0:214          2 (const int)
-0:220  Sequence
-0:220    move second child to first child ( temp mediump int)
-0:220      'init2' ( global mediump int)
-0:220      Test condition and select ( temp mediump int)
-0:220        Condition
-0:220        'gl_FrontFacing' ( gl_FrontFacing bool Face)
-0:220        true case
-0:220        Constant:
-0:220          1 (const int)
-0:220        false case
-0:220        Constant:
-0:220          2 (const int)
+0:227  Sequence
+0:227    move second child to first child ( temp mediump int)
+0:227      'init1' ( global mediump int)
+0:227      Test condition and select ( temp mediump int)
+0:227        Condition
+0:227        'gl_FrontFacing' ( gl_FrontFacing bool Face)
+0:227        true case
+0:227        Constant:
+0:227          1 (const int)
+0:227        false case
+0:227        Constant:
+0:227          2 (const int)
+0:233  Sequence
+0:233    move second child to first child ( temp mediump int)
+0:233      'init2' ( global mediump int)
+0:233      Test condition and select ( temp mediump int)
+0:233        Condition
+0:233        'gl_FrontFacing' ( gl_FrontFacing bool Face)
+0:233        true case
+0:233        Constant:
+0:233          1 (const int)
+0:233        false case
+0:233        Constant:
+0:233          2 (const int)
 0:?   Linker Objects
 0:?     'a' ( global 3-element array of mediump int)
 0:?     'uint' ( global mediump int)
@@ -573,4 +621,5 @@
 0:?       5.000000
 0:?     'init1' ( global mediump int)
 0:?     'init2' ( global mediump int)
+0:?     'a__b' ( global mediump int)
 
diff --git a/Test/baseResults/120.vert.out b/Test/baseResults/120.vert.out
index 5a91ed6..6c42b75 100644
--- a/Test/baseResults/120.vert.out
+++ b/Test/baseResults/120.vert.out
@@ -79,7 +79,8 @@
 ERROR: 0:195: 'gl_ModelViewMatrix' : identifiers starting with "gl_" are reserved 
 ERROR: 0:200: 'token pasting (##)' : not supported for this version or the enabled extensions 
 ERROR: 0:203: 'token pasting (##)' : not supported for this version or the enabled extensions 
-ERROR: 80 compilation errors.  No code generated.
+ERROR: 0:205: '' :  syntax error, unexpected IDENTIFIER
+ERROR: 81 compilation errors.  No code generated.
 
 
 Shader version: 120
diff --git a/Test/baseResults/130.frag.out b/Test/baseResults/130.frag.out
index 81d055b..6115f69 100644
--- a/Test/baseResults/130.frag.out
+++ b/Test/baseResults/130.frag.out
@@ -7,33 +7,38 @@
 ERROR: 0:62: '<' :  wrong operand types: no operation '<' exists that takes a left-hand operand of type ' temp 3-component vector of bool' and a right operand of type ' temp 3-component vector of bool' (or there is no acceptable conversion)
 ERROR: 0:63: '>' :  wrong operand types: no operation '>' exists that takes a left-hand operand of type ' temp 3-component vector of uint' and a right operand of type ' temp 3-component vector of uint' (or there is no acceptable conversion)
 ERROR: 0:64: '>=' :  wrong operand types: no operation '>=' exists that takes a left-hand operand of type ' const 2-component vector of uint' and a right operand of type ' const 2-component vector of uint' (or there is no acceptable conversion)
-ERROR: 0:80: 'textureGatherOffset' : no matching overloaded function found 
-ERROR: 0:80: 'assign' :  cannot convert from ' const float' to ' temp 4-component vector of float'
-ERROR: 0:81: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions 
-ERROR: 0:84: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions 
-ERROR: 0:85: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions 
-WARNING: 0:88: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
-ERROR: 0:120: 'line continuation' : not supported for this version or the enabled extensions 
-ERROR: 0:126: 'uniform block' : not supported for this version or the enabled extensions 
-ERROR: 0:140: 'length' : does not operate on this type:  temp bool
-ERROR: 0:140: 'boolb' : can't use function syntax on variable 
-ERROR: 0:141: 'length' : does not operate on this type:  temp float
-ERROR: 0:141: '' : function call, method, or subroutine call expected 
-ERROR: 0:141: '' : no matching overloaded function found 
-ERROR: 0:142: 'length' : incomplete method syntax 
-ERROR: 0:143: 'length' : method does not accept any arguments 
-ERROR: 0:146: 'gl_FogFragCoord' : identifiers starting with "gl_" are reserved 
-ERROR: 0:151: 'int' : must be qualified as flat in
-ERROR: 0:151: 'redeclaration' : cannot change the type of gl_FogFragCoord
-ERROR: 0:153: 'early_fragment_tests' : not supported for this version or the enabled extensions 
-ERROR: 0:154: 'image load store' : not supported for this version or the enabled extensions 
-ERROR: 0:154: 'iimage2D' : Reserved word. 
-ERROR: 0:169: 'early_fragment_tests' : can only apply to 'in' 
-ERROR: 28 compilation errors.  No code generated.
+ERROR: 0:65: 'gl_NumSamples' : required extension not requested: GL_ARB_sample_shading
+ERROR: 0:82: 'textureGatherOffset' : no matching overloaded function found 
+ERROR: 0:82: 'assign' :  cannot convert from ' const float' to ' temp 4-component vector of float'
+ERROR: 0:83: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions 
+ERROR: 0:86: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions 
+ERROR: 0:87: 'textureGatherOffset(...)' : not supported for this version or the enabled extensions 
+WARNING: 0:91: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
+ERROR: 0:123: 'line continuation' : not supported for this version or the enabled extensions 
+ERROR: 0:129: 'uniform block' : not supported for this version or the enabled extensions 
+ERROR: 0:143: 'length' : does not operate on this type:  temp bool
+ERROR: 0:143: 'boolb' : can't use function syntax on variable 
+ERROR: 0:144: 'length' : does not operate on this type:  temp float
+ERROR: 0:144: '' : function call, method, or subroutine call expected 
+ERROR: 0:144: '' : no matching overloaded function found 
+ERROR: 0:145: 'length' : incomplete method syntax 
+ERROR: 0:146: 'length' : method does not accept any arguments 
+ERROR: 0:149: 'gl_FogFragCoord' : identifiers starting with "gl_" are reserved 
+ERROR: 0:154: 'int' : must be qualified as flat in
+ERROR: 0:154: 'redeclaration' : cannot change the type of gl_FogFragCoord
+ERROR: 0:156: 'early_fragment_tests' : not supported for this version or the enabled extensions 
+ERROR: 0:157: 'image load store' : not supported for this version or the enabled extensions 
+ERROR: 0:157: 'iimage2D' : Reserved word. 
+ERROR: 0:172: 'early_fragment_tests' : can only apply to 'in' 
+ERROR: 0:176: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
+ERROR: 30 compilation errors.  No code generated.
 
 
 Shader version: 130
+Requested GL_ARB_explicit_attrib_location
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_gpu_shader5
+Requested GL_ARB_sample_shading
 Requested GL_ARB_separate_shader_objects
 Requested GL_ARB_shader_image_load_store
 Requested GL_ARB_shading_language_420pack
@@ -119,259 +124,267 @@
 0:63        false (const bool)
 0:64      Constant:
 0:64        false (const bool)
-0:65      Constant:
-0:65        true (const bool)
+0:65      Sequence
+0:65        move second child to first child ( temp int)
+0:65          'samples' ( temp int)
+0:65          'gl_NumSamples' ( uniform int SampleMaskIn)
 0:66      Constant:
-0:66        false (const bool)
-0:77  Function Definition: bar23( ( global void)
-0:77    Function Parameters: 
+0:66        true (const bool)
+0:67      Constant:
+0:67        false (const bool)
+0:79  Function Definition: bar23( ( global void)
+0:79    Function Parameters: 
 0:?     Sequence
-0:80      's' ( temp 4-component vector of float)
-0:81      move second child to first child ( temp 4-component vector of float)
-0:81        's' ( temp 4-component vector of float)
-0:81        textureGatherOffset ( global 4-component vector of float)
-0:81          'samp2DR' ( uniform sampler2DRect)
-0:81          Constant:
-0:81            0.300000
-0:81            0.300000
-0:81          Constant:
-0:81            1 (const int)
-0:81            1 (const int)
-0:82      move second child to first child ( temp 4-component vector of float)
-0:82        's' ( temp 4-component vector of float)
-0:82        textureGatherOffset ( global 4-component vector of float)
-0:82          'samp2D' ( uniform sampler2D)
-0:82          Constant:
-0:82            0.300000
-0:82            0.300000
-0:82          Constant:
-0:82            1 (const int)
-0:82            1 (const int)
+0:82      's' ( temp 4-component vector of float)
 0:83      move second child to first child ( temp 4-component vector of float)
 0:83        's' ( temp 4-component vector of float)
 0:83        textureGatherOffset ( global 4-component vector of float)
-0:83          'samp2DA' ( uniform sampler2DArray)
+0:83          'samp2DR' ( uniform sampler2DRect)
 0:83          Constant:
 0:83            0.300000
 0:83            0.300000
-0:83            0.300000
 0:83          Constant:
 0:83            1 (const int)
 0:83            1 (const int)
 0:84      move second child to first child ( temp 4-component vector of float)
 0:84        's' ( temp 4-component vector of float)
 0:84        textureGatherOffset ( global 4-component vector of float)
-0:84          'samp2DS' ( uniform sampler2DShadow)
+0:84          'samp2D' ( uniform sampler2D)
 0:84          Constant:
 0:84            0.300000
 0:84            0.300000
 0:84          Constant:
-0:84            1.300000
-0:84          Constant:
 0:84            1 (const int)
 0:84            1 (const int)
 0:85      move second child to first child ( temp 4-component vector of float)
 0:85        's' ( temp 4-component vector of float)
 0:85        textureGatherOffset ( global 4-component vector of float)
-0:85          'samp2D' ( uniform sampler2D)
+0:85          'samp2DA' ( uniform sampler2DArray)
 0:85          Constant:
 0:85            0.300000
 0:85            0.300000
+0:85            0.300000
 0:85          Constant:
 0:85            1 (const int)
 0:85            1 (const int)
-0:85          Constant:
-0:85            2 (const int)
-0:90  Function Definition: bar234( ( global void)
-0:90    Function Parameters: 
+0:86      move second child to first child ( temp 4-component vector of float)
+0:86        's' ( temp 4-component vector of float)
+0:86        textureGatherOffset ( global 4-component vector of float)
+0:86          'samp2DS' ( uniform sampler2DShadow)
+0:86          Constant:
+0:86            0.300000
+0:86            0.300000
+0:86          Constant:
+0:86            1.300000
+0:86          Constant:
+0:86            1 (const int)
+0:86            1 (const int)
+0:87      move second child to first child ( temp 4-component vector of float)
+0:87        's' ( temp 4-component vector of float)
+0:87        textureGatherOffset ( global 4-component vector of float)
+0:87          'samp2D' ( uniform sampler2D)
+0:87          Constant:
+0:87            0.300000
+0:87            0.300000
+0:87          Constant:
+0:87            1 (const int)
+0:87            1 (const int)
+0:87          Constant:
+0:87            2 (const int)
+0:88      Sequence
+0:88        move second child to first child ( temp int)
+0:88          'samples' ( temp int)
+0:88          'gl_NumSamples' ( uniform int SampleMaskIn)
+0:93  Function Definition: bar234( ( global void)
+0:93    Function Parameters: 
 0:?     Sequence
-0:93      move second child to first child ( temp 4-component vector of float)
-0:93        's' ( temp 4-component vector of float)
-0:93        textureGatherOffset ( global 4-component vector of float)
-0:93          'samp2D' ( uniform sampler2D)
-0:93          Constant:
-0:93            0.300000
-0:93            0.300000
-0:93          Constant:
-0:93            1 (const int)
-0:93            1 (const int)
-0:94      move second child to first child ( temp 4-component vector of float)
-0:94        's' ( temp 4-component vector of float)
-0:94        textureGatherOffset ( global 4-component vector of float)
-0:94          'samp2DA' ( uniform sampler2DArray)
-0:94          Constant:
-0:94            0.300000
-0:94            0.300000
-0:94            0.300000
-0:94          Constant:
-0:94            1 (const int)
-0:94            1 (const int)
-0:95      move second child to first child ( temp 4-component vector of float)
-0:95        's' ( temp 4-component vector of float)
-0:95        textureGatherOffset ( global 4-component vector of float)
-0:95          'samp2DR' ( uniform sampler2DRect)
-0:95          Constant:
-0:95            0.300000
-0:95            0.300000
-0:95          Constant:
-0:95            1 (const int)
-0:95            1 (const int)
 0:96      move second child to first child ( temp 4-component vector of float)
 0:96        's' ( temp 4-component vector of float)
 0:96        textureGatherOffset ( global 4-component vector of float)
-0:96          'samp2DS' ( uniform sampler2DShadow)
+0:96          'samp2D' ( uniform sampler2D)
 0:96          Constant:
 0:96            0.300000
 0:96            0.300000
 0:96          Constant:
-0:96            1.300000
-0:96          Constant:
 0:96            1 (const int)
 0:96            1 (const int)
 0:97      move second child to first child ( temp 4-component vector of float)
 0:97        's' ( temp 4-component vector of float)
 0:97        textureGatherOffset ( global 4-component vector of float)
-0:97          'samp2D' ( uniform sampler2D)
+0:97          'samp2DA' ( uniform sampler2DArray)
 0:97          Constant:
 0:97            0.300000
 0:97            0.300000
+0:97            0.300000
 0:97          Constant:
 0:97            1 (const int)
 0:97            1 (const int)
-0:97          Constant:
-0:97            2 (const int)
-0:107  Function Definition: bar235( ( global void)
-0:107    Function Parameters: 
-0:109    Sequence
-0:109      Sequence
-0:109        move second child to first child ( temp 3-component vector of int)
-0:109          'a' ( temp 3-component vector of int)
-0:109          textureSize ( global 3-component vector of int)
-0:109            'Sca' ( uniform samplerCubeArray)
-0:109            Constant:
-0:109              3 (const int)
-0:110      Sequence
-0:110        move second child to first child ( temp 4-component vector of float)
-0:110          'b' ( temp 4-component vector of float)
-0:110          texture ( global 4-component vector of float)
-0:110            'Sca' ( uniform samplerCubeArray)
-0:110            'i' ( smooth in 4-component vector of float)
-0:111      Sequence
-0:111        move second child to first child ( temp 4-component vector of int)
-0:111          'c' ( temp 4-component vector of int)
-0:111          texture ( global 4-component vector of int)
-0:111            'Isca' ( uniform isamplerCubeArray)
-0:111            'i' ( smooth in 4-component vector of float)
-0:111            Constant:
-0:111              0.700000
+0:98      move second child to first child ( temp 4-component vector of float)
+0:98        's' ( temp 4-component vector of float)
+0:98        textureGatherOffset ( global 4-component vector of float)
+0:98          'samp2DR' ( uniform sampler2DRect)
+0:98          Constant:
+0:98            0.300000
+0:98            0.300000
+0:98          Constant:
+0:98            1 (const int)
+0:98            1 (const int)
+0:99      move second child to first child ( temp 4-component vector of float)
+0:99        's' ( temp 4-component vector of float)
+0:99        textureGatherOffset ( global 4-component vector of float)
+0:99          'samp2DS' ( uniform sampler2DShadow)
+0:99          Constant:
+0:99            0.300000
+0:99            0.300000
+0:99          Constant:
+0:99            1.300000
+0:99          Constant:
+0:99            1 (const int)
+0:99            1 (const int)
+0:100      move second child to first child ( temp 4-component vector of float)
+0:100        's' ( temp 4-component vector of float)
+0:100        textureGatherOffset ( global 4-component vector of float)
+0:100          'samp2D' ( uniform sampler2D)
+0:100          Constant:
+0:100            0.300000
+0:100            0.300000
+0:100          Constant:
+0:100            1 (const int)
+0:100            1 (const int)
+0:100          Constant:
+0:100            2 (const int)
+0:110  Function Definition: bar235( ( global void)
+0:110    Function Parameters: 
+0:112    Sequence
 0:112      Sequence
-0:112        move second child to first child ( temp 4-component vector of uint)
-0:112          'd' ( temp 4-component vector of uint)
-0:112          texture ( global 4-component vector of uint)
-0:112            'Usca' ( uniform usamplerCubeArray)
-0:112            'i' ( smooth in 4-component vector of float)
-0:114      move second child to first child ( temp 4-component vector of float)
-0:114        'b' ( temp 4-component vector of float)
-0:114        textureLod ( global 4-component vector of float)
-0:114          'Sca' ( uniform samplerCubeArray)
-0:114          'i' ( smooth in 4-component vector of float)
-0:114          Constant:
-0:114            1.700000
-0:115      move second child to first child ( temp 3-component vector of int)
-0:115        'a' ( temp 3-component vector of int)
-0:115        textureSize ( global 3-component vector of int)
-0:115          'Scas' ( uniform samplerCubeArrayShadow)
-0:115          direct index ( temp int)
-0:115            'a' ( temp 3-component vector of int)
-0:115            Constant:
-0:115              0 (const int)
-0:116      Sequence
-0:116        move second child to first child ( temp float)
-0:116          'f' ( temp float)
-0:116          texture ( global float)
-0:116            'Scas' ( uniform samplerCubeArrayShadow)
-0:116            'i' ( smooth in 4-component vector of float)
-0:116            direct index ( temp float)
-0:116              'b' ( temp 4-component vector of float)
-0:116              Constant:
-0:116                1 (const int)
-0:117      move second child to first child ( temp 4-component vector of int)
-0:117        'c' ( temp 4-component vector of int)
-0:117        textureGrad ( global 4-component vector of int)
-0:117          'Isca' ( uniform isamplerCubeArray)
+0:112        move second child to first child ( temp 3-component vector of int)
+0:112          'a' ( temp 3-component vector of int)
+0:112          textureSize ( global 3-component vector of int)
+0:112            'Sca' ( uniform samplerCubeArray)
+0:112            Constant:
+0:112              3 (const int)
+0:113      Sequence
+0:113        move second child to first child ( temp 4-component vector of float)
+0:113          'b' ( temp 4-component vector of float)
+0:113          texture ( global 4-component vector of float)
+0:113            'Sca' ( uniform samplerCubeArray)
+0:113            'i' ( smooth in 4-component vector of float)
+0:114      Sequence
+0:114        move second child to first child ( temp 4-component vector of int)
+0:114          'c' ( temp 4-component vector of int)
+0:114          texture ( global 4-component vector of int)
+0:114            'Isca' ( uniform isamplerCubeArray)
+0:114            'i' ( smooth in 4-component vector of float)
+0:114            Constant:
+0:114              0.700000
+0:115      Sequence
+0:115        move second child to first child ( temp 4-component vector of uint)
+0:115          'd' ( temp 4-component vector of uint)
+0:115          texture ( global 4-component vector of uint)
+0:115            'Usca' ( uniform usamplerCubeArray)
+0:115            'i' ( smooth in 4-component vector of float)
+0:117      move second child to first child ( temp 4-component vector of float)
+0:117        'b' ( temp 4-component vector of float)
+0:117        textureLod ( global 4-component vector of float)
+0:117          'Sca' ( uniform samplerCubeArray)
 0:117          'i' ( smooth in 4-component vector of float)
 0:117          Constant:
-0:117            0.100000
-0:117            0.100000
-0:117            0.100000
-0:117          Constant:
-0:117            0.200000
-0:117            0.200000
-0:117            0.200000
-0:129  Function Definition: bar23444( ( global void)
-0:129    Function Parameters: 
+0:117            1.700000
+0:118      move second child to first child ( temp 3-component vector of int)
+0:118        'a' ( temp 3-component vector of int)
+0:118        textureSize ( global 3-component vector of int)
+0:118          'Scas' ( uniform samplerCubeArrayShadow)
+0:118          direct index ( temp int)
+0:118            'a' ( temp 3-component vector of int)
+0:118            Constant:
+0:118              0 (const int)
+0:119      Sequence
+0:119        move second child to first child ( temp float)
+0:119          'f' ( temp float)
+0:119          texture ( global float)
+0:119            'Scas' ( uniform samplerCubeArrayShadow)
+0:119            'i' ( smooth in 4-component vector of float)
+0:119            direct index ( temp float)
+0:119              'b' ( temp 4-component vector of float)
+0:119              Constant:
+0:119                1 (const int)
+0:120      move second child to first child ( temp 4-component vector of int)
+0:120        'c' ( temp 4-component vector of int)
+0:120        textureGrad ( global 4-component vector of int)
+0:120          'Isca' ( uniform isamplerCubeArray)
+0:120          'i' ( smooth in 4-component vector of float)
+0:120          Constant:
+0:120            0.100000
+0:120            0.100000
+0:120            0.100000
+0:120          Constant:
+0:120            0.200000
+0:120            0.200000
+0:120            0.200000
+0:132  Function Definition: bar23444( ( global void)
+0:132    Function Parameters: 
 0:?     Sequence
-0:132      Sequence
-0:132        move second child to first child ( temp float)
-0:132          'a1' ( temp float)
-0:132          direct index ( temp float)
-0:132            direct index ( temp 3-component vector of float)
-0:132              'm43' ( temp 4X3 matrix of float)
-0:132              Constant:
-0:132                3 (const int)
-0:132            Constant:
-0:132              1 (const int)
-0:134      Sequence
-0:134        move second child to first child ( temp int)
-0:134          'a2' ( temp int)
-0:134          Constant:
-0:134            4 (const int)
-0:135      add second child into first child ( temp int)
-0:135        'a2' ( temp int)
-0:135        Constant:
-0:135          3 (const int)
-0:136      add second child into first child ( temp int)
-0:136        'a2' ( temp int)
-0:136        Constant:
-0:136          3 (const int)
+0:135      Sequence
+0:135        move second child to first child ( temp float)
+0:135          'a1' ( temp float)
+0:135          direct index ( temp float)
+0:135            direct index ( temp 3-component vector of float)
+0:135              'm43' ( temp 4X3 matrix of float)
+0:135              Constant:
+0:135                3 (const int)
+0:135            Constant:
+0:135              1 (const int)
 0:137      Sequence
-0:137        move second child to first child ( temp float)
-0:137          'b' ( const (read only) float)
-0:137          component-wise multiply ( temp float)
-0:137            Constant:
-0:137              2.000000
-0:137            'a1' ( temp float)
-0:138      move second child to first child ( temp float)
-0:138        direct index ( temp float)
-0:138          'a' ( global 3-component vector of float)
-0:138          Constant:
-0:138            0 (const int)
+0:137        move second child to first child ( temp int)
+0:137          'a2' ( temp int)
+0:137          Constant:
+0:137            4 (const int)
+0:138      add second child into first child ( temp int)
+0:138        'a2' ( temp int)
 0:138        Constant:
-0:138          -1.000000
-0:140      Constant:
-0:140        0.000000
-0:141      Constant:
-0:141        0.000000
+0:138          3 (const int)
+0:139      add second child into first child ( temp int)
+0:139        'a2' ( temp int)
+0:139        Constant:
+0:139          3 (const int)
+0:140      Sequence
+0:140        move second child to first child ( temp float)
+0:140          'b' ( const (read only) float)
+0:140          component-wise multiply ( temp float)
+0:140            Constant:
+0:140              2.000000
+0:140            'a1' ( temp float)
+0:141      move second child to first child ( temp float)
+0:141        direct index ( temp float)
+0:141          'a' ( global 3-component vector of float)
+0:141          Constant:
+0:141            0 (const int)
+0:141        Constant:
+0:141          -1.000000
 0:143      Constant:
-0:143        1 (const int)
-0:162  Function Definition: qux2( ( global void)
-0:162    Function Parameters: 
+0:143        0.000000
+0:144      Constant:
+0:144        0.000000
+0:146      Constant:
+0:146        1 (const int)
+0:165  Function Definition: qux2( ( global void)
+0:165    Function Parameters: 
 0:?     Sequence
-0:165      imageAtomicCompSwap ( global int)
-0:165        'iimg2D' (layout( r32i) uniform iimage2D)
-0:165        Construct ivec2 ( temp 2-component vector of int)
-0:165          'i' ( temp int)
-0:165          'i' ( temp int)
-0:165        'i' ( temp int)
-0:165        'i' ( temp int)
-0:166      Sequence
-0:166        move second child to first child ( temp 4-component vector of int)
-0:166          'pos' ( temp 4-component vector of int)
-0:166          imageLoad ( global 4-component vector of int)
-0:166            'iimg2D' (layout( r32i) uniform iimage2D)
-0:166            Construct ivec2 ( temp 2-component vector of int)
-0:166              'i' ( temp int)
-0:166              'i' ( temp int)
+0:168      imageAtomicCompSwap ( global int)
+0:168        'iimg2D' (layout( r32i) uniform iimage2D)
+0:168        Construct ivec2 ( temp 2-component vector of int)
+0:168          'i' ( temp int)
+0:168          'i' ( temp int)
+0:168        'i' ( temp int)
+0:168        'i' ( temp int)
+0:169      Sequence
+0:169        move second child to first child ( temp 4-component vector of int)
+0:169          'pos' ( temp 4-component vector of int)
+0:169          imageLoad ( global 4-component vector of int)
+0:169            'iimg2D' (layout( r32i) uniform iimage2D)
+0:169            Construct ivec2 ( temp 2-component vector of int)
+0:169              'i' ( temp int)
+0:169              'i' ( temp int)
 0:?   Linker Objects
 0:?     'a' ( global 3-component vector of float)
 0:?     'b' ( global float)
@@ -402,13 +415,18 @@
 0:?     'gl_FogFragCoord' ( smooth in float)
 0:?     'iimg2Dbad' (layout( r32i) uniform iimage2D)
 0:?     'iimg2D' (layout( r32i) uniform iimage2D)
+0:?     'ucolor0' (layout( location=3) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=4) uniform 4-component vector of float)
 
 
 Linked fragment stage:
 
 
 Shader version: 130
+Requested GL_ARB_explicit_attrib_location
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_gpu_shader5
+Requested GL_ARB_sample_shading
 Requested GL_ARB_separate_shader_objects
 Requested GL_ARB_shader_image_load_store
 Requested GL_ARB_shading_language_420pack
@@ -457,4 +475,6 @@
 0:?     'gl_FogFragCoord' ( smooth in float)
 0:?     'iimg2Dbad' (layout( r32i) uniform iimage2D)
 0:?     'iimg2D' (layout( r32i) uniform iimage2D)
+0:?     'ucolor0' (layout( location=3) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=4) uniform 4-component vector of float)
 
diff --git a/Test/baseResults/140.frag.out b/Test/baseResults/140.frag.out
index 7ce2170..702718a 100644
--- a/Test/baseResults/140.frag.out
+++ b/Test/baseResults/140.frag.out
@@ -1,14 +1,15 @@
 140.frag
 WARNING: 0:3: varying deprecated in version 130; may be removed in future release
 ERROR: 0:17: '#error' : GL_ES is not set  
-ERROR: 0:20: 'fragment-shader struct input' : not supported for this version or the enabled extensions 
-ERROR: 0:24: 'location' : not supported for this version or the enabled extensions 
-ERROR: 0:24: 'location qualifier on input' : not supported for this version or the enabled extensions 
-ERROR: 0:26: 'location' : not supported for this version or the enabled extensions 
-ERROR: 0:26: 'location qualifier on output' : not supported for this version or the enabled extensions 
-ERROR: 0:40: 'assign' :  l-value required "v" (can't modify shader input)
-ERROR: 0:40: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. 
-ERROR: 8 compilation errors.  No code generated.
+ERROR: 0:21: 'fragment-shader struct input' : not supported for this version or the enabled extensions 
+ERROR: 0:25: 'location' : not supported for this version or the enabled extensions 
+ERROR: 0:25: 'location qualifier on input' : not supported for this version or the enabled extensions 
+ERROR: 0:27: 'location' : not supported for this version or the enabled extensions 
+ERROR: 0:27: 'location qualifier on output' : not supported for this version or the enabled extensions 
+ERROR: 0:41: 'assign' :  l-value required "v" (can't modify shader input)
+ERROR: 0:41: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. 
+ERROR: 0:56: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
+ERROR: 9 compilation errors.  No code generated.
 
 
 Shader version: 140
@@ -25,80 +26,80 @@
 0:12            'gl_ClipDistance' ( smooth in 5-element array of float ClipDistance)
 0:12            Constant:
 0:12              2 (const int)
-0:22  Sequence
-0:22    move second child to first child ( temp float)
-0:22      'patch' ( global float)
-0:22      Constant:
-0:22        3.100000
-0:38  Function Definition: foo( ( global void)
-0:38    Function Parameters: 
-0:40    Sequence
-0:40      Sequence
-0:40        move second child to first child ( temp 2-component vector of float)
-0:40          'r1' ( temp 2-component vector of float)
-0:40          modf ( global 2-component vector of float)
-0:40            vector swizzle ( temp 2-component vector of float)
-0:40              'v' ( smooth in 4-component vector of float)
-0:40              Sequence
-0:40                Constant:
-0:40                  0 (const int)
-0:40                Constant:
-0:40                  1 (const int)
-0:40            vector swizzle ( temp 2-component vector of float)
-0:40              'v' ( smooth in 4-component vector of float)
-0:40              Sequence
-0:40                Constant:
-0:40                  2 (const int)
-0:40                Constant:
-0:40                  3 (const int)
+0:23  Sequence
+0:23    move second child to first child ( temp float)
+0:23      'patch' ( global float)
+0:23      Constant:
+0:23        3.100000
+0:39  Function Definition: foo( ( global void)
+0:39    Function Parameters: 
+0:41    Sequence
 0:41      Sequence
 0:41        move second child to first child ( temp 2-component vector of float)
-0:41          'r2' ( temp 2-component vector of float)
+0:41          'r1' ( temp 2-component vector of float)
 0:41          modf ( global 2-component vector of float)
 0:41            vector swizzle ( temp 2-component vector of float)
-0:41              'o' ( out 4-component vector of float)
+0:41              'v' ( smooth in 4-component vector of float)
 0:41              Sequence
 0:41                Constant:
 0:41                  0 (const int)
 0:41                Constant:
 0:41                  1 (const int)
 0:41            vector swizzle ( temp 2-component vector of float)
-0:41              'o' ( out 4-component vector of float)
+0:41              'v' ( smooth in 4-component vector of float)
 0:41              Sequence
 0:41                Constant:
 0:41                  2 (const int)
 0:41                Constant:
 0:41                  3 (const int)
-0:42      move second child to first child ( temp float)
-0:42        direct index ( temp float)
-0:42          'o' ( out 4-component vector of float)
-0:42          Constant:
-0:42            2 (const int)
-0:42        Function Call: fooi( ( global float)
-0:47  Sequence
-0:47    move second child to first child ( temp float)
-0:47      'i1' ( global float)
-0:47      Test condition and select ( temp float)
-0:47        Condition
-0:47        'gl_FrontFacing' ( gl_FrontFacing bool Face)
-0:47        true case
-0:47        Constant:
-0:47          -2.000000
-0:47        false case
-0:47        Constant:
-0:47          2.000000
+0:42      Sequence
+0:42        move second child to first child ( temp 2-component vector of float)
+0:42          'r2' ( temp 2-component vector of float)
+0:42          modf ( global 2-component vector of float)
+0:42            vector swizzle ( temp 2-component vector of float)
+0:42              'o' ( out 4-component vector of float)
+0:42              Sequence
+0:42                Constant:
+0:42                  0 (const int)
+0:42                Constant:
+0:42                  1 (const int)
+0:42            vector swizzle ( temp 2-component vector of float)
+0:42              'o' ( out 4-component vector of float)
+0:42              Sequence
+0:42                Constant:
+0:42                  2 (const int)
+0:42                Constant:
+0:42                  3 (const int)
+0:43      move second child to first child ( temp float)
+0:43        direct index ( temp float)
+0:43          'o' ( out 4-component vector of float)
+0:43          Constant:
+0:43            2 (const int)
+0:43        Function Call: fooi( ( global float)
 0:48  Sequence
 0:48    move second child to first child ( temp float)
-0:48      'i2' ( global float)
-0:48      Constant:
-0:48        102.000000
-0:50  Function Definition: fooi( ( global float)
-0:50    Function Parameters: 
-0:52    Sequence
-0:52      Branch: Return with expression
-0:52        add ( temp float)
-0:52          'i1' ( global float)
-0:52          'i2' ( global float)
+0:48      'i1' ( global float)
+0:48      Test condition and select ( temp float)
+0:48        Condition
+0:48        'gl_FrontFacing' ( gl_FrontFacing bool Face)
+0:48        true case
+0:48        Constant:
+0:48          -2.000000
+0:48        false case
+0:48        Constant:
+0:48          2.000000
+0:49  Sequence
+0:49    move second child to first child ( temp float)
+0:49      'i2' ( global float)
+0:49      Constant:
+0:49        102.000000
+0:51  Function Definition: fooi( ( global float)
+0:51    Function Parameters: 
+0:53    Sequence
+0:53      Branch: Return with expression
+0:53        add ( temp float)
+0:53          'i1' ( global float)
+0:53          'i2' ( global float)
 0:?   Linker Objects
 0:?     'v' ( smooth in 4-component vector of float)
 0:?     'i' ( smooth in 4-component vector of float)
@@ -131,28 +132,28 @@
 0:12            'gl_ClipDistance' ( smooth in 5-element array of float ClipDistance)
 0:12            Constant:
 0:12              2 (const int)
-0:22  Sequence
-0:22    move second child to first child ( temp float)
-0:22      'patch' ( global float)
-0:22      Constant:
-0:22        3.100000
-0:47  Sequence
-0:47    move second child to first child ( temp float)
-0:47      'i1' ( global float)
-0:47      Test condition and select ( temp float)
-0:47        Condition
-0:47        'gl_FrontFacing' ( gl_FrontFacing bool Face)
-0:47        true case
-0:47        Constant:
-0:47          -2.000000
-0:47        false case
-0:47        Constant:
-0:47          2.000000
+0:23  Sequence
+0:23    move second child to first child ( temp float)
+0:23      'patch' ( global float)
+0:23      Constant:
+0:23        3.100000
 0:48  Sequence
 0:48    move second child to first child ( temp float)
-0:48      'i2' ( global float)
-0:48      Constant:
-0:48        102.000000
+0:48      'i1' ( global float)
+0:48      Test condition and select ( temp float)
+0:48        Condition
+0:48        'gl_FrontFacing' ( gl_FrontFacing bool Face)
+0:48        true case
+0:48        Constant:
+0:48          -2.000000
+0:48        false case
+0:48        Constant:
+0:48          2.000000
+0:49  Sequence
+0:49    move second child to first child ( temp float)
+0:49      'i2' ( global float)
+0:49      Constant:
+0:49        102.000000
 0:?   Linker Objects
 0:?     'v' ( smooth in 4-component vector of float)
 0:?     'i' ( smooth in 4-component vector of float)
diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out
index e51b13d..7672b58 100644
--- a/Test/baseResults/150.frag.out
+++ b/Test/baseResults/150.frag.out
@@ -5,10 +5,28 @@
 ERROR: 0:14: 'gl_FragCoord' : cannot redeclare after use 
 ERROR: 0:50: 'gl_PerFragment' : cannot be used (maybe an instance name is needed) 
 ERROR: 0:50: 'gl_PerFragment' : undeclared identifier 
-ERROR: 6 compilation errors.  No code generated.
+ERROR: 0:53: 'double' : Reserved word. 
+ERROR: 0:53: 'double' : not supported for this version or the enabled extensions 
+ERROR: 0:53: 'double' : must be qualified as flat in
+ERROR: 0:57: '=' :  cannot convert from ' global double' to ' global int'
+ERROR: 0:80: 'floatBitsToInt' : required extension not requested: GL_ARB_shader_bit_encoding
+ERROR: 0:100: 'packSnorm2x16' : required extension not requested: GL_ARB_shading_language_packing
+ERROR: 0:114: 'textureQueryLod' : required extension not requested: GL_ARB_texture_query_lod
+ERROR: 0:115: 'textureQueryLod' : required extension not requested: GL_ARB_texture_query_lod
+ERROR: 0:154: 'textureQueryLod' : no matching overloaded function found 
+ERROR: 0:154: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
+ERROR: 0:155: 'textureQueryLod' : no matching overloaded function found 
+ERROR: 0:155: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
+ERROR: 0:183: 'mix' : required extension not requested: GL_EXT_shader_integer_mix
+ERROR: 19 compilation errors.  No code generated.
 
 
 Shader version: 150
+Requested GL_ARB_gpu_shader_fp64
+Requested GL_ARB_shader_bit_encoding
+Requested GL_ARB_shading_language_packing
+Requested GL_ARB_texture_query_lod
+Requested GL_EXT_shader_integer_mix
 gl_FragCoord pixel center is integer
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
@@ -109,6 +127,295 @@
 0:49      Branch: Return with expression
 0:49        'gl_PrimitiveID' ( flat in int PrimitiveID)
 0:50      'gl_PerFragment' ( temp float)
+0:56  Sequence
+0:56    move second child to first child ( temp double)
+0:56      'type3' ( global double)
+0:56      Constant:
+0:56        2.000000
+0:58  Sequence
+0:58    move second child to first child ( temp double)
+0:58      'absTest2' ( global double)
+0:58      sqrt ( global double)
+0:58        'type3' ( global double)
+0:59  Sequence
+0:59    move second child to first child ( temp double)
+0:59      'absTest3' ( global double)
+0:59      Constant:
+0:59        1.414214
+0:60  Sequence
+0:60    move second child to first child ( temp float)
+0:60      'dk' ( global float)
+0:60      Constant:
+0:60        3.316625
+0:68  Function Definition: bitEncodingPass( ( global void)
+0:68    Function Parameters: 
+0:70    Sequence
+0:70      Sequence
+0:70        move second child to first child ( temp int)
+0:70          'i' ( temp int)
+0:70          floatBitsToInt ( global int)
+0:70            'f' ( global float)
+0:71      Sequence
+0:71        move second child to first child ( temp 4-component vector of uint)
+0:71          'uv11' ( temp 4-component vector of uint)
+0:71          floatBitsToUint ( global 4-component vector of uint)
+0:71            'v4' ( global 4-component vector of float)
+0:72      Sequence
+0:72        move second child to first child ( temp 4-component vector of float)
+0:72          'v14' ( temp 4-component vector of float)
+0:72          intBitsToFloat ( global 4-component vector of float)
+0:72            'iv4a' ( global 4-component vector of int)
+0:73      Sequence
+0:73        move second child to first child ( temp 2-component vector of float)
+0:73          'v15' ( temp 2-component vector of float)
+0:73          uintBitsToFloat ( global 2-component vector of float)
+0:73            'uv2c' ( global 2-component vector of uint)
+0:78  Function Definition: bitEncodingFail( ( global void)
+0:78    Function Parameters: 
+0:80    Sequence
+0:80      Sequence
+0:80        move second child to first child ( temp int)
+0:80          'i' ( temp int)
+0:80          floatBitsToInt ( global int)
+0:80            'f' ( global float)
+0:87  Function Definition: packingPass( ( global void)
+0:87    Function Parameters: 
+0:89    Sequence
+0:89      Sequence
+0:89        move second child to first child ( temp uint)
+0:89          'u19' ( temp uint)
+0:89          packSnorm2x16 ( global uint)
+0:89            'v2a' ( global 2-component vector of float)
+0:90      Sequence
+0:90        move second child to first child ( temp 2-component vector of float)
+0:90          'v20' ( temp 2-component vector of float)
+0:90          unpackSnorm2x16 ( global 2-component vector of float)
+0:90            'uy' ( global uint)
+0:91      Sequence
+0:91        move second child to first child ( temp uint)
+0:91          'u15' ( temp uint)
+0:91          packUnorm2x16 ( global uint)
+0:91            'v2a' ( global 2-component vector of float)
+0:92      Sequence
+0:92        move second child to first child ( temp 2-component vector of float)
+0:92          'v16' ( temp 2-component vector of float)
+0:92          unpackUnorm2x16 ( global 2-component vector of float)
+0:92            'uy' ( global uint)
+0:93      Sequence
+0:93        move second child to first child ( temp uint)
+0:93          'u17' ( temp uint)
+0:93          packHalf2x16 ( global uint)
+0:93            'v2a' ( global 2-component vector of float)
+0:94      Sequence
+0:94        move second child to first child ( temp 2-component vector of float)
+0:94          'v18' ( temp 2-component vector of float)
+0:94          unpackHalf2x16 ( global 2-component vector of float)
+0:94            'uy' ( global uint)
+0:98  Function Definition: packingFail( ( global void)
+0:98    Function Parameters: 
+0:100    Sequence
+0:100      Sequence
+0:100        move second child to first child ( temp uint)
+0:100          'u19' ( temp uint)
+0:100          packSnorm2x16 ( global uint)
+0:100            'v2a' ( global 2-component vector of float)
+0:107  Function Definition: qlodFail( ( global void)
+0:107    Function Parameters: 
+0:?     Sequence
+0:114      move second child to first child ( temp 2-component vector of float)
+0:114        'lod' ( temp 2-component vector of float)
+0:114        textureQueryLod ( global 2-component vector of float)
+0:114          'samp1D' ( uniform sampler1D)
+0:114          'pf' ( temp float)
+0:115      move second child to first child ( temp 2-component vector of float)
+0:115        'lod' ( temp 2-component vector of float)
+0:115        textureQueryLod ( global 2-component vector of float)
+0:115          'samp2Ds' ( uniform sampler2DShadow)
+0:115          'pf2' ( temp 2-component vector of float)
+0:134  Function Definition: qlodPass( ( global void)
+0:134    Function Parameters: 
+0:?     Sequence
+0:141      move second child to first child ( temp 2-component vector of float)
+0:141        'lod' ( temp 2-component vector of float)
+0:141        textureQueryLod ( global 2-component vector of float)
+0:141          'samp1D' ( uniform sampler1D)
+0:141          'pf' ( temp float)
+0:142      move second child to first child ( temp 2-component vector of float)
+0:142        'lod' ( temp 2-component vector of float)
+0:142        textureQueryLod ( global 2-component vector of float)
+0:142          'isamp2D' ( uniform isampler2D)
+0:142          'pf2' ( temp 2-component vector of float)
+0:143      move second child to first child ( temp 2-component vector of float)
+0:143        'lod' ( temp 2-component vector of float)
+0:143        textureQueryLod ( global 2-component vector of float)
+0:143          'usamp3D' ( uniform usampler3D)
+0:143          'pf3' ( temp 3-component vector of float)
+0:144      move second child to first child ( temp 2-component vector of float)
+0:144        'lod' ( temp 2-component vector of float)
+0:144        textureQueryLod ( global 2-component vector of float)
+0:144          'sampCube' ( uniform samplerCube)
+0:144          'pf3' ( temp 3-component vector of float)
+0:145      move second child to first child ( temp 2-component vector of float)
+0:145        'lod' ( temp 2-component vector of float)
+0:145        textureQueryLod ( global 2-component vector of float)
+0:145          'isamp1DA' ( uniform isampler1DArray)
+0:145          'pf' ( temp float)
+0:146      move second child to first child ( temp 2-component vector of float)
+0:146        'lod' ( temp 2-component vector of float)
+0:146        textureQueryLod ( global 2-component vector of float)
+0:146          'usamp2DA' ( uniform usampler2DArray)
+0:146          'pf2' ( temp 2-component vector of float)
+0:148      move second child to first child ( temp 2-component vector of float)
+0:148        'lod' ( temp 2-component vector of float)
+0:148        textureQueryLod ( global 2-component vector of float)
+0:148          'samp1Ds' ( uniform sampler1DShadow)
+0:148          'pf' ( temp float)
+0:149      move second child to first child ( temp 2-component vector of float)
+0:149        'lod' ( temp 2-component vector of float)
+0:149        textureQueryLod ( global 2-component vector of float)
+0:149          'samp2Ds' ( uniform sampler2DShadow)
+0:149          'pf2' ( temp 2-component vector of float)
+0:150      move second child to first child ( temp 2-component vector of float)
+0:150        'lod' ( temp 2-component vector of float)
+0:150        textureQueryLod ( global 2-component vector of float)
+0:150          'sampCubes' ( uniform samplerCubeShadow)
+0:150          'pf3' ( temp 3-component vector of float)
+0:151      move second child to first child ( temp 2-component vector of float)
+0:151        'lod' ( temp 2-component vector of float)
+0:151        textureQueryLod ( global 2-component vector of float)
+0:151          'samp1DAs' ( uniform sampler1DArrayShadow)
+0:151          'pf' ( temp float)
+0:152      move second child to first child ( temp 2-component vector of float)
+0:152        'lod' ( temp 2-component vector of float)
+0:152        textureQueryLod ( global 2-component vector of float)
+0:152          'samp2DAs' ( uniform sampler2DArrayShadow)
+0:152          'pf2' ( temp 2-component vector of float)
+0:154      'lod' ( temp 2-component vector of float)
+0:155      'lod' ( temp 2-component vector of float)
+0:164  Function Definition: testmix( ( global void)
+0:164    Function Parameters: 
+0:166    Sequence
+0:166      Sequence
+0:166        move second child to first child ( temp int)
+0:166          'ival' ( temp int)
+0:166          mix ( global int)
+0:166            'x' ( global int)
+0:166            'y' ( global int)
+0:166            'b' ( global bool)
+0:167      Sequence
+0:167        move second child to first child ( temp 2-component vector of int)
+0:167          'iv2' ( temp 2-component vector of int)
+0:167          mix ( global 2-component vector of int)
+0:167            Construct ivec2 ( temp 2-component vector of int)
+0:167              'x' ( global int)
+0:167            Construct ivec2 ( temp 2-component vector of int)
+0:167              'y' ( global int)
+0:167            Construct bvec2 ( temp 2-component vector of bool)
+0:167              'b' ( global bool)
+0:168      Sequence
+0:168        move second child to first child ( temp 3-component vector of int)
+0:168          'iv3' ( temp 3-component vector of int)
+0:168          mix ( global 3-component vector of int)
+0:168            Construct ivec3 ( temp 3-component vector of int)
+0:168              'x' ( global int)
+0:168            Construct ivec3 ( temp 3-component vector of int)
+0:168              'y' ( global int)
+0:168            Construct bvec3 ( temp 3-component vector of bool)
+0:168              'b' ( global bool)
+0:169      Sequence
+0:169        move second child to first child ( temp 4-component vector of int)
+0:169          'iv4' ( temp 4-component vector of int)
+0:169          mix ( global 4-component vector of int)
+0:169            Construct ivec4 ( temp 4-component vector of int)
+0:169              'x' ( global int)
+0:169            Construct ivec4 ( temp 4-component vector of int)
+0:169              'x' ( global int)
+0:169            Construct bvec4 ( temp 4-component vector of bool)
+0:169              'b' ( global bool)
+0:170      Sequence
+0:170        move second child to first child ( temp uint)
+0:170          'uiv' ( temp uint)
+0:170          mix ( global uint)
+0:170            'z' ( global uint)
+0:170            'w' ( global uint)
+0:170            'b' ( global bool)
+0:171      Sequence
+0:171        move second child to first child ( temp 2-component vector of uint)
+0:171          'uv2' ( temp 2-component vector of uint)
+0:171          mix ( global 2-component vector of uint)
+0:171            Construct uvec2 ( temp 2-component vector of uint)
+0:171              'z' ( global uint)
+0:171            Construct uvec2 ( temp 2-component vector of uint)
+0:171              'z' ( global uint)
+0:171            Construct bvec2 ( temp 2-component vector of bool)
+0:171              'b' ( global bool)
+0:172      Sequence
+0:172        move second child to first child ( temp 3-component vector of uint)
+0:172          'uv3' ( temp 3-component vector of uint)
+0:172          mix ( global 3-component vector of uint)
+0:172            Construct uvec3 ( temp 3-component vector of uint)
+0:172              'z' ( global uint)
+0:172            Construct uvec3 ( temp 3-component vector of uint)
+0:172              'z' ( global uint)
+0:172            Construct bvec3 ( temp 3-component vector of bool)
+0:172              'b' ( global bool)
+0:173      Sequence
+0:173        move second child to first child ( temp 4-component vector of uint)
+0:173          'uv4' ( temp 4-component vector of uint)
+0:173          mix ( global 4-component vector of uint)
+0:173            Construct uvec4 ( temp 4-component vector of uint)
+0:173              'z' ( global uint)
+0:173            Construct uvec4 ( temp 4-component vector of uint)
+0:173              'z' ( global uint)
+0:173            Construct bvec4 ( temp 4-component vector of bool)
+0:173              'b' ( global bool)
+0:174      Sequence
+0:174        move second child to first child ( temp bool)
+0:174          'bv' ( temp bool)
+0:174          mix ( global bool)
+0:174            'b1' ( global bool)
+0:174            'b2' ( global bool)
+0:174            'b' ( global bool)
+0:175      Sequence
+0:175        move second child to first child ( temp 2-component vector of bool)
+0:175          'bv2' ( temp 2-component vector of bool)
+0:175          mix ( global 2-component vector of bool)
+0:175            Construct bvec2 ( temp 2-component vector of bool)
+0:175              'b1' ( global bool)
+0:175            Construct bvec2 ( temp 2-component vector of bool)
+0:175              'b2' ( global bool)
+0:175            Construct bvec2 ( temp 2-component vector of bool)
+0:175              'b' ( global bool)
+0:176      Sequence
+0:176        move second child to first child ( temp 3-component vector of bool)
+0:176          'bv3' ( temp 3-component vector of bool)
+0:176          mix ( global 3-component vector of bool)
+0:176            Construct bvec3 ( temp 3-component vector of bool)
+0:176              'b1' ( global bool)
+0:176            Construct bvec3 ( temp 3-component vector of bool)
+0:176              'b2' ( global bool)
+0:176            Construct bvec3 ( temp 3-component vector of bool)
+0:176              'b' ( global bool)
+0:177      Sequence
+0:177        move second child to first child ( temp 4-component vector of bool)
+0:177          'bv4' ( temp 4-component vector of bool)
+0:177          mix ( global 4-component vector of bool)
+0:177            Construct bvec4 ( temp 4-component vector of bool)
+0:177              'b1' ( global bool)
+0:177            Construct bvec4 ( temp 4-component vector of bool)
+0:177              'b2' ( global bool)
+0:177            Construct bvec4 ( temp 4-component vector of bool)
+0:177              'b' ( global bool)
+0:181  Function Definition: testmixFail( ( global void)
+0:181    Function Parameters: 
+0:183    Sequence
+0:183      Sequence
+0:183        move second child to first child ( temp int)
+0:183          'ival' ( temp int)
+0:183          mix ( global int)
+0:183            'x' ( global int)
+0:183            'y' ( global int)
+0:183            'b' ( global bool)
 0:?   Linker Objects
 0:?     'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
 0:?     'foo' ( smooth in 4-component vector of float)
@@ -123,12 +430,50 @@
 0:?     'p2' ( flat in 2-component vector of int)
 0:?     'p3' ( flat in 3-component vector of int)
 0:?     'samp' ( flat in int)
+0:?     'type1' ( smooth in double)
+0:?     'type2' ( global double)
+0:?     'type3' ( global double)
+0:?     'absTest' ( global int)
+0:?     'absTest2' ( global double)
+0:?     'absTest3' ( global double)
+0:?     'dk' ( global float)
+0:?     'f' ( global float)
+0:?     'v4' ( global 4-component vector of float)
+0:?     'iv4a' ( global 4-component vector of int)
+0:?     'uv2c' ( global 2-component vector of uint)
+0:?     'v2a' ( global 2-component vector of float)
+0:?     'uy' ( global uint)
+0:?     'samp1D' ( uniform sampler1D)
+0:?     'samp2Ds' ( uniform sampler2DShadow)
+0:?     'isamp2D' ( uniform isampler2D)
+0:?     'usamp3D' ( uniform usampler3D)
+0:?     'sampCube' ( uniform samplerCube)
+0:?     'isamp1DA' ( uniform isampler1DArray)
+0:?     'usamp2DA' ( uniform usampler2DArray)
+0:?     'samp1Ds' ( uniform sampler1DShadow)
+0:?     'sampCubes' ( uniform samplerCubeShadow)
+0:?     'samp1DAs' ( uniform sampler1DArrayShadow)
+0:?     'samp2DAs' ( uniform sampler2DArrayShadow)
+0:?     'sampBuf' ( uniform samplerBuffer)
+0:?     'sampRect' ( uniform sampler2DRect)
+0:?     'b1' ( global bool)
+0:?     'b2' ( global bool)
+0:?     'b' ( global bool)
+0:?     'x' ( global int)
+0:?     'y' ( global int)
+0:?     'z' ( global uint)
+0:?     'w' ( global uint)
 
 
 Linked fragment stage:
 
 
 Shader version: 150
+Requested GL_ARB_gpu_shader_fp64
+Requested GL_ARB_shader_bit_encoding
+Requested GL_ARB_shading_language_packing
+Requested GL_ARB_texture_query_lod
+Requested GL_EXT_shader_integer_mix
 gl_FragCoord pixel center is integer
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
@@ -144,6 +489,26 @@
 0:18      'patch' ( global float)
 0:18      Constant:
 0:18        3.100000
+0:56  Sequence
+0:56    move second child to first child ( temp double)
+0:56      'type3' ( global double)
+0:56      Constant:
+0:56        2.000000
+0:58  Sequence
+0:58    move second child to first child ( temp double)
+0:58      'absTest2' ( global double)
+0:58      sqrt ( global double)
+0:58        'type3' ( global double)
+0:59  Sequence
+0:59    move second child to first child ( temp double)
+0:59      'absTest3' ( global double)
+0:59      Constant:
+0:59        1.414214
+0:60  Sequence
+0:60    move second child to first child ( temp float)
+0:60      'dk' ( global float)
+0:60      Constant:
+0:60        3.316625
 0:?   Linker Objects
 0:?     'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
 0:?     'foo' ( smooth in 4-component vector of float)
@@ -158,4 +523,37 @@
 0:?     'p2' ( flat in 2-component vector of int)
 0:?     'p3' ( flat in 3-component vector of int)
 0:?     'samp' ( flat in int)
+0:?     'type1' ( smooth in double)
+0:?     'type2' ( global double)
+0:?     'type3' ( global double)
+0:?     'absTest' ( global int)
+0:?     'absTest2' ( global double)
+0:?     'absTest3' ( global double)
+0:?     'dk' ( global float)
+0:?     'f' ( global float)
+0:?     'v4' ( global 4-component vector of float)
+0:?     'iv4a' ( global 4-component vector of int)
+0:?     'uv2c' ( global 2-component vector of uint)
+0:?     'v2a' ( global 2-component vector of float)
+0:?     'uy' ( global uint)
+0:?     'samp1D' ( uniform sampler1D)
+0:?     'samp2Ds' ( uniform sampler2DShadow)
+0:?     'isamp2D' ( uniform isampler2D)
+0:?     'usamp3D' ( uniform usampler3D)
+0:?     'sampCube' ( uniform samplerCube)
+0:?     'isamp1DA' ( uniform isampler1DArray)
+0:?     'usamp2DA' ( uniform usampler2DArray)
+0:?     'samp1Ds' ( uniform sampler1DShadow)
+0:?     'sampCubes' ( uniform samplerCubeShadow)
+0:?     'samp1DAs' ( uniform sampler1DArrayShadow)
+0:?     'samp2DAs' ( uniform sampler2DArrayShadow)
+0:?     'sampBuf' ( uniform samplerBuffer)
+0:?     'sampRect' ( uniform sampler2DRect)
+0:?     'b1' ( global bool)
+0:?     'b2' ( global bool)
+0:?     'b' ( global bool)
+0:?     'x' ( global int)
+0:?     'y' ( global int)
+0:?     'z' ( global uint)
+0:?     'w' ( global uint)
 
diff --git a/Test/baseResults/150.vert.out b/Test/baseResults/150.vert.out
index 504160d..05a1db9 100644
--- a/Test/baseResults/150.vert.out
+++ b/Test/baseResults/150.vert.out
@@ -1,10 +1,14 @@
 150.vert
 ERROR: 0:26: 'a' : cannot redeclare a user-block member array 
+ERROR: 0:28: 'double' : Reserved word. 
+ERROR: 0:28: 'double' : not supported for this version or the enabled extensions 
+ERROR: 0:28: 'vertex-shader `double` type input' : not supported for this version or the enabled extensions 
 ERROR: 0:3001: '#error' : line of this error should be 3001  
-ERROR: 2 compilation errors.  No code generated.
+ERROR: 5 compilation errors.  No code generated.
 
 
 Shader version: 150
+Requested GL_ARB_vertex_attrib_64bit
 ERROR: node is still EOpNull!
 0:13  Function Definition: main( ( global void)
 0:13    Function Parameters: 
@@ -43,6 +47,20 @@
 0:?     'iv4' ( in 4-component vector of float)
 0:?     'ps' ( uniform float)
 0:?     'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform unsized 1-element array of int a})
+0:?     'dvarerr' ( in double)
+0:?     'dvar' ( in double)
+0:?     'dv2var' ( in 2-component vector of double)
+0:?     'dv3var' ( in 3-component vector of double)
+0:?     'dv4var' ( in 4-component vector of double)
+0:?     'dmat2var' ( in 2X2 matrix of double)
+0:?     'dmat3var' ( in 3X3 matrix of double)
+0:?     'dmat4var' ( in 4X4 matrix of double)
+0:?     'dmat23var' ( in 2X3 matrix of double)
+0:?     'dmat24var' ( in 2X4 matrix of double)
+0:?     'dmat32var' ( in 3X2 matrix of double)
+0:?     'dmat34var' ( in 3X4 matrix of double)
+0:?     'dmat42var' ( in 4X2 matrix of double)
+0:?     'dmat43var' ( in 4X3 matrix of double)
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
@@ -52,6 +70,7 @@
 ERROR: Linking vertex stage: Can only use one of gl_ClipDistance or gl_ClipVertex (gl_ClipDistance is preferred)
 
 Shader version: 150
+Requested GL_ARB_vertex_attrib_64bit
 ERROR: node is still EOpNull!
 0:13  Function Definition: main( ( global void)
 0:13    Function Parameters: 
@@ -90,6 +109,20 @@
 0:?     'iv4' ( in 4-component vector of float)
 0:?     'ps' ( uniform float)
 0:?     'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform 1-element array of int a})
+0:?     'dvarerr' ( in double)
+0:?     'dvar' ( in double)
+0:?     'dv2var' ( in 2-component vector of double)
+0:?     'dv3var' ( in 3-component vector of double)
+0:?     'dv4var' ( in 4-component vector of double)
+0:?     'dmat2var' ( in 2X2 matrix of double)
+0:?     'dmat3var' ( in 3X3 matrix of double)
+0:?     'dmat4var' ( in 4X4 matrix of double)
+0:?     'dmat23var' ( in 2X3 matrix of double)
+0:?     'dmat24var' ( in 2X4 matrix of double)
+0:?     'dmat32var' ( in 3X2 matrix of double)
+0:?     'dmat34var' ( in 3X4 matrix of double)
+0:?     'dmat42var' ( in 4X2 matrix of double)
+0:?     'dmat43var' ( in 4X3 matrix of double)
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 
diff --git a/Test/baseResults/300.frag.out b/Test/baseResults/300.frag.out
index ee1b8a5..50a6b07 100644
--- a/Test/baseResults/300.frag.out
+++ b/Test/baseResults/300.frag.out
@@ -40,15 +40,20 @@
 ERROR: 0:129: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
 ERROR: 0:148: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) 
 ERROR: 0:150: 'early_fragment_tests' : not supported for this version or the enabled extensions 
-ERROR: 0:156: 'invariant' : can only apply to an output 
-ERROR: 0:157: 'invariant' : can only apply to an output 
-ERROR: 0:158: 'invariant' : can only apply to an output 
-ERROR: 0:160: 'imageBuffer' : Reserved word. 
-ERROR: 0:160: '' :  syntax error, unexpected IMAGEBUFFER, expecting COMMA or SEMICOLON
-ERROR: 46 compilation errors.  No code generated.
+ERROR: 0:177: 'specific signature of builtin mix' : required extension not requested: GL_EXT_shader_integer_mix
+ERROR: 0:181: 'index layout qualifier on fragment output' : not supported for this version or the enabled extensions 
+ERROR: 0:183: 'index' : value must be 0 or 1 
+ERROR: 0:189: 'invariant' : can only apply to an output 
+ERROR: 0:190: 'invariant' : can only apply to an output 
+ERROR: 0:191: 'invariant' : can only apply to an output 
+ERROR: 0:193: 'imageBuffer' : Reserved word. 
+ERROR: 0:193: '' :  syntax error, unexpected IMAGEBUFFER, expecting COMMA or SEMICOLON
+ERROR: 49 compilation errors.  No code generated.
 
 
 Shader version: 300
+Requested GL_EXT_blend_func_extended
+Requested GL_EXT_shader_integer_mix
 using early_fragment_tests
 ERROR: node is still EOpNull!
 0:53  Function Definition: main( ( global void)
@@ -362,6 +367,130 @@
 0:145            21.000000
 0:145            22.000000
 0:145            33.000000
+0:158  Function Definition: testmix( ( global void)
+0:158    Function Parameters: 
+0:160    Sequence
+0:160      Sequence
+0:160        move second child to first child ( temp mediump int)
+0:160          'ival' ( temp mediump int)
+0:160          mix ( global mediump int)
+0:160            'x' ( global mediump int)
+0:160            'y' ( global mediump int)
+0:160            'b' ( global bool)
+0:161      Sequence
+0:161        move second child to first child ( temp mediump 2-component vector of int)
+0:161          'iv2' ( temp mediump 2-component vector of int)
+0:161          mix ( global mediump 2-component vector of int)
+0:161            Construct ivec2 ( temp mediump 2-component vector of int)
+0:161              'x' ( global mediump int)
+0:161            Construct ivec2 ( temp mediump 2-component vector of int)
+0:161              'y' ( global mediump int)
+0:161            Construct bvec2 ( temp 2-component vector of bool)
+0:161              'b' ( global bool)
+0:162      Sequence
+0:162        move second child to first child ( temp mediump 3-component vector of int)
+0:162          'iv3' ( temp mediump 3-component vector of int)
+0:162          mix ( global mediump 3-component vector of int)
+0:162            Construct ivec3 ( temp mediump 3-component vector of int)
+0:162              'x' ( global mediump int)
+0:162            Construct ivec3 ( temp mediump 3-component vector of int)
+0:162              'y' ( global mediump int)
+0:162            Construct bvec3 ( temp 3-component vector of bool)
+0:162              'b' ( global bool)
+0:163      Sequence
+0:163        move second child to first child ( temp mediump 4-component vector of int)
+0:163          'iv4' ( temp mediump 4-component vector of int)
+0:163          mix ( global mediump 4-component vector of int)
+0:163            Construct ivec4 ( temp mediump 4-component vector of int)
+0:163              'x' ( global mediump int)
+0:163            Construct ivec4 ( temp mediump 4-component vector of int)
+0:163              'x' ( global mediump int)
+0:163            Construct bvec4 ( temp 4-component vector of bool)
+0:163              'b' ( global bool)
+0:164      Sequence
+0:164        move second child to first child ( temp mediump uint)
+0:164          'uiv' ( temp mediump uint)
+0:164          mix ( global mediump uint)
+0:164            'z' ( global mediump uint)
+0:164            'w' ( global mediump uint)
+0:164            'b' ( global bool)
+0:165      Sequence
+0:165        move second child to first child ( temp mediump 2-component vector of uint)
+0:165          'uv2' ( temp mediump 2-component vector of uint)
+0:165          mix ( global mediump 2-component vector of uint)
+0:165            Construct uvec2 ( temp mediump 2-component vector of uint)
+0:165              'z' ( global mediump uint)
+0:165            Construct uvec2 ( temp mediump 2-component vector of uint)
+0:165              'z' ( global mediump uint)
+0:165            Construct bvec2 ( temp 2-component vector of bool)
+0:165              'b' ( global bool)
+0:166      Sequence
+0:166        move second child to first child ( temp mediump 3-component vector of uint)
+0:166          'uv3' ( temp mediump 3-component vector of uint)
+0:166          mix ( global mediump 3-component vector of uint)
+0:166            Construct uvec3 ( temp mediump 3-component vector of uint)
+0:166              'z' ( global mediump uint)
+0:166            Construct uvec3 ( temp mediump 3-component vector of uint)
+0:166              'z' ( global mediump uint)
+0:166            Construct bvec3 ( temp 3-component vector of bool)
+0:166              'b' ( global bool)
+0:167      Sequence
+0:167        move second child to first child ( temp mediump 4-component vector of uint)
+0:167          'uv4' ( temp mediump 4-component vector of uint)
+0:167          mix ( global mediump 4-component vector of uint)
+0:167            Construct uvec4 ( temp mediump 4-component vector of uint)
+0:167              'z' ( global mediump uint)
+0:167            Construct uvec4 ( temp mediump 4-component vector of uint)
+0:167              'z' ( global mediump uint)
+0:167            Construct bvec4 ( temp 4-component vector of bool)
+0:167              'b' ( global bool)
+0:168      Sequence
+0:168        move second child to first child ( temp bool)
+0:168          'bv' ( temp bool)
+0:168          mix ( global bool)
+0:168            'b1' ( global bool)
+0:168            'b2' ( global bool)
+0:168            'b' ( global bool)
+0:169      Sequence
+0:169        move second child to first child ( temp 2-component vector of bool)
+0:169          'bv2' ( temp 2-component vector of bool)
+0:169          mix ( global 2-component vector of bool)
+0:169            Construct bvec2 ( temp 2-component vector of bool)
+0:169              'b1' ( global bool)
+0:169            Construct bvec2 ( temp 2-component vector of bool)
+0:169              'b2' ( global bool)
+0:169            Construct bvec2 ( temp 2-component vector of bool)
+0:169              'b' ( global bool)
+0:170      Sequence
+0:170        move second child to first child ( temp 3-component vector of bool)
+0:170          'bv3' ( temp 3-component vector of bool)
+0:170          mix ( global 3-component vector of bool)
+0:170            Construct bvec3 ( temp 3-component vector of bool)
+0:170              'b1' ( global bool)
+0:170            Construct bvec3 ( temp 3-component vector of bool)
+0:170              'b2' ( global bool)
+0:170            Construct bvec3 ( temp 3-component vector of bool)
+0:170              'b' ( global bool)
+0:171      Sequence
+0:171        move second child to first child ( temp 4-component vector of bool)
+0:171          'bv4' ( temp 4-component vector of bool)
+0:171          mix ( global 4-component vector of bool)
+0:171            Construct bvec4 ( temp 4-component vector of bool)
+0:171              'b1' ( global bool)
+0:171            Construct bvec4 ( temp 4-component vector of bool)
+0:171              'b2' ( global bool)
+0:171            Construct bvec4 ( temp 4-component vector of bool)
+0:171              'b' ( global bool)
+0:175  Function Definition: testmixFail( ( global void)
+0:175    Function Parameters: 
+0:177    Sequence
+0:177      Sequence
+0:177        move second child to first child ( temp mediump int)
+0:177          'ival' ( temp mediump int)
+0:177          mix ( global mediump int)
+0:177            'x' ( global mediump int)
+0:177            'y' ( global mediump int)
+0:177            'b' ( global bool)
 0:?   Linker Objects
 0:?     's2D' ( uniform lowp sampler2D)
 0:?     's3D' ( uniform lowp sampler3D)
@@ -397,6 +526,15 @@
 0:?     'colors' ( out 4-element array of lowp 4-component vector of float)
 0:?     'st1' ( uniform structure{ global mediump int i,  global lowp sampler2D s})
 0:?     'st2' ( uniform structure{ global mediump int i,  global lowp sampler2D s})
+0:?     'b1' ( global bool)
+0:?     'b2' ( global bool)
+0:?     'b' ( global bool)
+0:?     'x' ( global mediump int)
+0:?     'y' ( global mediump int)
+0:?     'z' ( global mediump uint)
+0:?     'w' ( global mediump uint)
+0:?     'outVarFail' (layout( location=0 index=1) out lowp 4-component vector of float)
+0:?     'outVarPass' (layout( location=0 index=0) out lowp 4-component vector of float)
 0:?     'fooinv' ( invariant smooth in lowp 4-component vector of float)
 
 
@@ -405,6 +543,8 @@
 ERROR: Linking fragment stage: when more than one fragment shader output, all must have location qualifiers
 
 Shader version: 300
+Requested GL_EXT_blend_func_extended
+Requested GL_EXT_shader_integer_mix
 using early_fragment_tests
 ERROR: node is still EOpNull!
 0:53  Function Definition: main( ( global void)
@@ -628,5 +768,14 @@
 0:?     'colors' ( out 4-element array of lowp 4-component vector of float)
 0:?     'st1' ( uniform structure{ global mediump int i,  global lowp sampler2D s})
 0:?     'st2' ( uniform structure{ global mediump int i,  global lowp sampler2D s})
+0:?     'b1' ( global bool)
+0:?     'b2' ( global bool)
+0:?     'b' ( global bool)
+0:?     'x' ( global mediump int)
+0:?     'y' ( global mediump int)
+0:?     'z' ( global mediump uint)
+0:?     'w' ( global mediump uint)
+0:?     'outVarFail' (layout( location=0 index=1) out lowp 4-component vector of float)
+0:?     'outVarPass' (layout( location=0 index=0) out lowp 4-component vector of float)
 0:?     'fooinv' ( invariant smooth in lowp 4-component vector of float)
 
diff --git a/Test/baseResults/300BuiltIns.frag.out b/Test/baseResults/300BuiltIns.frag.out
index 84d4d08..54ecfa5 100644
--- a/Test/baseResults/300BuiltIns.frag.out
+++ b/Test/baseResults/300BuiltIns.frag.out
@@ -1,9 +1,9 @@
 300BuiltIns.frag
 ERROR: 0:6: 'float' : type requires declaration of default precision qualifier 
 ERROR: 0:70: 'noise2' : no matching overloaded function found 
-ERROR: 0:72: 't__' : identifiers containing consecutive underscores ("__") are reserved, and an error if version <= 300 
-ERROR: 0:75: '#define' : names containing consecutive underscores are reserved, and an error if version <= 300: __D
-ERROR: 4 compilation errors.  No code generated.
+WARNING: 0:72: 't__' : identifiers containing consecutive underscores ("__") are reserved 
+WARNING: 0:75: '#define' : names containing consecutive underscores are reserved: __D
+ERROR: 2 compilation errors.  No code generated.
 
 
 Shader version: 300
diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out
index fab3d46..9fe93e9 100644
--- a/Test/baseResults/310.frag.out
+++ b/Test/baseResults/310.frag.out
@@ -134,12 +134,18 @@
 ERROR: 0:431: 'fragment-shader array-of-array output' : not supported with this profile: es
 ERROR: 0:435: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group
 ERROR: 0:436: 'gl_ViewIndex' : required extension not requested: GL_EXT_multiview
-ERROR: 127 compilation errors.  No code generated.
+ERROR: 0:461: 'func' : overloaded functions must have the same return type 
+ERROR: 0:461: 'func' : function already has a body 
+ERROR: 0:463: 'return' : void function cannot return a value 
+ERROR: 0:472: '=' :  cannot convert from ' temp mediump uint' to ' temp mediump int'
+ERROR: 0:485: '=' :  cannot convert from ' global mediump int' to ' temp mediump uint'
+ERROR: 132 compilation errors.  No code generated.
 
 
 Shader version: 310
 Requested GL_EXT_device_group
 Requested GL_EXT_multiview
+Requested GL_EXT_shader_implicit_conversions
 Requested GL_EXT_shader_io_blocks
 Requested GL_EXT_texture_cube_map_array
 Requested GL_KHR_blend_equation_advanced
@@ -939,6 +945,80 @@
 0:449    Sequence
 0:449      'gl_DeviceIndex' ( flat in highp int DeviceIndex)
 0:450      'gl_ViewIndex' ( flat in highp int ViewIndex)
+0:456  Function Definition: func(u1;vu4; ( global void)
+0:456    Function Parameters: 
+0:456      'a' ( in mediump uint)
+0:456      'b' ( in mediump 4-component vector of uint)
+0:461  Function Definition: func(u1;vu4; ( global mediump int)
+0:461    Function Parameters: 
+0:461      'a' ( in mediump uint)
+0:461      'b' ( in mediump 4-component vector of uint)
+0:463    Sequence
+0:463      Branch: Return
+0:468  Function Definition: testimplicit( ( global void)
+0:468    Function Parameters: 
+0:470    Sequence
+0:470      Sequence
+0:470        move second child to first child ( temp mediump uint)
+0:470          'a' ( temp mediump uint)
+0:470          Convert int to uint ( temp mediump uint)
+0:470            'b' ( global mediump int)
+0:471      Sequence
+0:471        move second child to first child ( temp mediump 4-component vector of float)
+0:471          'col' ( temp mediump 4-component vector of float)
+0:471          Constant:
+0:471            1.000000
+0:471            2.000000
+0:471            3.000000
+0:471            4.000000
+0:475      Sequence
+0:475        move second child to first child ( temp mediump uint)
+0:475          'c' ( temp mediump uint)
+0:475          Convert int to uint ( temp mediump uint)
+0:475            component-wise multiply ( temp mediump int)
+0:475              'b' ( temp mediump int)
+0:475              Constant:
+0:475                3 (const int)
+0:476      Sequence
+0:476        move second child to first child ( temp mediump uint)
+0:476          'd' ( temp mediump uint)
+0:476          component-wise multiply ( temp mediump uint)
+0:476            Convert int to uint ( temp mediump uint)
+0:476              'b' ( temp mediump int)
+0:476            Constant:
+0:476              3 (const uint)
+0:477      Sequence
+0:477        move second child to first child ( temp mediump uint)
+0:477          'e' ( temp mediump uint)
+0:477          Convert int to uint ( temp mediump uint)
+0:477            mod ( temp mediump int)
+0:477              'b' ( temp mediump int)
+0:477              Constant:
+0:477                3 (const int)
+0:478      Sequence
+0:478        move second child to first child ( temp mediump uint)
+0:478          'f' ( temp mediump uint)
+0:478          Test condition and select ( temp mediump uint)
+0:478            Condition
+0:478            Compare Greater Than ( temp bool)
+0:478              'b' ( temp mediump int)
+0:478              Constant:
+0:478                3 (const int)
+0:478            true case
+0:478            Convert int to uint ( temp uint)
+0:478              'b' ( temp mediump int)
+0:478            false case
+0:478            'c' ( temp mediump uint)
+0:479      Function Call: func(u1;vu4; ( global void)
+0:479        Convert int to uint ( temp uint)
+0:479          'b' ( temp mediump int)
+0:479        Constant:
+0:479          1 (const uint)
+0:479          2 (const uint)
+0:479          3 (const uint)
+0:479          4 (const uint)
+0:484  Function Definition: testimplicitFail( ( global void)
+0:484    Function Parameters: 
 0:?   Linker Objects
 0:?     'gl_FragCoord' ( smooth in mediump 4-component vector of float)
 0:?     'v3' (layout( location=2) smooth in mediump 3-component vector of float)
@@ -1033,6 +1113,7 @@
 0:?     'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float)
 0:?     'badout' ( out mediump 4-component vector of float)
 0:?     'outAA' ( out 2-element array of 2-element array of mediump 4-component vector of float)
+0:?     'b' ( global mediump int)
 
 
 Linked fragment stage:
@@ -1042,6 +1123,7 @@
 Shader version: 310
 Requested GL_EXT_device_group
 Requested GL_EXT_multiview
+Requested GL_EXT_shader_implicit_conversions
 Requested GL_EXT_shader_io_blocks
 Requested GL_EXT_texture_cube_map_array
 Requested GL_KHR_blend_equation_advanced
@@ -1244,4 +1326,5 @@
 0:?     'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float)
 0:?     'badout' ( out mediump 4-component vector of float)
 0:?     'outAA' ( out 2-element array of 2-element array of mediump 4-component vector of float)
+0:?     'b' ( global mediump int)
 
diff --git a/Test/baseResults/330.frag.out b/Test/baseResults/330.frag.out
index 36ba7a2..e919b5b 100644
--- a/Test/baseResults/330.frag.out
+++ b/Test/baseResults/330.frag.out
@@ -35,16 +35,15 @@
 ERROR: 0:126: 'location/component/index' : cannot declare a default, use a full declaration 
 ERROR: 0:127: 'location/component/index' : cannot declare a default, use a full declaration 
 ERROR: 0:128: 'output block' : not supported in this stage: fragment
-ERROR: 0:140: 'textureQueryLod' : no matching overloaded function found 
-ERROR: 0:140: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
-ERROR: 0:141: 'textureQueryLod' : no matching overloaded function found 
-ERROR: 0:141: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
-ERROR: 0:152: 'index' : value must be 0 or 1 
-ERROR: 41 compilation errors.  No code generated.
+ERROR: 0:138: 'index' : value must be 0 or 1 
+ERROR: 0:140: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
+ERROR: 0:146: 'location' : cannot apply to uniform or buffer block 
+ERROR: 39 compilation errors.  No code generated.
 
 
 Shader version: 330
 Requested GL_ARB_enhanced_layouts
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_separate_shader_objects
 ERROR: node is still EOpNull!
 0:8  Function Definition: main( ( global void)
@@ -77,18 +76,13 @@
 0:24      move second child to first child ( temp 4-component vector of float)
 0:24        'outVar' (layout( location=0 index=0) out 4-component vector of float)
 0:24        'inVar' ( smooth in 4-component vector of float)
-0:133  Function Definition: qlod( ( global void)
+0:133  Function Definition: fooKeyMem( ( global void)
 0:133    Function Parameters: 
-0:?     Sequence
-0:140      'lod' ( temp 2-component vector of float)
-0:141      'lod' ( temp 2-component vector of float)
-0:147  Function Definition: fooKeyMem( ( global void)
-0:147    Function Parameters: 
-0:149    Sequence
-0:149      precise: direct index for structure ( global int)
-0:149        'KeyMem' ( global structure{ global int precise})
-0:149        Constant:
-0:149          0 (const int)
+0:135    Sequence
+0:135      precise: direct index for structure ( global int)
+0:135        'KeyMem' ( global structure{ global int precise})
+0:135        Constant:
+0:135          0 (const int)
 0:?   Linker Objects
 0:?     'inVar' ( smooth in 4-component vector of float)
 0:?     'outVar' (layout( location=0 index=0) out 4-component vector of float)
@@ -121,11 +115,12 @@
 0:?     'outVar4' (layout( location=0 index=1) out 4-component vector of float)
 0:?     'indexIn' (layout( location=27 index=0) smooth in 4-component vector of float)
 0:?     'indexBlockI' (layout( location=26 index=0) out block{ out int a})
-0:?     'samp1D' ( uniform sampler1D)
-0:?     'samp2Ds' ( uniform sampler2DShadow)
 0:?     'precise' ( global int)
 0:?     'KeyMem' ( global structure{ global int precise})
 0:?     'outIndex2' (layout( location=28 index=0) out 4-component vector of float)
+0:?     'ucolor0' (layout( location=4) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=5) uniform 4-component vector of float)
+0:?     'colorsBuffer' (layout( location=6 column_major shared) uniform block{layout( column_major shared) uniform 128-element array of 4-component vector of float colors})
 
 
 Linked fragment stage:
@@ -135,6 +130,7 @@
 
 Shader version: 330
 Requested GL_ARB_enhanced_layouts
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_separate_shader_objects
 ERROR: node is still EOpNull!
 0:8  Function Definition: main( ( global void)
@@ -186,9 +182,10 @@
 0:?     'outVar4' (layout( location=0 index=1) out 4-component vector of float)
 0:?     'indexIn' (layout( location=27 index=0) smooth in 4-component vector of float)
 0:?     'indexBlockI' (layout( location=26 index=0) out block{ out int a})
-0:?     'samp1D' ( uniform sampler1D)
-0:?     'samp2Ds' ( uniform sampler2DShadow)
 0:?     'precise' ( global int)
 0:?     'KeyMem' ( global structure{ global int precise})
 0:?     'outIndex2' (layout( location=28 index=0) out 4-component vector of float)
+0:?     'ucolor0' (layout( location=4) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=5) uniform 4-component vector of float)
+0:?     'colorsBuffer' (layout( location=6 column_major shared) uniform block{layout( column_major shared) uniform 128-element array of 4-component vector of float colors})
 
diff --git a/Test/baseResults/410.vert.out b/Test/baseResults/410.vert.out
index aacdf36..79268bc 100644
--- a/Test/baseResults/410.vert.out
+++ b/Test/baseResults/410.vert.out
@@ -3,6 +3,12 @@
 0:? Sequence
 0:7  Function Definition: main( ( global void)
 0:7    Function Parameters: 
+0:9    Sequence
+0:9      Sequence
+0:9        move second child to first child ( temp int)
+0:9          'test' ( temp int)
+0:9          Constant:
+0:9            16 (const int)
 0:?   Linker Objects
 0:?     'd' ( in double)
 0:?     'd3' ( in 3-component vector of double)
@@ -18,6 +24,12 @@
 0:? Sequence
 0:7  Function Definition: main( ( global void)
 0:7    Function Parameters: 
+0:9    Sequence
+0:9      Sequence
+0:9        move second child to first child ( temp int)
+0:9          'test' ( temp int)
+0:9          Constant:
+0:9            16 (const int)
 0:?   Linker Objects
 0:?     'd' ( in double)
 0:?     'd3' ( in 3-component vector of double)
diff --git a/Test/baseResults/420.frag.out b/Test/baseResults/420.frag.out
index ffb8f6d..1a7586a 100644
--- a/Test/baseResults/420.frag.out
+++ b/Test/baseResults/420.frag.out
@@ -3,10 +3,15 @@
 ERROR: 0:11: 'layout qualifier' : can only apply depth layout to gl_FragDepth 
 ERROR: 0:12: 'gl_FragDepth' : cannot redeclare after use 
 ERROR: 0:14: 'atomic_uint' : array must be explicitly sized 
-ERROR: 4 compilation errors.  No code generated.
+ERROR: 0:17: 'imageSize' : required extension not requested: GL_ARB_shader_image_size
+ERROR: 0:39: 'std430' : not supported for this version or the enabled extensions 
+ERROR: 0:39: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
+ERROR: 7 compilation errors.  No code generated.
 
 
 Shader version: 420
+Requested GL_ARB_shader_image_size
+Requested GL_ARB_shader_storage_buffer_object
 using depth_any
 ERROR: node is still EOpNull!
 0:6  Function Definition: main( ( global void)
@@ -16,16 +21,75 @@
 0:8        'gl_FragDepth' ( gl_FragDepth float FragDepth)
 0:8        Constant:
 0:8          0.300000
+0:17  Sequence
+0:17    move second child to first child ( temp 2-component vector of int)
+0:17      'iv2dim' ( global 2-component vector of int)
+0:17      imageQuerySize ( global 2-component vector of int)
+0:17        'i2D' ( writeonly uniform image2D)
+0:19  Sequence
+0:19    move second child to first child ( temp 2-component vector of int)
+0:19      'iv2dim1' ( global 2-component vector of int)
+0:19      imageQuerySize ( global 2-component vector of int)
+0:19        'i2D' ( writeonly uniform image2D)
+0:29  Function Definition: atomicOpPass( ( global void)
+0:29    Function Parameters: 
+0:31    Sequence
+0:31      Sequence
+0:31        move second child to first child ( temp int)
+0:31          'origi' ( temp int)
+0:31          AtomicAdd ( global int)
+0:31            atomi: direct index for structure (layout( column_major std430 offset=0) buffer int)
+0:31              'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer int atomi, layout( column_major std430 offset=4) buffer uint atomu})
+0:31              Constant:
+0:31                0 (const uint)
+0:31            Constant:
+0:31              3 (const int)
+0:32      Sequence
+0:32        move second child to first child ( temp uint)
+0:32          'origu' ( temp uint)
+0:32          AtomicAnd ( global uint)
+0:32            atomu: direct index for structure (layout( column_major std430 offset=4) buffer uint)
+0:32              'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer int atomi, layout( column_major std430 offset=4) buffer uint atomu})
+0:32              Constant:
+0:32                1 (const uint)
+0:32            Constant:
+0:32              7 (const uint)
+0:33      move second child to first child ( temp int)
+0:33        'origi' ( temp int)
+0:33        AtomicExchange ( global int)
+0:33          atomi: direct index for structure (layout( column_major std430 offset=0) buffer int)
+0:33            'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer int atomi, layout( column_major std430 offset=4) buffer uint atomu})
+0:33            Constant:
+0:33              0 (const uint)
+0:33          Constant:
+0:33            4 (const int)
+0:34      move second child to first child ( temp uint)
+0:34        'origu' ( temp uint)
+0:34        AtomicCompSwap ( global uint)
+0:34          atomu: direct index for structure (layout( column_major std430 offset=4) buffer uint)
+0:34            'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer int atomi, layout( column_major std430 offset=4) buffer uint atomu})
+0:34            Constant:
+0:34              1 (const uint)
+0:34          Constant:
+0:34            10 (const uint)
+0:34          Constant:
+0:34            8 (const uint)
 0:?   Linker Objects
 0:?     'gl_FragDepth' ( gl_FragDepth float FragDepth)
 0:?     'depth' ( smooth in float)
 0:?     'a' (layout( binding=0 offset=0) uniform unsized 1-element array of atomic_uint)
+0:?     'i2D' ( writeonly uniform image2D)
+0:?     'iv2dim' ( global 2-component vector of int)
+0:?     'iv2dim1' ( global 2-component vector of int)
+0:?     'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer int atomi, layout( column_major std430 offset=4) buffer uint atomu})
 
 
 Linked fragment stage:
 
 
 Shader version: 420
+Requested GL_ARB_shader_image_size
+Requested GL_ARB_shader_storage_buffer_object
 using depth_any
 ERROR: node is still EOpNull!
 0:6  Function Definition: main( ( global void)
@@ -35,8 +99,22 @@
 0:8        'gl_FragDepth' ( gl_FragDepth float FragDepth)
 0:8        Constant:
 0:8          0.300000
+0:17  Sequence
+0:17    move second child to first child ( temp 2-component vector of int)
+0:17      'iv2dim' ( global 2-component vector of int)
+0:17      imageQuerySize ( global 2-component vector of int)
+0:17        'i2D' ( writeonly uniform image2D)
+0:19  Sequence
+0:19    move second child to first child ( temp 2-component vector of int)
+0:19      'iv2dim1' ( global 2-component vector of int)
+0:19      imageQuerySize ( global 2-component vector of int)
+0:19        'i2D' ( writeonly uniform image2D)
 0:?   Linker Objects
 0:?     'gl_FragDepth' ( gl_FragDepth float FragDepth)
 0:?     'depth' ( smooth in float)
 0:?     'a' (layout( binding=0 offset=0) uniform 1-element array of atomic_uint)
+0:?     'i2D' ( writeonly uniform image2D)
+0:?     'iv2dim' ( global 2-component vector of int)
+0:?     'iv2dim1' ( global 2-component vector of int)
+0:?     'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer int atomi, layout( column_major std430 offset=4) buffer uint atomu})
 
diff --git a/Test/baseResults/450.comp.out b/Test/baseResults/450.comp.out
index 4ae77cc..ce95f8d 100644
--- a/Test/baseResults/450.comp.out
+++ b/Test/baseResults/450.comp.out
@@ -1,14 +1,15 @@
 450.comp
 ERROR: 0:2: 'local_size_x' : must be at least 1 
-ERROR: 0:5: 'shared' : not allowed in nested scope 
-ERROR: 2 compilation errors.  No code generated.
+ERROR: 0:4: 'binding' : atomic_uint binding is too large 
+ERROR: 0:8: 'shared' : not allowed in nested scope 
+ERROR: 3 compilation errors.  No code generated.
 
 
 Shader version: 450
 local_size = (1, 1, 1)
 ERROR: node is still EOpNull!
-0:3  Function Definition: main( ( global void)
-0:3    Function Parameters: 
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
 0:?   Linker Objects
 
 
@@ -18,7 +19,7 @@
 Shader version: 450
 local_size = (1, 1, 1)
 ERROR: node is still EOpNull!
-0:3  Function Definition: main( ( global void)
-0:3    Function Parameters: 
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
 0:?   Linker Objects
 
diff --git a/Test/baseResults/460.vert.out b/Test/baseResults/460.vert.out
index 8fa659b..7f4093b 100644
--- a/Test/baseResults/460.vert.out
+++ b/Test/baseResults/460.vert.out
@@ -4,18 +4,18 @@
 0:7  Function Definition: main( ( global void)
 0:7    Function Parameters: 
 0:?     Sequence
-0:10      move second child to first child ( temp bool)
-0:10        'b1' ( temp bool)
-0:10        anyInvocation ( global bool)
-0:10          'b1' ( temp bool)
 0:11      move second child to first child ( temp bool)
 0:11        'b1' ( temp bool)
-0:11        allInvocations ( global bool)
+0:11        anyInvocation ( global bool)
 0:11          'b1' ( temp bool)
 0:12      move second child to first child ( temp bool)
 0:12        'b1' ( temp bool)
-0:12        allInvocationsEqual ( global bool)
+0:12        allInvocations ( global bool)
 0:12          'b1' ( temp bool)
+0:13      move second child to first child ( temp bool)
+0:13        'b1' ( temp bool)
+0:13        allInvocationsEqual ( global bool)
+0:13          'b1' ( temp bool)
 0:?   Linker Objects
 0:?     'i' ( global int)
 0:?     'f' ( global float)
@@ -31,18 +31,18 @@
 0:7  Function Definition: main( ( global void)
 0:7    Function Parameters: 
 0:?     Sequence
-0:10      move second child to first child ( temp bool)
-0:10        'b1' ( temp bool)
-0:10        anyInvocation ( global bool)
-0:10          'b1' ( temp bool)
 0:11      move second child to first child ( temp bool)
 0:11        'b1' ( temp bool)
-0:11        allInvocations ( global bool)
+0:11        anyInvocation ( global bool)
 0:11          'b1' ( temp bool)
 0:12      move second child to first child ( temp bool)
 0:12        'b1' ( temp bool)
-0:12        allInvocationsEqual ( global bool)
+0:12        allInvocations ( global bool)
 0:12          'b1' ( temp bool)
+0:13      move second child to first child ( temp bool)
+0:13        'b1' ( temp bool)
+0:13        allInvocationsEqual ( global bool)
+0:13          'b1' ( temp bool)
 0:?   Linker Objects
 0:?     'i' ( global int)
 0:?     'f' ( global float)
diff --git a/Test/baseResults/atomic_uint.frag.out b/Test/baseResults/atomic_uint.frag.out
index c705a06..a0c6773 100644
--- a/Test/baseResults/atomic_uint.frag.out
+++ b/Test/baseResults/atomic_uint.frag.out
@@ -1,64 +1,65 @@
 atomic_uint.frag
-ERROR: 0:10: 'atomic_uint' : samplers and atomic_uints cannot be output parameters 
-ERROR: 0:12: 'return' : type does not match, or is not convertible to, the function's return type 
-ERROR: 0:18: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: non_uniform_counter
-ERROR: 0:23: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
-ERROR: 0:28: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( binding=0 offset=0) uniform atomic_uint' and a right operand of type 'layout( binding=0 offset=0) uniform atomic_uint' (or there is no acceptable conversion)
-ERROR: 0:29: '-' :  wrong operand type no operation '-' exists that takes an operand of type layout( binding=0 offset=0) uniform atomic_uint (or there is no acceptable conversion)
-ERROR: 0:31: '[]' : scalar integer expression required 
-ERROR: 0:34: 'assign' :  l-value required "counter" (can't modify a uniform)
-ERROR: 0:34: 'assign' :  cannot convert from ' const int' to 'layout( binding=0 offset=0) uniform atomic_uint'
-ERROR: 0:37: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: acin
-ERROR: 0:38: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: acg
-ERROR: 0:47: 'offset' : atomic counters sharing the same offset: 12
-ERROR: 0:48: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
-ERROR: 13 compilation errors.  No code generated.
+ERROR: 0:4: 'counter' : redefinition 
+ERROR: 0:11: 'atomic_uint' : samplers and atomic_uints cannot be output parameters 
+ERROR: 0:13: 'return' : type does not match, or is not convertible to, the function's return type 
+ERROR: 0:19: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: non_uniform_counter
+ERROR: 0:24: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
+ERROR: 0:29: '+' :  wrong operand types: no operation '+' exists that takes a left-hand operand of type 'layout( binding=0 offset=0) uniform atomic_uint' and a right operand of type 'layout( binding=0 offset=0) uniform atomic_uint' (or there is no acceptable conversion)
+ERROR: 0:30: '-' :  wrong operand type no operation '-' exists that takes an operand of type layout( binding=0 offset=0) uniform atomic_uint (or there is no acceptable conversion)
+ERROR: 0:32: '[]' : scalar integer expression required 
+ERROR: 0:35: 'assign' :  l-value required "counter" (can't modify a uniform)
+ERROR: 0:35: 'assign' :  cannot convert from ' const int' to 'layout( binding=0 offset=0) uniform atomic_uint'
+ERROR: 0:38: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: acin
+ERROR: 0:39: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: acg
+ERROR: 0:48: 'offset' : atomic counters sharing the same offset: 12
+ERROR: 0:49: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings 
+ERROR: 14 compilation errors.  No code generated.
 
 
 Shader version: 420
 ERROR: node is still EOpNull!
-0:5  Function Definition: func(au1; ( global uint)
-0:5    Function Parameters: 
-0:5      'c' ( in atomic_uint)
-0:7    Sequence
-0:7      Branch: Return with expression
-0:7        AtomicCounterIncrement ( global uint)
-0:7          'c' ( in atomic_uint)
-0:10  Function Definition: func2(au1; ( global uint)
-0:10    Function Parameters: 
-0:10      'c' ( out atomic_uint)
-0:12    Sequence
-0:12      Branch: Return with expression
-0:12        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:6  Function Definition: func(au1; ( global uint)
+0:6    Function Parameters: 
+0:6      'c' ( in atomic_uint)
+0:8    Sequence
+0:8      Branch: Return with expression
+0:8        AtomicCounterIncrement ( global uint)
+0:8          'c' ( in atomic_uint)
+0:11  Function Definition: func2(au1; ( global uint)
+0:11    Function Parameters: 
+0:11      'c' ( out atomic_uint)
+0:13    Sequence
 0:13      Branch: Return with expression
-0:13        AtomicCounter ( global uint)
-0:13          'counter' (layout( binding=0 offset=0) uniform atomic_uint)
-0:16  Function Definition: main( ( global void)
-0:16    Function Parameters: 
+0:13        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:14      Branch: Return with expression
+0:14        AtomicCounter ( global uint)
+0:14          'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:17  Function Definition: main( ( global void)
+0:17    Function Parameters: 
 0:?     Sequence
-0:19      Sequence
-0:19        move second child to first child ( temp uint)
-0:19          'val' ( temp uint)
-0:19          AtomicCounter ( global uint)
-0:19            'counter' (layout( binding=0 offset=0) uniform atomic_uint)
-0:20      AtomicCounterDecrement ( global uint)
-0:20        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
-0:26  Function Definition: opac( ( global void)
-0:26    Function Parameters: 
-0:28    Sequence
-0:28      'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:20      Sequence
+0:20        move second child to first child ( temp uint)
+0:20          'val' ( temp uint)
+0:20          AtomicCounter ( global uint)
+0:20            'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:21      AtomicCounterDecrement ( global uint)
+0:21        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:27  Function Definition: opac( ( global void)
+0:27    Function Parameters: 
+0:29    Sequence
 0:29      'counter' (layout( binding=0 offset=0) uniform atomic_uint)
-0:31      indirect index ( temp int)
-0:31        'a' ( temp 3-element array of int)
-0:31        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
-0:32      direct index (layout( binding=1 offset=3) temp atomic_uint)
-0:32        'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint)
-0:32        Constant:
-0:32          2 (const int)
-0:33      indirect index (layout( binding=1 offset=3) temp atomic_uint)
+0:30      'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:32      indirect index ( temp int)
+0:32        'a' ( temp 3-element array of int)
+0:32        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:33      direct index (layout( binding=1 offset=3) temp atomic_uint)
 0:33        'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint)
-0:33        'i' ( uniform int)
-0:34      'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:33        Constant:
+0:33          2 (const int)
+0:34      indirect index (layout( binding=1 offset=3) temp atomic_uint)
+0:34        'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint)
+0:34        'i' ( uniform int)
+0:35      'counter' (layout( binding=0 offset=0) uniform atomic_uint)
 0:?   Linker Objects
 0:?     'counter' (layout( binding=0 offset=0) uniform atomic_uint)
 0:?     'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint)
@@ -68,8 +69,8 @@
 0:?     'aNoBind' ( uniform atomic_uint)
 0:?     'aOffset' (layout( binding=0 offset=32) uniform atomic_uint)
 0:?     'bar3' (layout( binding=0 offset=4) uniform atomic_uint)
-0:?     'ac' (layout( binding=0 offset=8) uniform 3-element array of atomic_uint)
-0:?     'ad' (layout( binding=0 offset=20) uniform atomic_uint)
+0:?     'ac' (layout( binding=0 offset=8) uniform 2-element array of atomic_uint)
+0:?     'ad' (layout( binding=0 offset=16) uniform atomic_uint)
 0:?     'bar4' (layout( offset=8) uniform atomic_uint)
 0:?     'overlap' (layout( binding=0 offset=12) uniform atomic_uint)
 0:?     'bigBind' (layout( binding=20) uniform atomic_uint)
@@ -80,16 +81,16 @@
 
 Shader version: 420
 ERROR: node is still EOpNull!
-0:16  Function Definition: main( ( global void)
-0:16    Function Parameters: 
+0:17  Function Definition: main( ( global void)
+0:17    Function Parameters: 
 0:?     Sequence
-0:19      Sequence
-0:19        move second child to first child ( temp uint)
-0:19          'val' ( temp uint)
-0:19          AtomicCounter ( global uint)
-0:19            'counter' (layout( binding=0 offset=0) uniform atomic_uint)
-0:20      AtomicCounterDecrement ( global uint)
-0:20        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:20      Sequence
+0:20        move second child to first child ( temp uint)
+0:20          'val' ( temp uint)
+0:20          AtomicCounter ( global uint)
+0:20            'counter' (layout( binding=0 offset=0) uniform atomic_uint)
+0:21      AtomicCounterDecrement ( global uint)
+0:21        'counter' (layout( binding=0 offset=0) uniform atomic_uint)
 0:?   Linker Objects
 0:?     'counter' (layout( binding=0 offset=0) uniform atomic_uint)
 0:?     'countArr' (layout( binding=1 offset=3) uniform 4-element array of atomic_uint)
@@ -99,8 +100,8 @@
 0:?     'aNoBind' ( uniform atomic_uint)
 0:?     'aOffset' (layout( binding=0 offset=32) uniform atomic_uint)
 0:?     'bar3' (layout( binding=0 offset=4) uniform atomic_uint)
-0:?     'ac' (layout( binding=0 offset=8) uniform 3-element array of atomic_uint)
-0:?     'ad' (layout( binding=0 offset=20) uniform atomic_uint)
+0:?     'ac' (layout( binding=0 offset=8) uniform 2-element array of atomic_uint)
+0:?     'ad' (layout( binding=0 offset=16) uniform atomic_uint)
 0:?     'bar4' (layout( offset=8) uniform atomic_uint)
 0:?     'overlap' (layout( binding=0 offset=12) uniform atomic_uint)
 0:?     'bigBind' (layout( binding=20) uniform atomic_uint)
diff --git a/Test/baseResults/compoundsuffix.frag.hlsl b/Test/baseResults/compoundsuffix.frag.hlsl
index f47c97d..650d1d0 100644
--- a/Test/baseResults/compoundsuffix.frag.hlsl
+++ b/Test/baseResults/compoundsuffix.frag.hlsl
@@ -1,6 +1,6 @@
 compoundsuffix.frag.hlsl

 // Module Version 10000

-// Generated by (magic number): 80007

+// Generated by (magic number): 80008

 // Id's are bound by 22

 

                               Capability Shader

diff --git a/Test/baseResults/constFold.frag.out b/Test/baseResults/constFold.frag.out
index 2a48c42..045afc0 100644
--- a/Test/baseResults/constFold.frag.out
+++ b/Test/baseResults/constFold.frag.out
@@ -260,27 +260,27 @@
 0:120                1.000000
 0:120          Constant:
 0:120            3 (const int)
-0:126  Function Definition: foo3( ( global void)
-0:126    Function Parameters: 
-0:128    Sequence
-0:128      Sequence
-0:128        move second child to first child ( temp 3X2 matrix of float)
-0:128          'r32' ( temp 3X2 matrix of float)
-0:128          Constant:
-0:128            43.000000
-0:128            64.000000
-0:128            51.000000
-0:128            76.000000
-0:128            59.000000
-0:128            88.000000
-0:138  Function Definition: foo4( ( global void)
-0:138    Function Parameters: 
-0:140    Sequence
-0:140      Sequence
-0:140        move second child to first child ( temp int)
-0:140          'a' ( temp int)
-0:140          Constant:
-0:140            9 (const int)
+0:129  Function Definition: foo3( ( global void)
+0:129    Function Parameters: 
+0:131    Sequence
+0:131      Sequence
+0:131        move second child to first child ( temp 3X2 matrix of float)
+0:131          'r32' ( temp 3X2 matrix of float)
+0:131          Constant:
+0:131            43.000000
+0:131            64.000000
+0:131            51.000000
+0:131            76.000000
+0:131            59.000000
+0:131            88.000000
+0:141  Function Definition: foo4( ( global void)
+0:141    Function Parameters: 
+0:143    Sequence
+0:143      Sequence
+0:143        move second child to first child ( temp int)
+0:143          'a' ( temp int)
+0:143          Constant:
+0:143            9 (const int)
 0:?   Linker Objects
 0:?     'a' ( const int)
 0:?       1 (const int)
@@ -367,6 +367,29 @@
 0:?       13.000000
 0:?       14.000000
 0:?       15.000000
+0:?     'm22' ( const 2X2 matrix of float)
+0:?       1.000000
+0:?       2.000000
+0:?       3.000000
+0:?       4.000000
+0:?     'mm34' ( const 3X4 matrix of float)
+0:?       7.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       7.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       7.000000
+0:?       0.000000
+0:?     'mv4' ( const 4-component vector of float)
+0:?       1.000000
+0:?       2.000000
+0:?       3.000000
+0:?       4.000000
 0:?     'a0' ( const 3-element array of structure{ global int i,  global float f,  global bool b})
 0:?       3 (const int)
 0:?       2.000000
@@ -635,6 +658,29 @@
 0:?       13.000000
 0:?       14.000000
 0:?       15.000000
+0:?     'm22' ( const 2X2 matrix of float)
+0:?       1.000000
+0:?       2.000000
+0:?       3.000000
+0:?       4.000000
+0:?     'mm34' ( const 3X4 matrix of float)
+0:?       7.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       7.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       0.000000
+0:?       7.000000
+0:?       0.000000
+0:?     'mv4' ( const 4-component vector of float)
+0:?       1.000000
+0:?       2.000000
+0:?       3.000000
+0:?       4.000000
 0:?     'a0' ( const 3-element array of structure{ global int i,  global float f,  global bool b})
 0:?       3 (const int)
 0:?       2.000000
diff --git a/Test/baseResults/cppBad.vert.out b/Test/baseResults/cppBad.vert.out
index 13a5fc1..aaecdf0 100644
--- a/Test/baseResults/cppBad.vert.out
+++ b/Test/baseResults/cppBad.vert.out
@@ -3,7 +3,7 @@
 ERROR: 0:3: 'preprocessor evaluation' : bad expression 
 ERROR: 0:3: '#if' : unexpected tokens following directive 
 ERROR: 0:6: 'string' : End of line in string 
-ERROR: 0:6: '""' : string literals not supported 
+ERROR: 0:6: 'string literal' : required extension not requested: GL_EXT_debug_printf
 ERROR: 0:6: '' :  syntax error, unexpected INT, expecting COMMA or SEMICOLON
 ERROR: 5 compilation errors.  No code generated.
 
diff --git a/Test/baseResults/cppSimple.vert.out b/Test/baseResults/cppSimple.vert.out
index 85beb4e..3257856 100644
--- a/Test/baseResults/cppSimple.vert.out
+++ b/Test/baseResults/cppSimple.vert.out
@@ -18,8 +18,8 @@
 ERROR: 0:120: '#if' : unexpected tokens following directive 
 ERROR: 0:121: '#error' : bad6  
 ERROR: 0:122: '#endif' : unexpected tokens following directive 
-ERROR: 0:135: '""' : string literals not supported 
-ERROR: 0:136: '""' : string literals not supported 
+ERROR: 0:135: 'string literal' : required extension not requested: GL_EXT_debug_printf
+ERROR: 0:136: 'string literal' : required extension not requested: GL_EXT_debug_printf
 ERROR: 0:136: 'length' : no matching overloaded function found 
 ERROR: 0:136: '=' :  cannot convert from ' const float' to ' global int'
 ERROR: 0:138: ''' : character literals not supported 
diff --git a/Test/baseResults/glsl.450.subgroup.frag.out b/Test/baseResults/glsl.450.subgroup.frag.out
index e61523e..817abb2 100644
--- a/Test/baseResults/glsl.450.subgroup.frag.out
+++ b/Test/baseResults/glsl.450.subgroup.frag.out
@@ -85,11 +85,13 @@
 ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
 ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
 ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
-ERROR: 0:232: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
-ERROR: 0:233: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
-ERROR: 0:234: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
-ERROR: 0:235: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
-ERROR: 90 compilation errors.  No code generated.
+ERROR: 0:124: 'id' : argument must be compile-time constant 
+ERROR: 0:199: 'id' : argument must be compile-time constant 
+ERROR: 0:236: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:237: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:238: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:239: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 92 compilation errors.  No code generated.
 
 
 Shader version: 450
@@ -352,270 +354,278 @@
 0:116  Function Definition: ballot_works(vf4; ( global void)
 0:116    Function Parameters: 
 0:116      'f4' ( in 4-component vector of float)
-0:117    Sequence
-0:117      'gl_SubgroupEqMask' ( flat in 4-component vector of uint SubgroupEqMask)
-0:118      'gl_SubgroupGeMask' ( flat in 4-component vector of uint SubgroupGeMask)
-0:119      'gl_SubgroupGtMask' ( flat in 4-component vector of uint SubgroupGtMask)
-0:120      'gl_SubgroupLeMask' ( flat in 4-component vector of uint SubgroupLeMask)
-0:121      'gl_SubgroupLtMask' ( flat in 4-component vector of uint SubgroupLtMask)
-0:122      subgroupBroadcast ( global 4-component vector of float)
-0:122        'f4' ( in 4-component vector of float)
-0:122        Constant:
-0:122          0 (const uint)
-0:123      subgroupBroadcastFirst ( global 4-component vector of float)
+0:?     Sequence
+0:118      'gl_SubgroupEqMask' ( flat in 4-component vector of uint SubgroupEqMask)
+0:119      'gl_SubgroupGeMask' ( flat in 4-component vector of uint SubgroupGeMask)
+0:120      'gl_SubgroupGtMask' ( flat in 4-component vector of uint SubgroupGtMask)
+0:121      'gl_SubgroupLeMask' ( flat in 4-component vector of uint SubgroupLeMask)
+0:122      'gl_SubgroupLtMask' ( flat in 4-component vector of uint SubgroupLtMask)
+0:123      subgroupBroadcast ( global 4-component vector of float)
 0:123        'f4' ( in 4-component vector of float)
-0:124      Sequence
-0:124        move second child to first child ( temp 4-component vector of uint)
-0:124          'ballot' ( temp 4-component vector of uint)
-0:124          subgroupBallot ( global 4-component vector of uint)
-0:124            Constant:
-0:124              false (const bool)
-0:125      subgroupInverseBallot ( global bool)
-0:125        Constant:
-0:125          1 (const uint)
-0:125          1 (const uint)
-0:125          1 (const uint)
-0:125          1 (const uint)
-0:126      subgroupBallotBitExtract ( global bool)
-0:126        'ballot' ( temp 4-component vector of uint)
-0:126        Constant:
-0:126          0 (const uint)
-0:127      subgroupBallotBitCount ( global uint)
-0:127        'ballot' ( temp 4-component vector of uint)
-0:128      subgroupBallotInclusiveBitCount ( global uint)
+0:123        Constant:
+0:123          0 (const uint)
+0:124      subgroupBroadcast ( global 4-component vector of float)
+0:124        'f4' ( in 4-component vector of float)
+0:124        Convert int to uint ( temp uint)
+0:124          'i' ( temp int)
+0:125      subgroupBroadcastFirst ( global 4-component vector of float)
+0:125        'f4' ( in 4-component vector of float)
+0:126      Sequence
+0:126        move second child to first child ( temp 4-component vector of uint)
+0:126          'ballot' ( temp 4-component vector of uint)
+0:126          subgroupBallot ( global 4-component vector of uint)
+0:126            Constant:
+0:126              false (const bool)
+0:127      subgroupInverseBallot ( global bool)
+0:127        Constant:
+0:127          1 (const uint)
+0:127          1 (const uint)
+0:127          1 (const uint)
+0:127          1 (const uint)
+0:128      subgroupBallotBitExtract ( global bool)
 0:128        'ballot' ( temp 4-component vector of uint)
-0:129      subgroupBallotExclusiveBitCount ( global uint)
+0:128        Constant:
+0:128          0 (const uint)
+0:129      subgroupBallotBitCount ( global uint)
 0:129        'ballot' ( temp 4-component vector of uint)
-0:130      subgroupBallotFindLSB ( global uint)
+0:130      subgroupBallotInclusiveBitCount ( global uint)
 0:130        'ballot' ( temp 4-component vector of uint)
-0:131      subgroupBallotFindMSB ( global uint)
+0:131      subgroupBallotExclusiveBitCount ( global uint)
 0:131        'ballot' ( temp 4-component vector of uint)
-0:135  Function Definition: vote_works(vf4; ( global void)
-0:135    Function Parameters: 
-0:135      'f4' ( in 4-component vector of float)
-0:137    Sequence
-0:137      subgroupAll ( global bool)
-0:137        Constant:
-0:137          true (const bool)
-0:138      subgroupAny ( global bool)
-0:138        Constant:
-0:138          false (const bool)
-0:139      subgroupAllEqual ( global bool)
-0:139        'f4' ( in 4-component vector of float)
-0:144  Function Definition: shuffle_works(vf4; ( global void)
-0:144    Function Parameters: 
-0:144      'f4' ( in 4-component vector of float)
-0:146    Sequence
-0:146      subgroupShuffle ( global 4-component vector of float)
-0:146        'f4' ( in 4-component vector of float)
-0:146        Constant:
-0:146          0 (const uint)
-0:147      subgroupShuffleXor ( global 4-component vector of float)
-0:147        'f4' ( in 4-component vector of float)
-0:147        Constant:
-0:147          1 (const uint)
-0:148      subgroupShuffleUp ( global 4-component vector of float)
+0:132      subgroupBallotFindLSB ( global uint)
+0:132        'ballot' ( temp 4-component vector of uint)
+0:133      subgroupBallotFindMSB ( global uint)
+0:133        'ballot' ( temp 4-component vector of uint)
+0:137  Function Definition: vote_works(vf4; ( global void)
+0:137    Function Parameters: 
+0:137      'f4' ( in 4-component vector of float)
+0:139    Sequence
+0:139      subgroupAll ( global bool)
+0:139        Constant:
+0:139          true (const bool)
+0:140      subgroupAny ( global bool)
+0:140        Constant:
+0:140          false (const bool)
+0:141      subgroupAllEqual ( global bool)
+0:141        'f4' ( in 4-component vector of float)
+0:146  Function Definition: shuffle_works(vf4; ( global void)
+0:146    Function Parameters: 
+0:146      'f4' ( in 4-component vector of float)
+0:148    Sequence
+0:148      subgroupShuffle ( global 4-component vector of float)
 0:148        'f4' ( in 4-component vector of float)
 0:148        Constant:
-0:148          1 (const uint)
-0:149      subgroupShuffleDown ( global 4-component vector of float)
+0:148          0 (const uint)
+0:149      subgroupShuffleXor ( global 4-component vector of float)
 0:149        'f4' ( in 4-component vector of float)
 0:149        Constant:
 0:149          1 (const uint)
-0:153  Function Definition: arith_works(vf4; ( global void)
-0:153    Function Parameters: 
-0:153      'f4' ( in 4-component vector of float)
+0:150      subgroupShuffleUp ( global 4-component vector of float)
+0:150        'f4' ( in 4-component vector of float)
+0:150        Constant:
+0:150          1 (const uint)
+0:151      subgroupShuffleDown ( global 4-component vector of float)
+0:151        'f4' ( in 4-component vector of float)
+0:151        Constant:
+0:151          1 (const uint)
+0:155  Function Definition: arith_works(vf4; ( global void)
+0:155    Function Parameters: 
+0:155      'f4' ( in 4-component vector of float)
 0:?     Sequence
-0:156      subgroupAdd ( global 4-component vector of float)
-0:156        'f4' ( in 4-component vector of float)
-0:157      subgroupMul ( global 4-component vector of float)
-0:157        'f4' ( in 4-component vector of float)
-0:158      subgroupMin ( global 4-component vector of float)
+0:158      subgroupAdd ( global 4-component vector of float)
 0:158        'f4' ( in 4-component vector of float)
-0:159      subgroupMax ( global 4-component vector of float)
+0:159      subgroupMul ( global 4-component vector of float)
 0:159        'f4' ( in 4-component vector of float)
-0:160      subgroupAnd ( global 4-component vector of uint)
-0:160        'ballot' ( temp 4-component vector of uint)
-0:161      subgroupOr ( global 4-component vector of uint)
-0:161        'ballot' ( temp 4-component vector of uint)
-0:162      subgroupXor ( global 4-component vector of uint)
+0:160      subgroupMin ( global 4-component vector of float)
+0:160        'f4' ( in 4-component vector of float)
+0:161      subgroupMax ( global 4-component vector of float)
+0:161        'f4' ( in 4-component vector of float)
+0:162      subgroupAnd ( global 4-component vector of uint)
 0:162        'ballot' ( temp 4-component vector of uint)
-0:163      subgroupInclusiveAdd ( global 4-component vector of float)
-0:163        'f4' ( in 4-component vector of float)
-0:164      subgroupInclusiveMul ( global 4-component vector of float)
-0:164        'f4' ( in 4-component vector of float)
-0:165      subgroupInclusiveMin ( global 4-component vector of float)
+0:163      subgroupOr ( global 4-component vector of uint)
+0:163        'ballot' ( temp 4-component vector of uint)
+0:164      subgroupXor ( global 4-component vector of uint)
+0:164        'ballot' ( temp 4-component vector of uint)
+0:165      subgroupInclusiveAdd ( global 4-component vector of float)
 0:165        'f4' ( in 4-component vector of float)
-0:166      subgroupInclusiveMax ( global 4-component vector of float)
+0:166      subgroupInclusiveMul ( global 4-component vector of float)
 0:166        'f4' ( in 4-component vector of float)
-0:167      subgroupInclusiveAnd ( global 4-component vector of uint)
-0:167        'ballot' ( temp 4-component vector of uint)
-0:168      subgroupInclusiveOr ( global 4-component vector of uint)
-0:168        'ballot' ( temp 4-component vector of uint)
-0:169      subgroupInclusiveXor ( global 4-component vector of uint)
+0:167      subgroupInclusiveMin ( global 4-component vector of float)
+0:167        'f4' ( in 4-component vector of float)
+0:168      subgroupInclusiveMax ( global 4-component vector of float)
+0:168        'f4' ( in 4-component vector of float)
+0:169      subgroupInclusiveAnd ( global 4-component vector of uint)
 0:169        'ballot' ( temp 4-component vector of uint)
-0:170      subgroupExclusiveAdd ( global 4-component vector of float)
-0:170        'f4' ( in 4-component vector of float)
-0:171      subgroupExclusiveMul ( global 4-component vector of float)
-0:171        'f4' ( in 4-component vector of float)
-0:172      subgroupExclusiveMin ( global 4-component vector of float)
+0:170      subgroupInclusiveOr ( global 4-component vector of uint)
+0:170        'ballot' ( temp 4-component vector of uint)
+0:171      subgroupInclusiveXor ( global 4-component vector of uint)
+0:171        'ballot' ( temp 4-component vector of uint)
+0:172      subgroupExclusiveAdd ( global 4-component vector of float)
 0:172        'f4' ( in 4-component vector of float)
-0:173      subgroupExclusiveMax ( global 4-component vector of float)
+0:173      subgroupExclusiveMul ( global 4-component vector of float)
 0:173        'f4' ( in 4-component vector of float)
-0:174      subgroupExclusiveAnd ( global 4-component vector of uint)
-0:174        'ballot' ( temp 4-component vector of uint)
-0:175      subgroupExclusiveOr ( global 4-component vector of uint)
-0:175        'ballot' ( temp 4-component vector of uint)
-0:176      subgroupExclusiveXor ( global 4-component vector of uint)
+0:174      subgroupExclusiveMin ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:175      subgroupExclusiveMax ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:176      subgroupExclusiveAnd ( global 4-component vector of uint)
 0:176        'ballot' ( temp 4-component vector of uint)
-0:180  Function Definition: clustered_works(vf4; ( global void)
-0:180    Function Parameters: 
-0:180      'f4' ( in 4-component vector of float)
-0:182    Sequence
-0:182      Sequence
-0:182        move second child to first child ( temp 4-component vector of uint)
-0:182          'ballot' ( temp 4-component vector of uint)
-0:182          Constant:
-0:182            85 (const uint)
-0:182            0 (const uint)
-0:182            0 (const uint)
-0:182            0 (const uint)
-0:183      subgroupClusteredAdd ( global 4-component vector of float)
-0:183        'f4' ( in 4-component vector of float)
-0:183        Constant:
-0:183          2 (const uint)
-0:184      subgroupClusteredMul ( global 4-component vector of float)
-0:184        'f4' ( in 4-component vector of float)
-0:184        Constant:
-0:184          2 (const uint)
-0:185      subgroupClusteredMin ( global 4-component vector of float)
+0:177      subgroupExclusiveOr ( global 4-component vector of uint)
+0:177        'ballot' ( temp 4-component vector of uint)
+0:178      subgroupExclusiveXor ( global 4-component vector of uint)
+0:178        'ballot' ( temp 4-component vector of uint)
+0:182  Function Definition: clustered_works(vf4; ( global void)
+0:182    Function Parameters: 
+0:182      'f4' ( in 4-component vector of float)
+0:184    Sequence
+0:184      Sequence
+0:184        move second child to first child ( temp 4-component vector of uint)
+0:184          'ballot' ( temp 4-component vector of uint)
+0:184          Constant:
+0:184            85 (const uint)
+0:184            0 (const uint)
+0:184            0 (const uint)
+0:184            0 (const uint)
+0:185      subgroupClusteredAdd ( global 4-component vector of float)
 0:185        'f4' ( in 4-component vector of float)
 0:185        Constant:
 0:185          2 (const uint)
-0:186      subgroupClusteredMax ( global 4-component vector of float)
+0:186      subgroupClusteredMul ( global 4-component vector of float)
 0:186        'f4' ( in 4-component vector of float)
 0:186        Constant:
 0:186          2 (const uint)
-0:187      subgroupClusteredAnd ( global 4-component vector of uint)
-0:187        'ballot' ( temp 4-component vector of uint)
+0:187      subgroupClusteredMin ( global 4-component vector of float)
+0:187        'f4' ( in 4-component vector of float)
 0:187        Constant:
 0:187          2 (const uint)
-0:188      subgroupClusteredOr ( global 4-component vector of uint)
-0:188        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupClusteredMax ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
 0:188        Constant:
 0:188          2 (const uint)
-0:189      subgroupClusteredXor ( global 4-component vector of uint)
+0:189      subgroupClusteredAnd ( global 4-component vector of uint)
 0:189        'ballot' ( temp 4-component vector of uint)
 0:189        Constant:
 0:189          2 (const uint)
-0:193  Function Definition: quad_works(vf4; ( global void)
-0:193    Function Parameters: 
-0:193      'f4' ( in 4-component vector of float)
-0:195    Sequence
-0:195      subgroupQuadBroadcast ( global 4-component vector of float)
-0:195        'f4' ( in 4-component vector of float)
-0:195        Constant:
-0:195          0 (const uint)
-0:196      subgroupQuadSwapHorizontal ( global 4-component vector of float)
-0:196        'f4' ( in 4-component vector of float)
-0:197      subgroupQuadSwapVertical ( global 4-component vector of float)
-0:197        'f4' ( in 4-component vector of float)
-0:198      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:190      subgroupClusteredOr ( global 4-component vector of uint)
+0:190        'ballot' ( temp 4-component vector of uint)
+0:190        Constant:
+0:190          2 (const uint)
+0:191      subgroupClusteredXor ( global 4-component vector of uint)
+0:191        'ballot' ( temp 4-component vector of uint)
+0:191        Constant:
+0:191          2 (const uint)
+0:195  Function Definition: quad_works(vf4; ( global void)
+0:195    Function Parameters: 
+0:195      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:198      subgroupQuadBroadcast ( global 4-component vector of float)
 0:198        'f4' ( in 4-component vector of float)
-0:202  Function Definition: partitioned_works(vf4; ( global void)
-0:202    Function Parameters: 
-0:202      'f4' ( in 4-component vector of float)
-0:204    Sequence
-0:204      Sequence
-0:204        move second child to first child ( temp 4-component vector of uint)
-0:204          'parti' ( temp 4-component vector of uint)
-0:204          subgroupPartitionNV ( global 4-component vector of uint)
-0:204            'f4' ( in 4-component vector of float)
-0:205      Sequence
-0:205        move second child to first child ( temp 4-component vector of uint)
-0:205          'ballot' ( temp 4-component vector of uint)
-0:205          Constant:
-0:205            85 (const uint)
-0:205            0 (const uint)
-0:205            0 (const uint)
-0:205            0 (const uint)
-0:206      subgroupPartitionedAddNV ( global 4-component vector of float)
-0:206        'f4' ( in 4-component vector of float)
-0:206        'parti' ( temp 4-component vector of uint)
-0:207      subgroupPartitionedMulNV ( global 4-component vector of float)
-0:207        'f4' ( in 4-component vector of float)
-0:207        'parti' ( temp 4-component vector of uint)
-0:208      subgroupPartitionedMinNV ( global 4-component vector of float)
-0:208        'f4' ( in 4-component vector of float)
-0:208        'parti' ( temp 4-component vector of uint)
-0:209      subgroupPartitionedMaxNV ( global 4-component vector of float)
-0:209        'f4' ( in 4-component vector of float)
-0:209        'parti' ( temp 4-component vector of uint)
-0:210      subgroupPartitionedAndNV ( global 4-component vector of uint)
-0:210        'ballot' ( temp 4-component vector of uint)
+0:198        Constant:
+0:198          0 (const uint)
+0:199      subgroupQuadBroadcast ( global 4-component vector of float)
+0:199        'f4' ( in 4-component vector of float)
+0:199        Convert int to uint ( temp uint)
+0:199          'i' ( temp int)
+0:200      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:201      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:201        'f4' ( in 4-component vector of float)
+0:202      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:206  Function Definition: partitioned_works(vf4; ( global void)
+0:206    Function Parameters: 
+0:206      'f4' ( in 4-component vector of float)
+0:208    Sequence
+0:208      Sequence
+0:208        move second child to first child ( temp 4-component vector of uint)
+0:208          'parti' ( temp 4-component vector of uint)
+0:208          subgroupPartitionNV ( global 4-component vector of uint)
+0:208            'f4' ( in 4-component vector of float)
+0:209      Sequence
+0:209        move second child to first child ( temp 4-component vector of uint)
+0:209          'ballot' ( temp 4-component vector of uint)
+0:209          Constant:
+0:209            85 (const uint)
+0:209            0 (const uint)
+0:209            0 (const uint)
+0:209            0 (const uint)
+0:210      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:210        'f4' ( in 4-component vector of float)
 0:210        'parti' ( temp 4-component vector of uint)
-0:211      subgroupPartitionedOrNV ( global 4-component vector of uint)
-0:211        'ballot' ( temp 4-component vector of uint)
+0:211      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:211        'f4' ( in 4-component vector of float)
 0:211        'parti' ( temp 4-component vector of uint)
-0:212      subgroupPartitionedXorNV ( global 4-component vector of uint)
-0:212        'ballot' ( temp 4-component vector of uint)
+0:212      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
 0:212        'parti' ( temp 4-component vector of uint)
-0:213      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:213      subgroupPartitionedMaxNV ( global 4-component vector of float)
 0:213        'f4' ( in 4-component vector of float)
 0:213        'parti' ( temp 4-component vector of uint)
-0:214      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
-0:214        'f4' ( in 4-component vector of float)
+0:214      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:214        'ballot' ( temp 4-component vector of uint)
 0:214        'parti' ( temp 4-component vector of uint)
-0:215      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
-0:215        'f4' ( in 4-component vector of float)
+0:215      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:215        'ballot' ( temp 4-component vector of uint)
 0:215        'parti' ( temp 4-component vector of uint)
-0:216      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
-0:216        'f4' ( in 4-component vector of float)
+0:216      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:216        'ballot' ( temp 4-component vector of uint)
 0:216        'parti' ( temp 4-component vector of uint)
-0:217      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
-0:217        'ballot' ( temp 4-component vector of uint)
+0:217      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:217        'f4' ( in 4-component vector of float)
 0:217        'parti' ( temp 4-component vector of uint)
-0:218      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
-0:218        'ballot' ( temp 4-component vector of uint)
+0:218      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:218        'f4' ( in 4-component vector of float)
 0:218        'parti' ( temp 4-component vector of uint)
-0:219      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
-0:219        'ballot' ( temp 4-component vector of uint)
+0:219      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:219        'f4' ( in 4-component vector of float)
 0:219        'parti' ( temp 4-component vector of uint)
-0:220      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:220      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
 0:220        'f4' ( in 4-component vector of float)
 0:220        'parti' ( temp 4-component vector of uint)
-0:221      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
-0:221        'f4' ( in 4-component vector of float)
+0:221      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:221        'ballot' ( temp 4-component vector of uint)
 0:221        'parti' ( temp 4-component vector of uint)
-0:222      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
-0:222        'f4' ( in 4-component vector of float)
+0:222      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:222        'ballot' ( temp 4-component vector of uint)
 0:222        'parti' ( temp 4-component vector of uint)
-0:223      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
-0:223        'f4' ( in 4-component vector of float)
+0:223      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:223        'ballot' ( temp 4-component vector of uint)
 0:223        'parti' ( temp 4-component vector of uint)
-0:224      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
-0:224        'ballot' ( temp 4-component vector of uint)
+0:224      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:224        'f4' ( in 4-component vector of float)
 0:224        'parti' ( temp 4-component vector of uint)
-0:225      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
-0:225        'ballot' ( temp 4-component vector of uint)
+0:225      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:225        'f4' ( in 4-component vector of float)
 0:225        'parti' ( temp 4-component vector of uint)
-0:226      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
-0:226        'ballot' ( temp 4-component vector of uint)
+0:226      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:226        'f4' ( in 4-component vector of float)
 0:226        'parti' ( temp 4-component vector of uint)
-0:230  Function Definition: sm_builtins_err( ( global void)
-0:230    Function Parameters: 
-0:232    Sequence
-0:232      'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
-0:233      'gl_SMCountNV' ( flat in uint SMCountNV)
-0:234      'gl_WarpIDNV' ( flat in uint WarpIDNV)
-0:235      'gl_SMIDNV' ( flat in uint SMIDNV)
-0:242  Function Definition: sm_builtins( ( global void)
-0:242    Function Parameters: 
-0:244    Sequence
-0:244      'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
-0:245      'gl_SMCountNV' ( flat in uint SMCountNV)
-0:246      'gl_WarpIDNV' ( flat in uint WarpIDNV)
-0:247      'gl_SMIDNV' ( flat in uint SMIDNV)
+0:227      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:227        'f4' ( in 4-component vector of float)
+0:227        'parti' ( temp 4-component vector of uint)
+0:228      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:228        'ballot' ( temp 4-component vector of uint)
+0:228        'parti' ( temp 4-component vector of uint)
+0:229      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:229        'ballot' ( temp 4-component vector of uint)
+0:229        'parti' ( temp 4-component vector of uint)
+0:230      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:230        'ballot' ( temp 4-component vector of uint)
+0:230        'parti' ( temp 4-component vector of uint)
+0:234  Function Definition: sm_builtins_err( ( global void)
+0:234    Function Parameters: 
+0:236    Sequence
+0:236      'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
+0:237      'gl_SMCountNV' ( flat in uint SMCountNV)
+0:238      'gl_WarpIDNV' ( flat in uint WarpIDNV)
+0:239      'gl_SMIDNV' ( flat in uint SMIDNV)
+0:246  Function Definition: sm_builtins( ( global void)
+0:246    Function Parameters: 
+0:248    Sequence
+0:248      'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
+0:249      'gl_SMCountNV' ( flat in uint SMCountNV)
+0:250      'gl_WarpIDNV' ( flat in uint WarpIDNV)
+0:251      'gl_SMIDNV' ( flat in uint SMIDNV)
 0:?   Linker Objects
 0:?     'data' (layout( location=0) out 4-component vector of uint)
 
diff --git a/Test/baseResults/glsl.entryPointRename.vert.bad.out b/Test/baseResults/glsl.entryPointRename.vert.bad.out
index c7ea97e..7b99bbe 100644
--- a/Test/baseResults/glsl.entryPointRename.vert.bad.out
+++ b/Test/baseResults/glsl.entryPointRename.vert.bad.out
@@ -2,7 +2,7 @@
 ERROR: Source entry point must be "main"
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/glsl.entryPointRename.vert.out b/Test/baseResults/glsl.entryPointRename.vert.out
index 3dbe13b..3044dee 100644
--- a/Test/baseResults/glsl.entryPointRename.vert.out
+++ b/Test/baseResults/glsl.entryPointRename.vert.out
@@ -1,6 +1,6 @@
 glsl.entryPointRename.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/glspv.esversion.vert.out b/Test/baseResults/glspv.esversion.vert.out
index 395d7f3..9f92513 100644
--- a/Test/baseResults/glspv.esversion.vert.out
+++ b/Test/baseResults/glspv.esversion.vert.out
@@ -1,6 +1,6 @@
 glspv.esversion.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 10
 
                               Capability Shader
diff --git a/Test/baseResults/glspv.version.frag.out b/Test/baseResults/glspv.version.frag.out
index 4a45b5b..42c73dd 100644
--- a/Test/baseResults/glspv.version.frag.out
+++ b/Test/baseResults/glspv.version.frag.out
@@ -2,7 +2,7 @@
 ERROR: #version: compilation for SPIR-V does not support the compatibility profile
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 6
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.PointSize.geom.out b/Test/baseResults/hlsl.PointSize.geom.out
index 77cdc7d..80fee61 100644
--- a/Test/baseResults/hlsl.PointSize.geom.out
+++ b/Test/baseResults/hlsl.PointSize.geom.out
@@ -71,7 +71,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 36
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.PointSize.vert.out b/Test/baseResults/hlsl.PointSize.vert.out
index bda0030..2390a5a 100644
--- a/Test/baseResults/hlsl.PointSize.vert.out
+++ b/Test/baseResults/hlsl.PointSize.vert.out
@@ -38,7 +38,7 @@
 0:?     '@entryPointOutput' ( out float PointSize)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 16
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.aliasOpaque.frag.out b/Test/baseResults/hlsl.aliasOpaque.frag.out
index 63d29fa..d22bac6 100644
--- a/Test/baseResults/hlsl.aliasOpaque.frag.out
+++ b/Test/baseResults/hlsl.aliasOpaque.frag.out
@@ -143,7 +143,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 64
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.amend.frag.out b/Test/baseResults/hlsl.amend.frag.out
index e273abe..7fd0727 100644
--- a/Test/baseResults/hlsl.amend.frag.out
+++ b/Test/baseResults/hlsl.amend.frag.out
@@ -160,7 +160,7 @@
 0:?     'm' ( global 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.flatten.frag.out b/Test/baseResults/hlsl.array.flatten.frag.out
index 80d5153..4c2a8c1 100644
--- a/Test/baseResults/hlsl.array.flatten.frag.out
+++ b/Test/baseResults/hlsl.array.flatten.frag.out
@@ -345,7 +345,7 @@
 0:?     'ps_output.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 143
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out
index 2e706d7..7178102 100644
--- a/Test/baseResults/hlsl.array.frag.out
+++ b/Test/baseResults/hlsl.array.frag.out
@@ -290,7 +290,7 @@
 0:?     'input' (layout( location=1) in 3-element array of 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 126
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.implicit-size.frag.out b/Test/baseResults/hlsl.array.implicit-size.frag.out
index 9af6fed..402807e 100644
--- a/Test/baseResults/hlsl.array.implicit-size.frag.out
+++ b/Test/baseResults/hlsl.array.implicit-size.frag.out
@@ -163,7 +163,7 @@
 0:?     'g_mystruct' ( global 2-element array of structure{ temp int i,  temp float f})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.array.multidim.frag.out b/Test/baseResults/hlsl.array.multidim.frag.out
index 9462999..6c852c3 100644
--- a/Test/baseResults/hlsl.array.multidim.frag.out
+++ b/Test/baseResults/hlsl.array.multidim.frag.out
@@ -134,7 +134,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.assoc.frag.out b/Test/baseResults/hlsl.assoc.frag.out
index 562a863..2002b0d 100644
--- a/Test/baseResults/hlsl.assoc.frag.out
+++ b/Test/baseResults/hlsl.assoc.frag.out
@@ -132,7 +132,7 @@
 0:?     'a5' (layout( location=4) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 58
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attribute.expression.comp.out b/Test/baseResults/hlsl.attribute.expression.comp.out
index 1b3ffdb..1ff2123 100644
--- a/Test/baseResults/hlsl.attribute.expression.comp.out
+++ b/Test/baseResults/hlsl.attribute.expression.comp.out
@@ -82,7 +82,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attribute.frag.out b/Test/baseResults/hlsl.attribute.frag.out
index 44e963e..2290cd8 100644
--- a/Test/baseResults/hlsl.attribute.frag.out
+++ b/Test/baseResults/hlsl.attribute.frag.out
@@ -50,7 +50,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attributeC11.frag.out b/Test/baseResults/hlsl.attributeC11.frag.out
index 47dd96a..14bdcdd 100644
--- a/Test/baseResults/hlsl.attributeC11.frag.out
+++ b/Test/baseResults/hlsl.attributeC11.frag.out
@@ -95,7 +95,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 51
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
index e378447..a486d1e 100644
--- a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
+++ b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
@@ -56,7 +56,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.basic.comp.out b/Test/baseResults/hlsl.basic.comp.out
index d84642e..fb26bc3 100644
--- a/Test/baseResults/hlsl.basic.comp.out
+++ b/Test/baseResults/hlsl.basic.comp.out
@@ -64,7 +64,7 @@
 0:?     'gti' ( in 3-component vector of int LocalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.basic.geom.out b/Test/baseResults/hlsl.basic.geom.out
index f4116d4..ee123d4 100644
--- a/Test/baseResults/hlsl.basic.geom.out
+++ b/Test/baseResults/hlsl.basic.geom.out
@@ -188,7 +188,7 @@
 0:?     'OutputStream.something' (layout( location=1) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 68
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.boolConv.vert.out b/Test/baseResults/hlsl.boolConv.vert.out
index d88955f..8762faf 100644
--- a/Test/baseResults/hlsl.boolConv.vert.out
+++ b/Test/baseResults/hlsl.boolConv.vert.out
@@ -204,7 +204,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out
index 25a7963..e41c02d 100644
--- a/Test/baseResults/hlsl.buffer.frag.out
+++ b/Test/baseResults/hlsl.buffer.frag.out
@@ -147,7 +147,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
index f327883..698350c 100644
--- a/Test/baseResults/hlsl.calculatelod.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 148
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
index 85dafcc..e4bcb61 100644
--- a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 148
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.cast.frag.out b/Test/baseResults/hlsl.cast.frag.out
index 0aa11be..aa657f3 100644
--- a/Test/baseResults/hlsl.cast.frag.out
+++ b/Test/baseResults/hlsl.cast.frag.out
@@ -70,7 +70,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.cbuffer-identifier.vert.out b/Test/baseResults/hlsl.cbuffer-identifier.vert.out
index f7225f8..5cec136 100644
--- a/Test/baseResults/hlsl.cbuffer-identifier.vert.out
+++ b/Test/baseResults/hlsl.cbuffer-identifier.vert.out
@@ -250,7 +250,7 @@
 0:?     'input.Norm' (layout( location=1) in 3-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 93
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.charLit.vert.out b/Test/baseResults/hlsl.charLit.vert.out
index b09fc81..4846f8f 100644
--- a/Test/baseResults/hlsl.charLit.vert.out
+++ b/Test/baseResults/hlsl.charLit.vert.out
@@ -146,7 +146,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 58
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clip.frag.out b/Test/baseResults/hlsl.clip.frag.out
index dbf99bf..a0ebb74 100644
--- a/Test/baseResults/hlsl.clip.frag.out
+++ b/Test/baseResults/hlsl.clip.frag.out
@@ -74,7 +74,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-1.frag.out b/Test/baseResults/hlsl.clipdistance-1.frag.out
index f223ddc..4382505 100644
--- a/Test/baseResults/hlsl.clipdistance-1.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-1.frag.out
@@ -98,7 +98,7 @@
 0:?     'cull' ( in 1-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-1.geom.out b/Test/baseResults/hlsl.clipdistance-1.geom.out
index 144b877..5348359 100644
--- a/Test/baseResults/hlsl.clipdistance-1.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-1.geom.out
@@ -550,7 +550,7 @@
 0:?     'OutputStream.clip' ( out 2-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 118
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-1.vert.out b/Test/baseResults/hlsl.clipdistance-1.vert.out
index d1d1370..7d8b49f 100644
--- a/Test/baseResults/hlsl.clipdistance-1.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-1.vert.out
@@ -108,7 +108,7 @@
 0:?     'cull' ( out 1-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-2.frag.out b/Test/baseResults/hlsl.clipdistance-2.frag.out
index 64604eb..d1da7bc 100644
--- a/Test/baseResults/hlsl.clipdistance-2.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-2.frag.out
@@ -290,7 +290,7 @@
 0:?     'cull' ( in 4-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-2.geom.out b/Test/baseResults/hlsl.clipdistance-2.geom.out
index a8abd02..bdee84f 100644
--- a/Test/baseResults/hlsl.clipdistance-2.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-2.geom.out
@@ -724,7 +724,7 @@
 0:?     'OutputStream.clip' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 128
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-2.vert.out b/Test/baseResults/hlsl.clipdistance-2.vert.out
index 397a25d..77bd23d 100644
--- a/Test/baseResults/hlsl.clipdistance-2.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-2.vert.out
@@ -420,7 +420,7 @@
 0:?     'cull' ( out 4-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-3.frag.out b/Test/baseResults/hlsl.clipdistance-3.frag.out
index 3b5082e..c7eda56 100644
--- a/Test/baseResults/hlsl.clipdistance-3.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-3.frag.out
@@ -98,7 +98,7 @@
 0:?     'cull' ( in 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-3.geom.out b/Test/baseResults/hlsl.clipdistance-3.geom.out
index f8ba5c6..2e6b5f6 100644
--- a/Test/baseResults/hlsl.clipdistance-3.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-3.geom.out
@@ -630,7 +630,7 @@
 0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 127
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-3.vert.out b/Test/baseResults/hlsl.clipdistance-3.vert.out
index 01afd17..c9289a5 100644
--- a/Test/baseResults/hlsl.clipdistance-3.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-3.vert.out
@@ -136,7 +136,7 @@
 0:?     'cull' ( out 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 51
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-4.frag.out b/Test/baseResults/hlsl.clipdistance-4.frag.out
index 95f81c9..8a46b15 100644
--- a/Test/baseResults/hlsl.clipdistance-4.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-4.frag.out
@@ -174,7 +174,7 @@
 0:?     'v.ClipRect' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-4.geom.out b/Test/baseResults/hlsl.clipdistance-4.geom.out
index 1096e02..31d3205 100644
--- a/Test/baseResults/hlsl.clipdistance-4.geom.out
+++ b/Test/baseResults/hlsl.clipdistance-4.geom.out
@@ -612,7 +612,7 @@
 0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 130
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.clipdistance-4.vert.out b/Test/baseResults/hlsl.clipdistance-4.vert.out
index d05fae4..7fca9d4 100644
--- a/Test/baseResults/hlsl.clipdistance-4.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-4.vert.out
@@ -270,7 +270,7 @@
 0:?     '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-5.frag.out b/Test/baseResults/hlsl.clipdistance-5.frag.out
index afdd4c4..f0adb05 100644
--- a/Test/baseResults/hlsl.clipdistance-5.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-5.frag.out
@@ -232,7 +232,7 @@
 0:?     'v.ClipRect' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-5.vert.out b/Test/baseResults/hlsl.clipdistance-5.vert.out
index 3e8f1fe..264c22c 100644
--- a/Test/baseResults/hlsl.clipdistance-5.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-5.vert.out
@@ -318,7 +318,7 @@
 0:?     '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-6.frag.out b/Test/baseResults/hlsl.clipdistance-6.frag.out
index 3ee8065..49c225a 100644
--- a/Test/baseResults/hlsl.clipdistance-6.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-6.frag.out
@@ -282,7 +282,7 @@
 0:?     'v.clip1' ( in 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 79
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-6.vert.out b/Test/baseResults/hlsl.clipdistance-6.vert.out
index a386d0a..024d028 100644
--- a/Test/baseResults/hlsl.clipdistance-6.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-6.vert.out
@@ -428,7 +428,7 @@
 0:?     '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 86
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-7.frag.out b/Test/baseResults/hlsl.clipdistance-7.frag.out
index 94b6a79..5ff568e 100644
--- a/Test/baseResults/hlsl.clipdistance-7.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-7.frag.out
@@ -270,7 +270,7 @@
 0:?     'v.clip1' ( in 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-7.vert.out b/Test/baseResults/hlsl.clipdistance-7.vert.out
index 87e34bd..24eced8 100644
--- a/Test/baseResults/hlsl.clipdistance-7.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-7.vert.out
@@ -384,7 +384,7 @@
 0:?     '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 81
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-8.frag.out b/Test/baseResults/hlsl.clipdistance-8.frag.out
index 98c9505..f4e55ac 100644
--- a/Test/baseResults/hlsl.clipdistance-8.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-8.frag.out
@@ -186,7 +186,7 @@
 0:?     'v.clip1' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-8.vert.out b/Test/baseResults/hlsl.clipdistance-8.vert.out
index 88800e3..456e11f 100644
--- a/Test/baseResults/hlsl.clipdistance-8.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-8.vert.out
@@ -240,7 +240,7 @@
 0:?     '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-9.frag.out b/Test/baseResults/hlsl.clipdistance-9.frag.out
index ff7f261..0a17eaf 100644
--- a/Test/baseResults/hlsl.clipdistance-9.frag.out
+++ b/Test/baseResults/hlsl.clipdistance-9.frag.out
@@ -144,7 +144,7 @@
 0:?     'clip0' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 68
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.clipdistance-9.vert.out b/Test/baseResults/hlsl.clipdistance-9.vert.out
index 2d0c9b0..61b996f 100644
--- a/Test/baseResults/hlsl.clipdistance-9.vert.out
+++ b/Test/baseResults/hlsl.clipdistance-9.vert.out
@@ -194,7 +194,7 @@
 0:?     'clip0' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 67
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.color.hull.tesc.out b/Test/baseResults/hlsl.color.hull.tesc.out
index 72e0b7e..c5be8e4 100644
--- a/Test/baseResults/hlsl.color.hull.tesc.out
+++ b/Test/baseResults/hlsl.color.hull.tesc.out
@@ -356,7 +356,7 @@
 0:?     '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 127
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.comparison.vec.frag.out b/Test/baseResults/hlsl.comparison.vec.frag.out
index ff73e17..5936c9a 100644
--- a/Test/baseResults/hlsl.comparison.vec.frag.out
+++ b/Test/baseResults/hlsl.comparison.vec.frag.out
@@ -262,7 +262,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.conditional.frag.out b/Test/baseResults/hlsl.conditional.frag.out
index 7df88e7..e23d49c 100644
--- a/Test/baseResults/hlsl.conditional.frag.out
+++ b/Test/baseResults/hlsl.conditional.frag.out
@@ -522,7 +522,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 206
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constantbuffer.frag.out b/Test/baseResults/hlsl.constantbuffer.frag.out
index fa8881d..48d849b 100644
--- a/Test/baseResults/hlsl.constantbuffer.frag.out
+++ b/Test/baseResults/hlsl.constantbuffer.frag.out
@@ -133,7 +133,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
@@ -240,6 +240,5 @@
               60:    7(fvec4)   CompositeConstruct 59 59 59 59
                                 ReturnValue 60
               30:             Label
-              62:    7(fvec4) Undef
-                              ReturnValue 62
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.constructArray.vert.out b/Test/baseResults/hlsl.constructArray.vert.out
index 6e18ad9..8ba41bc 100644
--- a/Test/baseResults/hlsl.constructArray.vert.out
+++ b/Test/baseResults/hlsl.constructArray.vert.out
@@ -268,7 +268,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constructexpr.frag.out b/Test/baseResults/hlsl.constructexpr.frag.out
index 227c7e1..085821a 100644
--- a/Test/baseResults/hlsl.constructexpr.frag.out
+++ b/Test/baseResults/hlsl.constructexpr.frag.out
@@ -104,7 +104,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.constructimat.frag.out b/Test/baseResults/hlsl.constructimat.frag.out
index 075dabb..a5014db 100644
--- a/Test/baseResults/hlsl.constructimat.frag.out
+++ b/Test/baseResults/hlsl.constructimat.frag.out
@@ -545,7 +545,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.coverage.frag.out b/Test/baseResults/hlsl.coverage.frag.out
index 691d643..a148073 100644
--- a/Test/baseResults/hlsl.coverage.frag.out
+++ b/Test/baseResults/hlsl.coverage.frag.out
@@ -119,7 +119,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.dashI.vert.out b/Test/baseResults/hlsl.dashI.vert.out
index eb9406b..d5e7e20 100644
--- a/Test/baseResults/hlsl.dashI.vert.out
+++ b/Test/baseResults/hlsl.dashI.vert.out
@@ -1,6 +1,6 @@
 hlsl.dashI.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
index 2bc08da..559708d 100644
--- a/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
+++ b/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
@@ -1,6 +1,6 @@
 hlsl.deadFunctionMissingBody.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.depthGreater.frag.out b/Test/baseResults/hlsl.depthGreater.frag.out
index df6311f..7092802 100644
--- a/Test/baseResults/hlsl.depthGreater.frag.out
+++ b/Test/baseResults/hlsl.depthGreater.frag.out
@@ -50,7 +50,7 @@
 0:?     'depth' ( out float FragDepth)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.depthLess.frag.out b/Test/baseResults/hlsl.depthLess.frag.out
index d2b9d8e..275eaf1 100644
--- a/Test/baseResults/hlsl.depthLess.frag.out
+++ b/Test/baseResults/hlsl.depthLess.frag.out
@@ -42,7 +42,7 @@
 0:?     '@entryPointOutput' ( out float FragDepth)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 16
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.discard.frag.out b/Test/baseResults/hlsl.discard.frag.out
index cc7c866..23ed871 100644
--- a/Test/baseResults/hlsl.discard.frag.out
+++ b/Test/baseResults/hlsl.discard.frag.out
@@ -108,7 +108,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.doLoop.frag.out b/Test/baseResults/hlsl.doLoop.frag.out
index bb56465..2b65a76 100644
--- a/Test/baseResults/hlsl.doLoop.frag.out
+++ b/Test/baseResults/hlsl.doLoop.frag.out
@@ -2,68 +2,95 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in float)
+0:1  Function Definition: f0( ( temp void)
+0:1    Function Parameters: 
 0:?     Sequence
-0:3      Loop with condition not tested first: Unroll
-0:3        Loop Condition
-0:3        Constant:
-0:3          false (const bool)
-0:3        No loop body
-0:4      Loop with condition not tested first: Unroll
-0:4        Loop Condition
-0:4        Constant:
-0:4          false (const bool)
-0:4        No loop body
-0:5      Loop with condition not tested first
-0:5        Loop Condition
-0:5        Compare Greater Than ( temp bool)
-0:5          'input' ( in float)
-0:5          Constant:
-0:5            2.000000
-0:5        Loop Body
-0:?         Sequence
-0:5          Branch: Return with expression
-0:5            Construct vec4 ( temp 4-component vector of float)
-0:5              'input' ( in float)
-0:6      Loop with condition not tested first
+0:2      Loop with condition not tested first: Unroll
+0:2        Loop Condition
+0:2        Constant:
+0:2          false (const bool)
+0:2        No loop body
+0:5  Function Definition: f1( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      Loop with condition not tested first: Unroll
 0:6        Loop Condition
-0:6        Compare Less Than ( temp bool)
-0:6          'input' ( in float)
-0:6          Constant:
-0:6            10.000000
-0:6        Loop Body
-0:6        Pre-Increment ( temp float)
-0:6          'input' ( in float)
-0:7      Loop with condition not tested first
-0:7        Loop Condition
-0:7        Compare Less Than ( temp bool)
-0:7          Pre-Increment ( temp float)
-0:7            'input' ( in float)
-0:7          Constant:
-0:7            10.000000
-0:7        Loop Body
-0:7        Loop with condition tested first
-0:7          Loop Condition
-0:7          Compare Less Than ( temp bool)
-0:7            Pre-Increment ( temp float)
-0:7              'input' ( in float)
-0:7            Constant:
-0:7              10.000000
-0:7          No loop body
-0:8      Branch: Return with expression
-0:8        Construct vec4 ( temp 4-component vector of float)
-0:8          'input' ( in float)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:6        Constant:
+0:6          false (const bool)
+0:6        No loop body
+0:9  Function Definition: f2(f1; ( temp float)
+0:9    Function Parameters: 
+0:9      'input' ( in float)
 0:?     Sequence
-0:2      move second child to first child ( temp float)
+0:10      Loop with condition not tested first
+0:10        Loop Condition
+0:10        Compare Greater Than ( temp bool)
+0:10          'input' ( in float)
+0:10          Constant:
+0:10            2.000000
+0:10        Loop Body
+0:?         Sequence
+0:10          Branch: Return with expression
+0:10            Construct float ( temp float)
+0:10              Construct vec4 ( temp 4-component vector of float)
+0:10                'input' ( in float)
+0:13  Function Definition: f3(f1; ( temp void)
+0:13    Function Parameters: 
+0:13      'input' ( in float)
+0:?     Sequence
+0:14      Loop with condition not tested first
+0:14        Loop Condition
+0:14        Compare Less Than ( temp bool)
+0:14          'input' ( in float)
+0:14          Constant:
+0:14            10.000000
+0:14        Loop Body
+0:14        Pre-Increment ( temp float)
+0:14          'input' ( in float)
+0:17  Function Definition: f4(f1; ( temp void)
+0:17    Function Parameters: 
+0:17      'input' ( in float)
+0:?     Sequence
+0:18      Loop with condition not tested first
+0:18        Loop Condition
+0:18        Compare Less Than ( temp bool)
+0:18          Pre-Increment ( temp float)
+0:18            'input' ( in float)
+0:18          Constant:
+0:18            10.000000
+0:18        Loop Body
+0:18        Loop with condition tested first
+0:18          Loop Condition
+0:18          Compare Less Than ( temp bool)
+0:18            Pre-Increment ( temp float)
+0:18              'input' ( in float)
+0:18            Constant:
+0:18              10.000000
+0:18          No loop body
+0:22  Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:22    Function Parameters: 
+0:22      'input' ( in float)
+0:?     Sequence
+0:23      Function Call: f0( ( temp void)
+0:24      Function Call: f1( ( temp void)
+0:25      Function Call: f2(f1; ( temp float)
+0:25        'input' ( in float)
+0:26      Function Call: f3(f1; ( temp void)
+0:26        'input' ( in float)
+0:27      Function Call: f4(f1; ( temp void)
+0:27        'input' ( in float)
+0:28      Branch: Return with expression
+0:28        Construct vec4 ( temp 4-component vector of float)
+0:28          'input' ( in float)
+0:22  Function Definition: PixelShaderFunction( ( temp void)
+0:22    Function Parameters: 
+0:?     Sequence
+0:22      move second child to first child ( temp float)
 0:?         'input' ( temp float)
 0:?         'input' (layout( location=0) in float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:22      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:22        Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
 0:?           'input' ( temp float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
@@ -76,196 +103,272 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in float)
+0:1  Function Definition: f0( ( temp void)
+0:1    Function Parameters: 
 0:?     Sequence
-0:3      Loop with condition not tested first: Unroll
-0:3        Loop Condition
-0:3        Constant:
-0:3          false (const bool)
-0:3        No loop body
-0:4      Loop with condition not tested first: Unroll
-0:4        Loop Condition
-0:4        Constant:
-0:4          false (const bool)
-0:4        No loop body
-0:5      Loop with condition not tested first
-0:5        Loop Condition
-0:5        Compare Greater Than ( temp bool)
-0:5          'input' ( in float)
-0:5          Constant:
-0:5            2.000000
-0:5        Loop Body
-0:?         Sequence
-0:5          Branch: Return with expression
-0:5            Construct vec4 ( temp 4-component vector of float)
-0:5              'input' ( in float)
-0:6      Loop with condition not tested first
+0:2      Loop with condition not tested first: Unroll
+0:2        Loop Condition
+0:2        Constant:
+0:2          false (const bool)
+0:2        No loop body
+0:5  Function Definition: f1( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      Loop with condition not tested first: Unroll
 0:6        Loop Condition
-0:6        Compare Less Than ( temp bool)
-0:6          'input' ( in float)
-0:6          Constant:
-0:6            10.000000
-0:6        Loop Body
-0:6        Pre-Increment ( temp float)
-0:6          'input' ( in float)
-0:7      Loop with condition not tested first
-0:7        Loop Condition
-0:7        Compare Less Than ( temp bool)
-0:7          Pre-Increment ( temp float)
-0:7            'input' ( in float)
-0:7          Constant:
-0:7            10.000000
-0:7        Loop Body
-0:7        Loop with condition tested first
-0:7          Loop Condition
-0:7          Compare Less Than ( temp bool)
-0:7            Pre-Increment ( temp float)
-0:7              'input' ( in float)
-0:7            Constant:
-0:7              10.000000
-0:7          No loop body
-0:8      Branch: Return with expression
-0:8        Construct vec4 ( temp 4-component vector of float)
-0:8          'input' ( in float)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:6        Constant:
+0:6          false (const bool)
+0:6        No loop body
+0:9  Function Definition: f2(f1; ( temp float)
+0:9    Function Parameters: 
+0:9      'input' ( in float)
 0:?     Sequence
-0:2      move second child to first child ( temp float)
+0:10      Loop with condition not tested first
+0:10        Loop Condition
+0:10        Compare Greater Than ( temp bool)
+0:10          'input' ( in float)
+0:10          Constant:
+0:10            2.000000
+0:10        Loop Body
+0:?         Sequence
+0:10          Branch: Return with expression
+0:10            Construct float ( temp float)
+0:10              Construct vec4 ( temp 4-component vector of float)
+0:10                'input' ( in float)
+0:13  Function Definition: f3(f1; ( temp void)
+0:13    Function Parameters: 
+0:13      'input' ( in float)
+0:?     Sequence
+0:14      Loop with condition not tested first
+0:14        Loop Condition
+0:14        Compare Less Than ( temp bool)
+0:14          'input' ( in float)
+0:14          Constant:
+0:14            10.000000
+0:14        Loop Body
+0:14        Pre-Increment ( temp float)
+0:14          'input' ( in float)
+0:17  Function Definition: f4(f1; ( temp void)
+0:17    Function Parameters: 
+0:17      'input' ( in float)
+0:?     Sequence
+0:18      Loop with condition not tested first
+0:18        Loop Condition
+0:18        Compare Less Than ( temp bool)
+0:18          Pre-Increment ( temp float)
+0:18            'input' ( in float)
+0:18          Constant:
+0:18            10.000000
+0:18        Loop Body
+0:18        Loop with condition tested first
+0:18          Loop Condition
+0:18          Compare Less Than ( temp bool)
+0:18            Pre-Increment ( temp float)
+0:18              'input' ( in float)
+0:18            Constant:
+0:18              10.000000
+0:18          No loop body
+0:22  Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:22    Function Parameters: 
+0:22      'input' ( in float)
+0:?     Sequence
+0:23      Function Call: f0( ( temp void)
+0:24      Function Call: f1( ( temp void)
+0:25      Function Call: f2(f1; ( temp float)
+0:25        'input' ( in float)
+0:26      Function Call: f3(f1; ( temp void)
+0:26        'input' ( in float)
+0:27      Function Call: f4(f1; ( temp void)
+0:27        'input' ( in float)
+0:28      Branch: Return with expression
+0:28        Construct vec4 ( temp 4-component vector of float)
+0:28          'input' ( in float)
+0:22  Function Definition: PixelShaderFunction( ( temp void)
+0:22    Function Parameters: 
+0:?     Sequence
+0:22      move second child to first child ( temp float)
 0:?         'input' ( temp float)
 0:?         'input' (layout( location=0) in float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:22      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:22        Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
 0:?           'input' ( temp float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'input' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 71
+// Generated by (magic number): 80008
+// Id's are bound by 99
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 64 67
+                              EntryPoint Fragment 4  "PixelShaderFunction" 92 95
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
-                              Name 11  "@PixelShaderFunction(f1;"
-                              Name 10  "input"
-                              Name 62  "input"
-                              Name 64  "input"
-                              Name 67  "@entryPointOutput"
-                              Name 68  "param"
-                              Decorate 64(input) Location 0
-                              Decorate 67(@entryPointOutput) Location 0
+                              Name 6  "f0("
+                              Name 8  "f1("
+                              Name 14  "f2(f1;"
+                              Name 13  "input"
+                              Name 18  "f3(f1;"
+                              Name 17  "input"
+                              Name 21  "f4(f1;"
+                              Name 20  "input"
+                              Name 26  "@PixelShaderFunction(f1;"
+                              Name 25  "input"
+                              Name 77  "param"
+                              Name 80  "param"
+                              Name 83  "param"
+                              Name 90  "input"
+                              Name 92  "input"
+                              Name 95  "@entryPointOutput"
+                              Name 96  "param"
+                              Decorate 92(input) Location 0
+                              Decorate 95(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeFloat 32
-               7:             TypePointer Function 6(float)
-               8:             TypeVector 6(float) 4
-               9:             TypeFunction 8(fvec4) 7(ptr)
-              17:             TypeBool
-              18:    17(bool) ConstantFalse
-              31:    6(float) Constant 1073741824
-              38:    6(float) Constant 1065353216
-              41:    6(float) Constant 1092616192
-              63:             TypePointer Input 6(float)
-       64(input):     63(ptr) Variable Input
-              66:             TypePointer Output 8(fvec4)
-67(@entryPointOutput):     66(ptr) Variable Output
+              10:             TypeFloat 32
+              11:             TypePointer Function 10(float)
+              12:             TypeFunction 10(float) 11(ptr)
+              16:             TypeFunction 2 11(ptr)
+              23:             TypeVector 10(float) 4
+              24:             TypeFunction 23(fvec4) 11(ptr)
+              32:             TypeBool
+              33:    32(bool) ConstantFalse
+              47:   10(float) Constant 1073741824
+              55:   10(float) Constant 1065353216
+              58:   10(float) Constant 1092616192
+              91:             TypePointer Input 10(float)
+       92(input):     91(ptr) Variable Input
+              94:             TypePointer Output 23(fvec4)
+95(@entryPointOutput):     94(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       62(input):      7(ptr) Variable Function
-       68(param):      7(ptr) Variable Function
-              65:    6(float) Load 64(input)
-                              Store 62(input) 65
-              69:    6(float) Load 62(input)
-                              Store 68(param) 69
-              70:    8(fvec4) FunctionCall 11(@PixelShaderFunction(f1;) 68(param)
-                              Store 67(@entryPointOutput) 70
+       90(input):     11(ptr) Variable Function
+       96(param):     11(ptr) Variable Function
+              93:   10(float) Load 92(input)
+                              Store 90(input) 93
+              97:   10(float) Load 90(input)
+                              Store 96(param) 97
+              98:   23(fvec4) FunctionCall 26(@PixelShaderFunction(f1;) 96(param)
+                              Store 95(@entryPointOutput) 98
                               Return
                               FunctionEnd
-11(@PixelShaderFunction(f1;):    8(fvec4) Function None 9
-       10(input):      7(ptr) FunctionParameter
-              12:             Label
-                              Branch 13
-              13:             Label
-                              LoopMerge 15 16 Unroll 
-                              Branch 14
-              14:             Label
-                              Branch 16
-              16:             Label
-                              BranchConditional 18 13 15
-              15:             Label
-                              Branch 19
-              19:             Label
-                              LoopMerge 21 22 Unroll 
-                              Branch 20
-              20:             Label
-                              Branch 22
-              22:             Label
-                              BranchConditional 18 19 21
-              21:             Label
-                              Branch 23
-              23:             Label
-                              LoopMerge 25 26 None
-                              Branch 24
-              24:             Label
-              27:    6(float) Load 10(input)
-              28:    8(fvec4) CompositeConstruct 27 27 27 27
-                              ReturnValue 28
-              26:             Label
-              30:    6(float) Load 10(input)
-              32:    17(bool) FOrdGreaterThan 30 31
-                              BranchConditional 32 23 25
-              25:             Label
-                              Branch 33
-              33:             Label
-                              LoopMerge 35 36 None
+          6(f0():           2 Function None 3
+               7:             Label
+                              Branch 28
+              28:             Label
+                              LoopMerge 30 31 Unroll 
+                              Branch 29
+              29:             Label
+                              Branch 31
+              31:             Label
+                              BranchConditional 33 28 30
+              30:             Label
+                              Return
+                              FunctionEnd
+          8(f1():           2 Function None 3
+               9:             Label
                               Branch 34
               34:             Label
-              37:    6(float) Load 10(input)
-              39:    6(float) FAdd 37 38
-                              Store 10(input) 39
-                              Branch 36
-              36:             Label
-              40:    6(float) Load 10(input)
-              42:    17(bool) FOrdLessThan 40 41
-                              BranchConditional 42 33 35
+                              LoopMerge 36 37 Unroll 
+                              Branch 35
               35:             Label
-                              Branch 43
-              43:             Label
-                              LoopMerge 45 46 None
-                              Branch 44
-              44:             Label
-                              Branch 47
-              47:             Label
-                              LoopMerge 49 50 None
+                              Branch 37
+              37:             Label
+                              BranchConditional 33 34 36
+              36:             Label
+                              Return
+                              FunctionEnd
+      14(f2(f1;):   10(float) Function None 12
+       13(input):     11(ptr) FunctionParameter
+              15:             Label
+                              Branch 38
+              38:             Label
+                              LoopMerge 40 41 None
+                              Branch 39
+              39:             Label
+              42:   10(float) Load 13(input)
+              43:   23(fvec4) CompositeConstruct 42 42 42 42
+              44:   10(float) CompositeExtract 43 0
+                              ReturnValue 44
+              41:             Label
+                              Branch 38
+              40:             Label
+                              Unreachable
+                              FunctionEnd
+      18(f3(f1;):           2 Function None 16
+       17(input):     11(ptr) FunctionParameter
+              19:             Label
+                              Branch 50
+              50:             Label
+                              LoopMerge 52 53 None
                               Branch 51
               51:             Label
-              52:    6(float) Load 10(input)
-              53:    6(float) FAdd 52 38
-                              Store 10(input) 53
-              54:    17(bool) FOrdLessThan 53 41
-                              BranchConditional 54 48 49
-              48:               Label
-                                Branch 50
-              50:               Label
-                                Branch 47
-              49:             Label
-                              Branch 46
-              46:             Label
-              55:    6(float) Load 10(input)
-              56:    6(float) FAdd 55 38
-                              Store 10(input) 56
-              57:    17(bool) FOrdLessThan 56 41
-                              BranchConditional 57 43 45
-              45:             Label
-              58:    6(float) Load 10(input)
-              59:    8(fvec4) CompositeConstruct 58 58 58 58
-                              ReturnValue 59
+              54:   10(float) Load 17(input)
+              56:   10(float) FAdd 54 55
+                              Store 17(input) 56
+                              Branch 53
+              53:             Label
+              57:   10(float) Load 17(input)
+              59:    32(bool) FOrdLessThan 57 58
+                              BranchConditional 59 50 52
+              52:             Label
+                              Return
+                              FunctionEnd
+      21(f4(f1;):           2 Function None 16
+       20(input):     11(ptr) FunctionParameter
+              22:             Label
+                              Branch 60
+              60:             Label
+                              LoopMerge 62 63 None
+                              Branch 61
+              61:             Label
+                              Branch 64
+              64:             Label
+                              LoopMerge 66 67 None
+                              Branch 68
+              68:             Label
+              69:   10(float) Load 20(input)
+              70:   10(float) FAdd 69 55
+                              Store 20(input) 70
+              71:    32(bool) FOrdLessThan 70 58
+                              BranchConditional 71 65 66
+              65:               Label
+                                Branch 67
+              67:               Label
+                                Branch 64
+              66:             Label
+                              Branch 63
+              63:             Label
+              72:   10(float) Load 20(input)
+              73:   10(float) FAdd 72 55
+                              Store 20(input) 73
+              74:    32(bool) FOrdLessThan 73 58
+                              BranchConditional 74 60 62
+              62:             Label
+                              Return
+                              FunctionEnd
+26(@PixelShaderFunction(f1;):   23(fvec4) Function None 24
+       25(input):     11(ptr) FunctionParameter
+              27:             Label
+       77(param):     11(ptr) Variable Function
+       80(param):     11(ptr) Variable Function
+       83(param):     11(ptr) Variable Function
+              75:           2 FunctionCall 6(f0()
+              76:           2 FunctionCall 8(f1()
+              78:   10(float) Load 25(input)
+                              Store 77(param) 78
+              79:   10(float) FunctionCall 14(f2(f1;) 77(param)
+              81:   10(float) Load 25(input)
+                              Store 80(param) 81
+              82:           2 FunctionCall 18(f3(f1;) 80(param)
+              84:   10(float) Load 25(input)
+                              Store 83(param) 84
+              85:           2 FunctionCall 21(f4(f1;) 83(param)
+              86:   10(float) Load 25(input)
+              87:   23(fvec4) CompositeConstruct 86 86 86 86
+                              ReturnValue 87
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.domain.1.tese.out b/Test/baseResults/hlsl.domain.1.tese.out
index 4bc8bac..0b7b275 100644
--- a/Test/baseResults/hlsl.domain.1.tese.out
+++ b/Test/baseResults/hlsl.domain.1.tese.out
@@ -286,7 +286,7 @@
 0:?     'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 103
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.domain.2.tese.out b/Test/baseResults/hlsl.domain.2.tese.out
index 827f80f..e6ec924 100644
--- a/Test/baseResults/hlsl.domain.2.tese.out
+++ b/Test/baseResults/hlsl.domain.2.tese.out
@@ -284,7 +284,7 @@
 0:?     'pcf_data.foo' (layout( location=2) patch in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 98
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.domain.3.tese.out b/Test/baseResults/hlsl.domain.3.tese.out
index dd3d502..4b8584c 100644
--- a/Test/baseResults/hlsl.domain.3.tese.out
+++ b/Test/baseResults/hlsl.domain.3.tese.out
@@ -264,7 +264,7 @@
 0:?     'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 100
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.earlydepthstencil.frag.out b/Test/baseResults/hlsl.earlydepthstencil.frag.out
index e598a51..f30b89a 100755
--- a/Test/baseResults/hlsl.earlydepthstencil.frag.out
+++ b/Test/baseResults/hlsl.earlydepthstencil.frag.out
@@ -108,7 +108,7 @@
 0:?     'input.Position' ( in 4-component vector of float FragCoord)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.emptystruct.init.vert.out b/Test/baseResults/hlsl.emptystruct.init.vert.out
index 410915c..c3c3aef 100644
--- a/Test/baseResults/hlsl.emptystruct.init.vert.out
+++ b/Test/baseResults/hlsl.emptystruct.init.vert.out
@@ -60,7 +60,7 @@
 0:?     'vertexIndex' (layout( location=0) in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.emptystructreturn.frag.out b/Test/baseResults/hlsl.emptystructreturn.frag.out
index 1c9953b..bb9c26c 100644
--- a/Test/baseResults/hlsl.emptystructreturn.frag.out
+++ b/Test/baseResults/hlsl.emptystructreturn.frag.out
@@ -51,7 +51,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.emptystructreturn.vert.out b/Test/baseResults/hlsl.emptystructreturn.vert.out
index 65d326d..22027bf 100644
--- a/Test/baseResults/hlsl.emptystructreturn.vert.out
+++ b/Test/baseResults/hlsl.emptystructreturn.vert.out
@@ -49,7 +49,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.entry-in.frag.out b/Test/baseResults/hlsl.entry-in.frag.out
index dc9eea4..d65532d 100644
--- a/Test/baseResults/hlsl.entry-in.frag.out
+++ b/Test/baseResults/hlsl.entry-in.frag.out
@@ -166,7 +166,7 @@
 0:?     'i.i2' (layout( location=1) flat in 2-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 74
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.entry-out.frag.out b/Test/baseResults/hlsl.entry-out.frag.out
index 6ca3011..e1af284 100644
--- a/Test/baseResults/hlsl.entry-out.frag.out
+++ b/Test/baseResults/hlsl.entry-out.frag.out
@@ -244,7 +244,7 @@
 0:?     'out3.i' (layout( location=5) out 2-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 89
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.entry.rename.frag.out b/Test/baseResults/hlsl.entry.rename.frag.out
index 9e23396..b0e958b 100644
--- a/Test/baseResults/hlsl.entry.rename.frag.out
+++ b/Test/baseResults/hlsl.entry.rename.frag.out
@@ -72,7 +72,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out b/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
index 61367d6..c4e6baf 100644
--- a/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
+++ b/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
@@ -1,6 +1,6 @@
 hlsl.explicitDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.explicitDescriptorSet.frag.out b/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
index 9bc2f01..9665ad2 100644
--- a/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
+++ b/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
@@ -1,6 +1,6 @@
 hlsl.explicitDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flatten.return.frag.out b/Test/baseResults/hlsl.flatten.return.frag.out
index e47fe3e..bc388f8 100644
--- a/Test/baseResults/hlsl.flatten.return.frag.out
+++ b/Test/baseResults/hlsl.flatten.return.frag.out
@@ -118,7 +118,7 @@
 0:?     '@entryPointOutput.other_struct_member3' (layout( location=3) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 49
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenOpaque.frag.out b/Test/baseResults/hlsl.flattenOpaque.frag.out
index 94d02f4..688656c 100644
--- a/Test/baseResults/hlsl.flattenOpaque.frag.out
+++ b/Test/baseResults/hlsl.flattenOpaque.frag.out
@@ -295,7 +295,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 122
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
index a5a5944..6d16858 100644
--- a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
+++ b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
@@ -165,7 +165,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 82
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
index 5a2aa2a..62a2e8e 100644
--- a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -107,7 +107,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 59
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenSubset.frag.out b/Test/baseResults/hlsl.flattenSubset.frag.out
index 262a29d..f6da1a9 100644
--- a/Test/baseResults/hlsl.flattenSubset.frag.out
+++ b/Test/baseResults/hlsl.flattenSubset.frag.out
@@ -115,7 +115,7 @@
 0:?     'vpos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.flattenSubset2.frag.out b/Test/baseResults/hlsl.flattenSubset2.frag.out
index 77dc4cd..40d92a9 100644
--- a/Test/baseResults/hlsl.flattenSubset2.frag.out
+++ b/Test/baseResults/hlsl.flattenSubset2.frag.out
@@ -149,7 +149,7 @@
 0:?     'vpos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.float1.frag.out b/Test/baseResults/hlsl.float1.frag.out
index 49827dc..0f7600e 100644
--- a/Test/baseResults/hlsl.float1.frag.out
+++ b/Test/baseResults/hlsl.float1.frag.out
@@ -65,7 +65,7 @@
 0:?     'scalar' ( global float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out
index 8dc3307..8e8c821 100644
--- a/Test/baseResults/hlsl.float4.frag.out
+++ b/Test/baseResults/hlsl.float4.frag.out
@@ -42,7 +42,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform bool ff1, layout( offset=20) uniform float ff2, layout( binding=0 offset=32) uniform 4-component vector of float ff3, layout( binding=1 offset=48) uniform 4-component vector of float ff4})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.forLoop.frag.out b/Test/baseResults/hlsl.forLoop.frag.out
index 3e835f8..b6c2710 100644
--- a/Test/baseResults/hlsl.forLoop.frag.out
+++ b/Test/baseResults/hlsl.forLoop.frag.out
@@ -2,197 +2,251 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in 4-component vector of float)
+0:1  Function Definition: f0( ( temp void)
+0:1    Function Parameters: 
 0:?     Sequence
 0:?       Sequence
-0:3        Loop with condition tested first
-0:3          No loop condition
-0:3          No loop body
-0:4      Sequence
-0:4        Pre-Increment ( temp 4-component vector of float)
-0:4          'input' ( in 4-component vector of float)
-0:4        Loop with condition tested first
-0:4          No loop condition
-0:4          No loop body
-0:?       Sequence
-0:5        Loop with condition tested first: Unroll
-0:5          Loop Condition
-0:5          any ( temp bool)
-0:5            NotEqual ( temp 4-component vector of bool)
-0:5              'input' ( in 4-component vector of float)
-0:5              'input' ( in 4-component vector of float)
-0:5          No loop body
-0:?       Sequence
+0:2        Loop with condition tested first
+0:2          No loop condition
+0:2          No loop body
+0:5  Function Definition: f1(vf4; ( temp void)
+0:5    Function Parameters: 
+0:5      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:6      Sequence
+0:6        Pre-Increment ( temp 4-component vector of float)
+0:6          'input' ( in 4-component vector of float)
 0:6        Loop with condition tested first
-0:6          Loop Condition
-0:6          any ( temp bool)
-0:6            NotEqual ( temp 4-component vector of bool)
-0:6              'input' ( in 4-component vector of float)
-0:6              'input' ( in 4-component vector of float)
-0:6          Loop Body
-0:?           Sequence
-0:6            Branch: Return with expression
-0:6              Negate value ( temp 4-component vector of float)
-0:6                'input' ( in 4-component vector of float)
-0:7      Sequence
-0:7        Pre-Decrement ( temp 4-component vector of float)
-0:7          'input' ( in 4-component vector of float)
-0:7        Loop with condition tested first
-0:7          Loop Condition
-0:7          any ( temp bool)
-0:7            NotEqual ( temp 4-component vector of bool)
-0:7              'input' ( in 4-component vector of float)
-0:7              'input' ( in 4-component vector of float)
-0:7          Loop Body
-0:?           Sequence
-0:7            Branch: Return with expression
-0:7              Negate value ( temp 4-component vector of float)
-0:7                'input' ( in 4-component vector of float)
-0:7          Loop Terminal Expression
-0:7          add second child into first child ( temp 4-component vector of float)
-0:7            'input' ( in 4-component vector of float)
-0:7            Constant:
-0:7              2.000000
+0:6          No loop condition
+0:6          No loop body
+0:9  Function Definition: f2(vf4; ( temp void)
+0:9    Function Parameters: 
+0:9      'input' ( in 4-component vector of float)
+0:?     Sequence
 0:?       Sequence
-0:8        Loop with condition tested first
-0:8          No loop condition
-0:8          Loop Body
-0:8          Test condition and select ( temp void)
-0:8            Condition
-0:8            Compare Greater Than ( temp bool)
-0:8              direct index ( temp float)
-0:8                'input' ( in 4-component vector of float)
-0:8                Constant:
-0:8                  0 (const int)
-0:8              Constant:
-0:8                2.000000
-0:8            true case
-0:8            Branch: Break
+0:10        Loop with condition tested first: Unroll
+0:10          Loop Condition
+0:10          any ( temp bool)
+0:10            NotEqual ( temp 4-component vector of bool)
+0:10              'input' ( in 4-component vector of float)
+0:10              'input' ( in 4-component vector of float)
+0:10          No loop body
+0:13  Function Definition: f3(vf4; ( temp float)
+0:13    Function Parameters: 
+0:13      'input' ( in 4-component vector of float)
+0:?     Sequence
 0:?       Sequence
-0:9        Loop with condition tested first
-0:9          No loop condition
-0:9          Loop Body
-0:9          Test condition and select ( temp void)
-0:9            Condition
-0:9            Compare Greater Than ( temp bool)
-0:9              direct index ( temp float)
-0:9                'input' ( in 4-component vector of float)
-0:9                Constant:
-0:9                  0 (const int)
-0:9              Constant:
-0:9                2.000000
-0:9            true case
-0:9            Branch: Continue
-0:11      Sequence
-0:11        move second child to first child ( temp int)
-0:11          'ii' ( temp int)
-0:11          Constant:
-0:11            -1 (const int)
-0:11        Loop with condition tested first
-0:11          Loop Condition
-0:11          Compare Less Than ( temp bool)
-0:11            'ii' ( temp int)
-0:11            Constant:
-0:11              3 (const int)
-0:11          Loop Body
-0:11          Test condition and select ( temp void)
-0:11            Condition
-0:11            Compare Equal ( temp bool)
-0:11              'ii' ( temp int)
-0:11              Constant:
-0:11                2 (const int)
-0:11            true case
-0:11            Branch: Continue
-0:11          Loop Terminal Expression
-0:11          Pre-Increment ( temp int)
-0:11            'ii' ( temp int)
-0:12      Pre-Decrement ( temp float)
-0:12        'ii' ( temp float)
-0:13      Sequence
-0:13        move second child to first child ( temp int)
-0:13          'first' ( temp int)
-0:13          Constant:
-0:13            0 (const int)
-0:13        move second child to first child ( temp int)
-0:13          'second' ( temp int)
-0:13          Constant:
-0:13            1 (const int)
-0:13        Loop with condition tested first
-0:13          No loop condition
-0:13          Loop Body
-0:13          add ( temp int)
-0:13            'first' ( temp int)
-0:13            'second' ( temp int)
-0:14      Sequence
-0:14        move second child to first child ( temp int)
-0:14          'i' ( temp int)
-0:14          Constant:
-0:14            0 (const int)
-0:14        move second child to first child ( temp int)
-0:14          'count' ( temp int)
-0:14          Convert float to int ( temp int)
-0:14            'ii' ( temp float)
 0:14        Loop with condition tested first
 0:14          Loop Condition
-0:14          Compare Less Than ( temp bool)
-0:14            'i' ( temp int)
-0:14            'count' ( temp int)
-0:14          No loop body
-0:14          Loop Terminal Expression
-0:14          Post-Increment ( temp int)
-0:14            'i' ( temp int)
-0:15      Sequence
-0:15        move second child to first child ( temp float)
-0:15          'first' ( temp float)
-0:15          Constant:
-0:15            0.000000
-0:15        Loop with condition tested first
-0:15          Loop Condition
-0:15          Compare Less Than ( temp bool)
-0:15            'first' ( temp float)
-0:15            direct index ( temp float)
-0:15              'second' ( temp 2-element array of float)
-0:15              Constant:
-0:15                0 (const int)
-0:15          Loop Body
-0:15          add ( temp float)
-0:15            add ( temp float)
-0:15              'first' ( temp float)
-0:15              direct index ( temp float)
-0:15                'second' ( temp 2-element array of float)
-0:15                Constant:
-0:15                  1 (const int)
-0:15            'third' ( temp float)
-0:15          Loop Terminal Expression
-0:15          Pre-Increment ( temp float)
-0:15            direct index ( temp float)
-0:15              'second' ( temp 2-element array of float)
-0:15              Constant:
-0:15                1 (const int)
-0:?       Sequence
-0:16        Comma ( temp float)
-0:16          Comma ( temp float)
-0:16            Pre-Decrement ( temp float)
-0:16              'ii' ( temp float)
-0:16            Pre-Decrement ( temp float)
-0:16              'ii' ( temp float)
-0:16          Pre-Decrement ( temp float)
-0:16            'ii' ( temp float)
-0:16        Loop with condition tested first
-0:16          No loop condition
-0:16          Loop Body
-0:16          'ii' ( temp float)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:14          any ( temp bool)
+0:14            NotEqual ( temp 4-component vector of bool)
+0:14              'input' ( in 4-component vector of float)
+0:14              'input' ( in 4-component vector of float)
+0:14          Loop Body
+0:?           Sequence
+0:14            Branch: Return with expression
+0:14              Construct float ( temp float)
+0:14                Negate value ( temp 4-component vector of float)
+0:14                  'input' ( in 4-component vector of float)
+0:17  Function Definition: f4(vf4; ( temp float)
+0:17    Function Parameters: 
+0:17      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:2      move second child to first child ( temp 4-component vector of float)
+0:18      Sequence
+0:18        Pre-Decrement ( temp 4-component vector of float)
+0:18          'input' ( in 4-component vector of float)
+0:18        Loop with condition tested first
+0:18          Loop Condition
+0:18          any ( temp bool)
+0:18            NotEqual ( temp 4-component vector of bool)
+0:18              'input' ( in 4-component vector of float)
+0:18              'input' ( in 4-component vector of float)
+0:18          Loop Body
+0:?           Sequence
+0:18            Branch: Return with expression
+0:18              Construct float ( temp float)
+0:18                Negate value ( temp 4-component vector of float)
+0:18                  'input' ( in 4-component vector of float)
+0:18          Loop Terminal Expression
+0:18          add second child into first child ( temp 4-component vector of float)
+0:18            'input' ( in 4-component vector of float)
+0:18            Constant:
+0:18              2.000000
+0:21  Function Definition: f5(vf4; ( temp void)
+0:21    Function Parameters: 
+0:21      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:?       Sequence
+0:22        Loop with condition tested first
+0:22          No loop condition
+0:22          Loop Body
+0:22          Test condition and select ( temp void)
+0:22            Condition
+0:22            Compare Greater Than ( temp bool)
+0:22              direct index ( temp float)
+0:22                'input' ( in 4-component vector of float)
+0:22                Constant:
+0:22                  0 (const int)
+0:22              Constant:
+0:22                2.000000
+0:22            true case
+0:22            Branch: Break
+0:25  Function Definition: f6(vf4; ( temp void)
+0:25    Function Parameters: 
+0:25      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:?       Sequence
+0:26        Loop with condition tested first
+0:26          No loop condition
+0:26          Loop Body
+0:26          Test condition and select ( temp void)
+0:26            Condition
+0:26            Compare Greater Than ( temp bool)
+0:26              direct index ( temp float)
+0:26                'input' ( in 4-component vector of float)
+0:26                Constant:
+0:26                  0 (const int)
+0:26              Constant:
+0:26                2.000000
+0:26            true case
+0:26            Branch: Continue
+0:29  Function Definition: f99( ( temp void)
+0:29    Function Parameters: 
+0:?     Sequence
+0:30      Sequence
+0:30        move second child to first child ( temp int)
+0:30          'first' ( temp int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        move second child to first child ( temp int)
+0:30          'second' ( temp int)
+0:30          Constant:
+0:30            1 (const int)
+0:30        Loop with condition tested first
+0:30          No loop condition
+0:30          Loop Body
+0:30          add ( temp int)
+0:30            'first' ( temp int)
+0:30            'second' ( temp int)
+0:33  Function Definition: f100(f1; ( temp void)
+0:33    Function Parameters: 
+0:33      'ii' ( in float)
+0:?     Sequence
+0:?       Sequence
+0:34        Comma ( temp float)
+0:34          Comma ( temp float)
+0:34            Pre-Decrement ( temp float)
+0:34              'ii' ( in float)
+0:34            Pre-Decrement ( temp float)
+0:34              'ii' ( in float)
+0:34          Pre-Decrement ( temp float)
+0:34            'ii' ( in float)
+0:34        Loop with condition tested first
+0:34          No loop condition
+0:34          Loop Body
+0:34          'ii' ( in float)
+0:38  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:38    Function Parameters: 
+0:38      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:39      Function Call: f0( ( temp void)
+0:40      Function Call: f1(vf4; ( temp void)
+0:40        'input' ( in 4-component vector of float)
+0:41      Function Call: f2(vf4; ( temp void)
+0:41        'input' ( in 4-component vector of float)
+0:42      Function Call: f3(vf4; ( temp float)
+0:42        'input' ( in 4-component vector of float)
+0:43      Function Call: f4(vf4; ( temp float)
+0:43        'input' ( in 4-component vector of float)
+0:44      Function Call: f5(vf4; ( temp void)
+0:44        'input' ( in 4-component vector of float)
+0:45      Function Call: f6(vf4; ( temp void)
+0:45        'input' ( in 4-component vector of float)
+0:48      Sequence
+0:48        move second child to first child ( temp int)
+0:48          'ii' ( temp int)
+0:48          Constant:
+0:48            -1 (const int)
+0:48        Loop with condition tested first
+0:48          Loop Condition
+0:48          Compare Less Than ( temp bool)
+0:48            'ii' ( temp int)
+0:48            Constant:
+0:48              3 (const int)
+0:48          Loop Body
+0:48          Test condition and select ( temp void)
+0:48            Condition
+0:48            Compare Equal ( temp bool)
+0:48              'ii' ( temp int)
+0:48              Constant:
+0:48                2 (const int)
+0:48            true case
+0:48            Branch: Continue
+0:48          Loop Terminal Expression
+0:48          Pre-Increment ( temp int)
+0:48            'ii' ( temp int)
+0:49      Pre-Decrement ( temp float)
+0:49        'ii' ( temp float)
+0:51      Function Call: f99( ( temp void)
+0:53      Sequence
+0:53        move second child to first child ( temp int)
+0:53          'i' ( temp int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        move second child to first child ( temp int)
+0:53          'count' ( temp int)
+0:53          Convert float to int ( temp int)
+0:53            'ii' ( temp float)
+0:53        Loop with condition tested first
+0:53          Loop Condition
+0:53          Compare Less Than ( temp bool)
+0:53            'i' ( temp int)
+0:53            'count' ( temp int)
+0:53          No loop body
+0:53          Loop Terminal Expression
+0:53          Post-Increment ( temp int)
+0:53            'i' ( temp int)
+0:54      Sequence
+0:54        move second child to first child ( temp float)
+0:54          'first' ( temp float)
+0:54          Constant:
+0:54            0.000000
+0:54        Loop with condition tested first
+0:54          Loop Condition
+0:54          Compare Less Than ( temp bool)
+0:54            'first' ( temp float)
+0:54            direct index ( temp float)
+0:54              'second' ( temp 2-element array of float)
+0:54              Constant:
+0:54                0 (const int)
+0:54          Loop Body
+0:54          add ( temp float)
+0:54            add ( temp float)
+0:54              'first' ( temp float)
+0:54              direct index ( temp float)
+0:54                'second' ( temp 2-element array of float)
+0:54                Constant:
+0:54                  1 (const int)
+0:54            'third' ( temp float)
+0:54          Loop Terminal Expression
+0:54          Pre-Increment ( temp float)
+0:54            direct index ( temp float)
+0:54              'second' ( temp 2-element array of float)
+0:54              Constant:
+0:54                1 (const int)
+0:56      Function Call: f100(f1; ( temp void)
+0:56        'ii' ( temp float)
+0:58      Branch: Return with expression
+0:58        'input' ( in 4-component vector of float)
+0:38  Function Definition: PixelShaderFunction( ( temp void)
+0:38    Function Parameters: 
+0:?     Sequence
+0:38      move second child to first child ( temp 4-component vector of float)
 0:?         'input' ( temp 4-component vector of float)
 0:?         'input' (layout( location=0) in 4-component vector of float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:38      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:38        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
 0:?           'input' ( temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
@@ -205,501 +259,654 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in 4-component vector of float)
+0:1  Function Definition: f0( ( temp void)
+0:1    Function Parameters: 
 0:?     Sequence
 0:?       Sequence
-0:3        Loop with condition tested first
-0:3          No loop condition
-0:3          No loop body
-0:4      Sequence
-0:4        Pre-Increment ( temp 4-component vector of float)
-0:4          'input' ( in 4-component vector of float)
-0:4        Loop with condition tested first
-0:4          No loop condition
-0:4          No loop body
-0:?       Sequence
-0:5        Loop with condition tested first: Unroll
-0:5          Loop Condition
-0:5          any ( temp bool)
-0:5            NotEqual ( temp 4-component vector of bool)
-0:5              'input' ( in 4-component vector of float)
-0:5              'input' ( in 4-component vector of float)
-0:5          No loop body
-0:?       Sequence
+0:2        Loop with condition tested first
+0:2          No loop condition
+0:2          No loop body
+0:5  Function Definition: f1(vf4; ( temp void)
+0:5    Function Parameters: 
+0:5      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:6      Sequence
+0:6        Pre-Increment ( temp 4-component vector of float)
+0:6          'input' ( in 4-component vector of float)
 0:6        Loop with condition tested first
-0:6          Loop Condition
-0:6          any ( temp bool)
-0:6            NotEqual ( temp 4-component vector of bool)
-0:6              'input' ( in 4-component vector of float)
-0:6              'input' ( in 4-component vector of float)
-0:6          Loop Body
-0:?           Sequence
-0:6            Branch: Return with expression
-0:6              Negate value ( temp 4-component vector of float)
-0:6                'input' ( in 4-component vector of float)
-0:7      Sequence
-0:7        Pre-Decrement ( temp 4-component vector of float)
-0:7          'input' ( in 4-component vector of float)
-0:7        Loop with condition tested first
-0:7          Loop Condition
-0:7          any ( temp bool)
-0:7            NotEqual ( temp 4-component vector of bool)
-0:7              'input' ( in 4-component vector of float)
-0:7              'input' ( in 4-component vector of float)
-0:7          Loop Body
-0:?           Sequence
-0:7            Branch: Return with expression
-0:7              Negate value ( temp 4-component vector of float)
-0:7                'input' ( in 4-component vector of float)
-0:7          Loop Terminal Expression
-0:7          add second child into first child ( temp 4-component vector of float)
-0:7            'input' ( in 4-component vector of float)
-0:7            Constant:
-0:7              2.000000
+0:6          No loop condition
+0:6          No loop body
+0:9  Function Definition: f2(vf4; ( temp void)
+0:9    Function Parameters: 
+0:9      'input' ( in 4-component vector of float)
+0:?     Sequence
 0:?       Sequence
-0:8        Loop with condition tested first
-0:8          No loop condition
-0:8          Loop Body
-0:8          Test condition and select ( temp void)
-0:8            Condition
-0:8            Compare Greater Than ( temp bool)
-0:8              direct index ( temp float)
-0:8                'input' ( in 4-component vector of float)
-0:8                Constant:
-0:8                  0 (const int)
-0:8              Constant:
-0:8                2.000000
-0:8            true case
-0:8            Branch: Break
+0:10        Loop with condition tested first: Unroll
+0:10          Loop Condition
+0:10          any ( temp bool)
+0:10            NotEqual ( temp 4-component vector of bool)
+0:10              'input' ( in 4-component vector of float)
+0:10              'input' ( in 4-component vector of float)
+0:10          No loop body
+0:13  Function Definition: f3(vf4; ( temp float)
+0:13    Function Parameters: 
+0:13      'input' ( in 4-component vector of float)
+0:?     Sequence
 0:?       Sequence
-0:9        Loop with condition tested first
-0:9          No loop condition
-0:9          Loop Body
-0:9          Test condition and select ( temp void)
-0:9            Condition
-0:9            Compare Greater Than ( temp bool)
-0:9              direct index ( temp float)
-0:9                'input' ( in 4-component vector of float)
-0:9                Constant:
-0:9                  0 (const int)
-0:9              Constant:
-0:9                2.000000
-0:9            true case
-0:9            Branch: Continue
-0:11      Sequence
-0:11        move second child to first child ( temp int)
-0:11          'ii' ( temp int)
-0:11          Constant:
-0:11            -1 (const int)
-0:11        Loop with condition tested first
-0:11          Loop Condition
-0:11          Compare Less Than ( temp bool)
-0:11            'ii' ( temp int)
-0:11            Constant:
-0:11              3 (const int)
-0:11          Loop Body
-0:11          Test condition and select ( temp void)
-0:11            Condition
-0:11            Compare Equal ( temp bool)
-0:11              'ii' ( temp int)
-0:11              Constant:
-0:11                2 (const int)
-0:11            true case
-0:11            Branch: Continue
-0:11          Loop Terminal Expression
-0:11          Pre-Increment ( temp int)
-0:11            'ii' ( temp int)
-0:12      Pre-Decrement ( temp float)
-0:12        'ii' ( temp float)
-0:13      Sequence
-0:13        move second child to first child ( temp int)
-0:13          'first' ( temp int)
-0:13          Constant:
-0:13            0 (const int)
-0:13        move second child to first child ( temp int)
-0:13          'second' ( temp int)
-0:13          Constant:
-0:13            1 (const int)
-0:13        Loop with condition tested first
-0:13          No loop condition
-0:13          Loop Body
-0:13          add ( temp int)
-0:13            'first' ( temp int)
-0:13            'second' ( temp int)
-0:14      Sequence
-0:14        move second child to first child ( temp int)
-0:14          'i' ( temp int)
-0:14          Constant:
-0:14            0 (const int)
-0:14        move second child to first child ( temp int)
-0:14          'count' ( temp int)
-0:14          Convert float to int ( temp int)
-0:14            'ii' ( temp float)
 0:14        Loop with condition tested first
 0:14          Loop Condition
-0:14          Compare Less Than ( temp bool)
-0:14            'i' ( temp int)
-0:14            'count' ( temp int)
-0:14          No loop body
-0:14          Loop Terminal Expression
-0:14          Post-Increment ( temp int)
-0:14            'i' ( temp int)
-0:15      Sequence
-0:15        move second child to first child ( temp float)
-0:15          'first' ( temp float)
-0:15          Constant:
-0:15            0.000000
-0:15        Loop with condition tested first
-0:15          Loop Condition
-0:15          Compare Less Than ( temp bool)
-0:15            'first' ( temp float)
-0:15            direct index ( temp float)
-0:15              'second' ( temp 2-element array of float)
-0:15              Constant:
-0:15                0 (const int)
-0:15          Loop Body
-0:15          add ( temp float)
-0:15            add ( temp float)
-0:15              'first' ( temp float)
-0:15              direct index ( temp float)
-0:15                'second' ( temp 2-element array of float)
-0:15                Constant:
-0:15                  1 (const int)
-0:15            'third' ( temp float)
-0:15          Loop Terminal Expression
-0:15          Pre-Increment ( temp float)
-0:15            direct index ( temp float)
-0:15              'second' ( temp 2-element array of float)
-0:15              Constant:
-0:15                1 (const int)
-0:?       Sequence
-0:16        Comma ( temp float)
-0:16          Comma ( temp float)
-0:16            Pre-Decrement ( temp float)
-0:16              'ii' ( temp float)
-0:16            Pre-Decrement ( temp float)
-0:16              'ii' ( temp float)
-0:16          Pre-Decrement ( temp float)
-0:16            'ii' ( temp float)
-0:16        Loop with condition tested first
-0:16          No loop condition
-0:16          Loop Body
-0:16          'ii' ( temp float)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:14          any ( temp bool)
+0:14            NotEqual ( temp 4-component vector of bool)
+0:14              'input' ( in 4-component vector of float)
+0:14              'input' ( in 4-component vector of float)
+0:14          Loop Body
+0:?           Sequence
+0:14            Branch: Return with expression
+0:14              Construct float ( temp float)
+0:14                Negate value ( temp 4-component vector of float)
+0:14                  'input' ( in 4-component vector of float)
+0:17  Function Definition: f4(vf4; ( temp float)
+0:17    Function Parameters: 
+0:17      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:2      move second child to first child ( temp 4-component vector of float)
+0:18      Sequence
+0:18        Pre-Decrement ( temp 4-component vector of float)
+0:18          'input' ( in 4-component vector of float)
+0:18        Loop with condition tested first
+0:18          Loop Condition
+0:18          any ( temp bool)
+0:18            NotEqual ( temp 4-component vector of bool)
+0:18              'input' ( in 4-component vector of float)
+0:18              'input' ( in 4-component vector of float)
+0:18          Loop Body
+0:?           Sequence
+0:18            Branch: Return with expression
+0:18              Construct float ( temp float)
+0:18                Negate value ( temp 4-component vector of float)
+0:18                  'input' ( in 4-component vector of float)
+0:18          Loop Terminal Expression
+0:18          add second child into first child ( temp 4-component vector of float)
+0:18            'input' ( in 4-component vector of float)
+0:18            Constant:
+0:18              2.000000
+0:21  Function Definition: f5(vf4; ( temp void)
+0:21    Function Parameters: 
+0:21      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:?       Sequence
+0:22        Loop with condition tested first
+0:22          No loop condition
+0:22          Loop Body
+0:22          Test condition and select ( temp void)
+0:22            Condition
+0:22            Compare Greater Than ( temp bool)
+0:22              direct index ( temp float)
+0:22                'input' ( in 4-component vector of float)
+0:22                Constant:
+0:22                  0 (const int)
+0:22              Constant:
+0:22                2.000000
+0:22            true case
+0:22            Branch: Break
+0:25  Function Definition: f6(vf4; ( temp void)
+0:25    Function Parameters: 
+0:25      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:?       Sequence
+0:26        Loop with condition tested first
+0:26          No loop condition
+0:26          Loop Body
+0:26          Test condition and select ( temp void)
+0:26            Condition
+0:26            Compare Greater Than ( temp bool)
+0:26              direct index ( temp float)
+0:26                'input' ( in 4-component vector of float)
+0:26                Constant:
+0:26                  0 (const int)
+0:26              Constant:
+0:26                2.000000
+0:26            true case
+0:26            Branch: Continue
+0:29  Function Definition: f99( ( temp void)
+0:29    Function Parameters: 
+0:?     Sequence
+0:30      Sequence
+0:30        move second child to first child ( temp int)
+0:30          'first' ( temp int)
+0:30          Constant:
+0:30            0 (const int)
+0:30        move second child to first child ( temp int)
+0:30          'second' ( temp int)
+0:30          Constant:
+0:30            1 (const int)
+0:30        Loop with condition tested first
+0:30          No loop condition
+0:30          Loop Body
+0:30          add ( temp int)
+0:30            'first' ( temp int)
+0:30            'second' ( temp int)
+0:33  Function Definition: f100(f1; ( temp void)
+0:33    Function Parameters: 
+0:33      'ii' ( in float)
+0:?     Sequence
+0:?       Sequence
+0:34        Comma ( temp float)
+0:34          Comma ( temp float)
+0:34            Pre-Decrement ( temp float)
+0:34              'ii' ( in float)
+0:34            Pre-Decrement ( temp float)
+0:34              'ii' ( in float)
+0:34          Pre-Decrement ( temp float)
+0:34            'ii' ( in float)
+0:34        Loop with condition tested first
+0:34          No loop condition
+0:34          Loop Body
+0:34          'ii' ( in float)
+0:38  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:38    Function Parameters: 
+0:38      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:39      Function Call: f0( ( temp void)
+0:40      Function Call: f1(vf4; ( temp void)
+0:40        'input' ( in 4-component vector of float)
+0:41      Function Call: f2(vf4; ( temp void)
+0:41        'input' ( in 4-component vector of float)
+0:42      Function Call: f3(vf4; ( temp float)
+0:42        'input' ( in 4-component vector of float)
+0:43      Function Call: f4(vf4; ( temp float)
+0:43        'input' ( in 4-component vector of float)
+0:44      Function Call: f5(vf4; ( temp void)
+0:44        'input' ( in 4-component vector of float)
+0:45      Function Call: f6(vf4; ( temp void)
+0:45        'input' ( in 4-component vector of float)
+0:48      Sequence
+0:48        move second child to first child ( temp int)
+0:48          'ii' ( temp int)
+0:48          Constant:
+0:48            -1 (const int)
+0:48        Loop with condition tested first
+0:48          Loop Condition
+0:48          Compare Less Than ( temp bool)
+0:48            'ii' ( temp int)
+0:48            Constant:
+0:48              3 (const int)
+0:48          Loop Body
+0:48          Test condition and select ( temp void)
+0:48            Condition
+0:48            Compare Equal ( temp bool)
+0:48              'ii' ( temp int)
+0:48              Constant:
+0:48                2 (const int)
+0:48            true case
+0:48            Branch: Continue
+0:48          Loop Terminal Expression
+0:48          Pre-Increment ( temp int)
+0:48            'ii' ( temp int)
+0:49      Pre-Decrement ( temp float)
+0:49        'ii' ( temp float)
+0:51      Function Call: f99( ( temp void)
+0:53      Sequence
+0:53        move second child to first child ( temp int)
+0:53          'i' ( temp int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        move second child to first child ( temp int)
+0:53          'count' ( temp int)
+0:53          Convert float to int ( temp int)
+0:53            'ii' ( temp float)
+0:53        Loop with condition tested first
+0:53          Loop Condition
+0:53          Compare Less Than ( temp bool)
+0:53            'i' ( temp int)
+0:53            'count' ( temp int)
+0:53          No loop body
+0:53          Loop Terminal Expression
+0:53          Post-Increment ( temp int)
+0:53            'i' ( temp int)
+0:54      Sequence
+0:54        move second child to first child ( temp float)
+0:54          'first' ( temp float)
+0:54          Constant:
+0:54            0.000000
+0:54        Loop with condition tested first
+0:54          Loop Condition
+0:54          Compare Less Than ( temp bool)
+0:54            'first' ( temp float)
+0:54            direct index ( temp float)
+0:54              'second' ( temp 2-element array of float)
+0:54              Constant:
+0:54                0 (const int)
+0:54          Loop Body
+0:54          add ( temp float)
+0:54            add ( temp float)
+0:54              'first' ( temp float)
+0:54              direct index ( temp float)
+0:54                'second' ( temp 2-element array of float)
+0:54                Constant:
+0:54                  1 (const int)
+0:54            'third' ( temp float)
+0:54          Loop Terminal Expression
+0:54          Pre-Increment ( temp float)
+0:54            direct index ( temp float)
+0:54              'second' ( temp 2-element array of float)
+0:54              Constant:
+0:54                1 (const int)
+0:56      Function Call: f100(f1; ( temp void)
+0:56        'ii' ( temp float)
+0:58      Branch: Return with expression
+0:58        'input' ( in 4-component vector of float)
+0:38  Function Definition: PixelShaderFunction( ( temp void)
+0:38    Function Parameters: 
+0:?     Sequence
+0:38      move second child to first child ( temp 4-component vector of float)
 0:?         'input' ( temp 4-component vector of float)
 0:?         'input' (layout( location=0) in 4-component vector of float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:38      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:38        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
 0:?           'input' ( temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 183
+// Generated by (magic number): 80008
+// Id's are bound by 240
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 176 179
+                              EntryPoint Fragment 4  "PixelShaderFunction" 233 236
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
-                              Name 11  "@PixelShaderFunction(vf4;"
-                              Name 10  "input"
-                              Name 92  "ii"
-                              Name 111  "ii"
-                              Name 114  "first"
-                              Name 116  "second"
-                              Name 124  "i"
-                              Name 125  "count"
-                              Name 138  "first"
-                              Name 149  "second"
-                              Name 157  "third"
-                              Name 174  "input"
-                              Name 176  "input"
-                              Name 179  "@entryPointOutput"
-                              Name 180  "param"
-                              Decorate 176(input) Location 0
-                              Decorate 179(@entryPointOutput) Location 0
+                              Name 6  "f0("
+                              Name 13  "f1(vf4;"
+                              Name 12  "input"
+                              Name 16  "f2(vf4;"
+                              Name 15  "input"
+                              Name 20  "f3(vf4;"
+                              Name 19  "input"
+                              Name 23  "f4(vf4;"
+                              Name 22  "input"
+                              Name 26  "f5(vf4;"
+                              Name 25  "input"
+                              Name 29  "f6(vf4;"
+                              Name 28  "input"
+                              Name 31  "f99("
+                              Name 36  "f100(f1;"
+                              Name 35  "ii"
+                              Name 40  "@PixelShaderFunction(vf4;"
+                              Name 39  "input"
+                              Name 124  "first"
+                              Name 126  "second"
+                              Name 146  "param"
+                              Name 149  "param"
+                              Name 152  "param"
+                              Name 155  "param"
+                              Name 158  "param"
+                              Name 161  "param"
+                              Name 164  "ii"
+                              Name 182  "ii"
+                              Name 186  "i"
+                              Name 187  "count"
+                              Name 200  "first"
+                              Name 211  "second"
+                              Name 219  "third"
+                              Name 225  "param"
+                              Name 231  "input"
+                              Name 233  "input"
+                              Name 236  "@entryPointOutput"
+                              Name 237  "param"
+                              Decorate 233(input) Location 0
+                              Decorate 236(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeFloat 32
-               7:             TypeVector 6(float) 4
-               8:             TypePointer Function 7(fvec4)
-               9:             TypeFunction 7(fvec4) 8(ptr)
-              18:    6(float) Constant 1065353216
-              32:             TypeBool
-              33:             TypeVector 32(bool) 4
-              63:    6(float) Constant 1073741824
-              71:             TypeInt 32 0
-              72:     71(int) Constant 0
-              73:             TypePointer Function 6(float)
-              90:             TypeInt 32 1
-              91:             TypePointer Function 90(int)
-              93:     90(int) Constant 4294967295
-             100:     90(int) Constant 3
-             103:     90(int) Constant 2
-             109:     90(int) Constant 1
-             115:     90(int) Constant 0
-             139:    6(float) Constant 0
-             146:     71(int) Constant 2
-             147:             TypeArray 6(float) 146
-             148:             TypePointer Function 147
-             175:             TypePointer Input 7(fvec4)
-      176(input):    175(ptr) Variable Input
-             178:             TypePointer Output 7(fvec4)
-179(@entryPointOutput):    178(ptr) Variable Output
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
+              10:             TypePointer Function 9(fvec4)
+              11:             TypeFunction 2 10(ptr)
+              18:             TypeFunction 8(float) 10(ptr)
+              33:             TypePointer Function 8(float)
+              34:             TypeFunction 2 33(ptr)
+              38:             TypeFunction 9(fvec4) 10(ptr)
+              47:    8(float) Constant 1065353216
+              61:             TypeBool
+              62:             TypeVector 61(bool) 4
+              95:    8(float) Constant 1073741824
+             104:             TypeInt 32 0
+             105:    104(int) Constant 0
+             122:             TypeInt 32 1
+             123:             TypePointer Function 122(int)
+             125:    122(int) Constant 0
+             127:    122(int) Constant 1
+             165:    122(int) Constant 4294967295
+             172:    122(int) Constant 3
+             175:    122(int) Constant 2
+             201:    8(float) Constant 0
+             208:    104(int) Constant 2
+             209:             TypeArray 8(float) 208
+             210:             TypePointer Function 209
+             232:             TypePointer Input 9(fvec4)
+      233(input):    232(ptr) Variable Input
+             235:             TypePointer Output 9(fvec4)
+236(@entryPointOutput):    235(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-      174(input):      8(ptr) Variable Function
-      180(param):      8(ptr) Variable Function
-             177:    7(fvec4) Load 176(input)
-                              Store 174(input) 177
-             181:    7(fvec4) Load 174(input)
-                              Store 180(param) 181
-             182:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 180(param)
-                              Store 179(@entryPointOutput) 182
+      231(input):     10(ptr) Variable Function
+      237(param):     10(ptr) Variable Function
+             234:    9(fvec4) Load 233(input)
+                              Store 231(input) 234
+             238:    9(fvec4) Load 231(input)
+                              Store 237(param) 238
+             239:    9(fvec4) FunctionCall 40(@PixelShaderFunction(vf4;) 237(param)
+                              Store 236(@entryPointOutput) 239
                               Return
                               FunctionEnd
-11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
-       10(input):      8(ptr) FunctionParameter
-              12:             Label
-          92(ii):     91(ptr) Variable Function
-         111(ii):     73(ptr) Variable Function
-      114(first):     91(ptr) Variable Function
-     116(second):     91(ptr) Variable Function
-          124(i):     91(ptr) Variable Function
-      125(count):     91(ptr) Variable Function
-      138(first):     73(ptr) Variable Function
-     149(second):    148(ptr) Variable Function
-      157(third):     73(ptr) Variable Function
-                              Branch 13
-              13:             Label
-                              LoopMerge 15 16 None
-                              Branch 14
+          6(f0():           2 Function None 3
+               7:             Label
+                              Branch 42
+              42:             Label
+                              LoopMerge 44 45 None
+                              Branch 43
+              43:             Label
+                              Branch 45
+              45:             Label
+                              Branch 42
+              44:             Label
+                              Unreachable
+                              FunctionEnd
+     13(f1(vf4;):           2 Function None 11
+       12(input):     10(ptr) FunctionParameter
               14:             Label
-                              Branch 16
-              16:             Label
-                              Branch 13
-              15:             Label
-              17:    7(fvec4) Load 10(input)
-              19:    7(fvec4) CompositeConstruct 18 18 18 18
-              20:    7(fvec4) FAdd 17 19
-                              Store 10(input) 20
-                              Branch 21
-              21:             Label
-                              LoopMerge 23 24 None
-                              Branch 22
-              22:             Label
-                              Branch 24
-              24:             Label
-                              Branch 21
-              23:             Label
-                              Branch 25
-              25:             Label
-                              LoopMerge 27 28 Unroll 
-                              Branch 29
-              29:             Label
-              30:    7(fvec4) Load 10(input)
-              31:    7(fvec4) Load 10(input)
-              34:   33(bvec4) FOrdNotEqual 30 31
-              35:    32(bool) Any 34
-                              BranchConditional 35 26 27
-              26:               Label
-                                Branch 28
-              28:               Label
-                                Branch 25
-              27:             Label
-                              Branch 36
-              36:             Label
-                              LoopMerge 38 39 None
-                              Branch 40
-              40:             Label
-              41:    7(fvec4) Load 10(input)
-              42:    7(fvec4) Load 10(input)
-              43:   33(bvec4) FOrdNotEqual 41 42
-              44:    32(bool) Any 43
-                              BranchConditional 44 37 38
-              37:               Label
-              45:    7(fvec4)   Load 10(input)
-              46:    7(fvec4)   FNegate 45
-                                ReturnValue 46
-              39:               Label
-                                Branch 36
-              38:             Label
-              48:    7(fvec4) Load 10(input)
-              49:    7(fvec4) CompositeConstruct 18 18 18 18
-              50:    7(fvec4) FSub 48 49
-                              Store 10(input) 50
+              46:    9(fvec4) Load 12(input)
+              48:    9(fvec4) CompositeConstruct 47 47 47 47
+              49:    9(fvec4) FAdd 46 48
+                              Store 12(input) 49
+                              Branch 50
+              50:             Label
+                              LoopMerge 52 53 None
                               Branch 51
               51:             Label
-                              LoopMerge 53 54 None
-                              Branch 55
-              55:             Label
-              56:    7(fvec4) Load 10(input)
-              57:    7(fvec4) Load 10(input)
-              58:   33(bvec4) FOrdNotEqual 56 57
-              59:    32(bool) Any 58
-                              BranchConditional 59 52 53
-              52:               Label
-              60:    7(fvec4)   Load 10(input)
-              61:    7(fvec4)   FNegate 60
-                                ReturnValue 61
-              54:               Label
-              64:    7(fvec4)   Load 10(input)
-              65:    7(fvec4)   CompositeConstruct 63 63 63 63
-              66:    7(fvec4)   FAdd 64 65
-                                Store 10(input) 66
-                                Branch 51
+                              Branch 53
               53:             Label
-                              Branch 67
-              67:             Label
-                              LoopMerge 69 70 None
-                              Branch 68
-              68:             Label
-              74:     73(ptr) AccessChain 10(input) 72
-              75:    6(float) Load 74
-              76:    32(bool) FOrdGreaterThan 75 63
-                              SelectionMerge 78 None
-                              BranchConditional 76 77 78
-              77:               Label
-                                Branch 69
-              78:             Label
-                              Branch 70
-              70:             Label
-                              Branch 67
+                              Branch 50
+              52:             Label
+                              Unreachable
+                              FunctionEnd
+     16(f2(vf4;):           2 Function None 11
+       15(input):     10(ptr) FunctionParameter
+              17:             Label
+                              Branch 54
+              54:             Label
+                              LoopMerge 56 57 Unroll 
+                              Branch 58
+              58:             Label
+              59:    9(fvec4) Load 15(input)
+              60:    9(fvec4) Load 15(input)
+              63:   62(bvec4) FOrdNotEqual 59 60
+              64:    61(bool) Any 63
+                              BranchConditional 64 55 56
+              55:               Label
+                                Branch 57
+              57:               Label
+                                Branch 54
+              56:             Label
+                              Return
+                              FunctionEnd
+     20(f3(vf4;):    8(float) Function None 18
+       19(input):     10(ptr) FunctionParameter
+              21:             Label
+                              Branch 65
+              65:             Label
+                              LoopMerge 67 68 None
+                              Branch 69
               69:             Label
-                              Branch 80
-              80:             Label
-                              LoopMerge 82 83 None
-                              Branch 81
-              81:             Label
-              84:     73(ptr) AccessChain 10(input) 72
-              85:    6(float) Load 84
-              86:    32(bool) FOrdGreaterThan 85 63
-                              SelectionMerge 88 None
-                              BranchConditional 86 87 88
-              87:               Label
-                                Branch 83
-              88:             Label
-                              Branch 83
-              83:             Label
-                              Branch 80
+              70:    9(fvec4) Load 19(input)
+              71:    9(fvec4) Load 19(input)
+              72:   62(bvec4) FOrdNotEqual 70 71
+              73:    61(bool) Any 72
+                              BranchConditional 73 66 67
+              66:               Label
+              74:    9(fvec4)   Load 19(input)
+              75:    9(fvec4)   FNegate 74
+              76:    8(float)   CompositeExtract 75 0
+                                ReturnValue 76
+              68:               Label
+                                Branch 65
+              67:             Label
+              78:    8(float) Undef
+                              ReturnValue 78
+                              FunctionEnd
+     23(f4(vf4;):    8(float) Function None 18
+       22(input):     10(ptr) FunctionParameter
+              24:             Label
+              79:    9(fvec4) Load 22(input)
+              80:    9(fvec4) CompositeConstruct 47 47 47 47
+              81:    9(fvec4) FSub 79 80
+                              Store 22(input) 81
+                              Branch 82
               82:             Label
-                              Store 92(ii) 93
-                              Branch 94
-              94:             Label
-                              LoopMerge 96 97 None
-                              Branch 98
-              98:             Label
-              99:     90(int) Load 92(ii)
-             101:    32(bool) SLessThan 99 100
-                              BranchConditional 101 95 96
-              95:               Label
-             102:     90(int)   Load 92(ii)
-             104:    32(bool)   IEqual 102 103
-                                SelectionMerge 106 None
-                                BranchConditional 104 105 106
-             105:                 Label
-                                  Branch 97
-             106:               Label
-                                Branch 97
-              97:               Label
-             108:     90(int)   Load 92(ii)
-             110:     90(int)   IAdd 108 109
-                                Store 92(ii) 110
-                                Branch 94
-              96:             Label
-             112:    6(float) Load 111(ii)
-             113:    6(float) FSub 112 18
-                              Store 111(ii) 113
-                              Store 114(first) 115
-                              Store 116(second) 109
-                              Branch 117
-             117:             Label
-                              LoopMerge 119 120 None
-                              Branch 118
-             118:             Label
-             121:     90(int) Load 114(first)
-             122:     90(int) Load 116(second)
-             123:     90(int) IAdd 121 122
-                              Branch 120
+                              LoopMerge 84 85 None
+                              Branch 86
+              86:             Label
+              87:    9(fvec4) Load 22(input)
+              88:    9(fvec4) Load 22(input)
+              89:   62(bvec4) FOrdNotEqual 87 88
+              90:    61(bool) Any 89
+                              BranchConditional 90 83 84
+              83:               Label
+              91:    9(fvec4)   Load 22(input)
+              92:    9(fvec4)   FNegate 91
+              93:    8(float)   CompositeExtract 92 0
+                                ReturnValue 93
+              85:               Label
+                                Branch 82
+              84:             Label
+              99:    8(float) Undef
+                              ReturnValue 99
+                              FunctionEnd
+     26(f5(vf4;):           2 Function None 11
+       25(input):     10(ptr) FunctionParameter
+              27:             Label
+                              Branch 100
+             100:             Label
+                              LoopMerge 102 103 None
+                              Branch 101
+             101:             Label
+             106:     33(ptr) AccessChain 25(input) 105
+             107:    8(float) Load 106
+             108:    61(bool) FOrdGreaterThan 107 95
+                              SelectionMerge 110 None
+                              BranchConditional 108 109 110
+             109:               Label
+                                Branch 102
+             110:             Label
+                              Branch 103
+             103:             Label
+                              Branch 100
+             102:             Label
+                              Return
+                              FunctionEnd
+     29(f6(vf4;):           2 Function None 11
+       28(input):     10(ptr) FunctionParameter
+              30:             Label
+                              Branch 112
+             112:             Label
+                              LoopMerge 114 115 None
+                              Branch 113
+             113:             Label
+             116:     33(ptr) AccessChain 28(input) 105
+             117:    8(float) Load 116
+             118:    61(bool) FOrdGreaterThan 117 95
+                              SelectionMerge 120 None
+                              BranchConditional 118 119 120
+             119:               Label
+                                Branch 115
              120:             Label
-                              Branch 117
-             119:             Label
-                              Store 124(i) 115
-             126:    6(float) Load 111(ii)
-             127:     90(int) ConvertFToS 126
-                              Store 125(count) 127
+                              Branch 115
+             115:             Label
+                              Branch 112
+             114:             Label
+                              Unreachable
+                              FunctionEnd
+        31(f99():           2 Function None 3
+              32:             Label
+      124(first):    123(ptr) Variable Function
+     126(second):    123(ptr) Variable Function
+                              Store 124(first) 125
+                              Store 126(second) 127
                               Branch 128
              128:             Label
                               LoopMerge 130 131 None
-                              Branch 132
-             132:             Label
-             133:     90(int) Load 124(i)
-             134:     90(int) Load 125(count)
-             135:    32(bool) SLessThan 133 134
-                              BranchConditional 135 129 130
-             129:               Label
-                                Branch 131
-             131:               Label
-             136:     90(int)   Load 124(i)
-             137:     90(int)   IAdd 136 109
-                                Store 124(i) 137
-                                Branch 128
+                              Branch 129
+             129:             Label
+             132:    122(int) Load 124(first)
+             133:    122(int) Load 126(second)
+             134:    122(int) IAdd 132 133
+                              Branch 131
+             131:             Label
+                              Branch 128
              130:             Label
-                              Store 138(first) 139
-                              Branch 140
-             140:             Label
-                              LoopMerge 142 143 None
+                              Unreachable
+                              FunctionEnd
+    36(f100(f1;):           2 Function None 34
+          35(ii):     33(ptr) FunctionParameter
+              37:             Label
+             135:    8(float) Load 35(ii)
+             136:    8(float) FSub 135 47
+                              Store 35(ii) 136
+             137:    8(float) Load 35(ii)
+             138:    8(float) FSub 137 47
+                              Store 35(ii) 138
+             139:    8(float) Load 35(ii)
+             140:    8(float) FSub 139 47
+                              Store 35(ii) 140
+                              Branch 141
+             141:             Label
+                              LoopMerge 143 144 None
+                              Branch 142
+             142:             Label
                               Branch 144
              144:             Label
-             145:    6(float) Load 138(first)
-             150:     73(ptr) AccessChain 149(second) 115
-             151:    6(float) Load 150
-             152:    32(bool) FOrdLessThan 145 151
-                              BranchConditional 152 141 142
-             141:               Label
-             153:    6(float)   Load 138(first)
-             154:     73(ptr)   AccessChain 149(second) 109
-             155:    6(float)   Load 154
-             156:    6(float)   FAdd 153 155
-             158:    6(float)   Load 157(third)
-             159:    6(float)   FAdd 156 158
-                                Branch 143
-             143:               Label
-             160:     73(ptr)   AccessChain 149(second) 109
-             161:    6(float)   Load 160
-             162:    6(float)   FAdd 161 18
-                                Store 160 162
-                                Branch 140
-             142:             Label
-             163:    6(float) Load 111(ii)
-             164:    6(float) FSub 163 18
-                              Store 111(ii) 164
-             165:    6(float) Load 111(ii)
-             166:    6(float) FSub 165 18
-                              Store 111(ii) 166
-             167:    6(float) Load 111(ii)
-             168:    6(float) FSub 167 18
-                              Store 111(ii) 168
-                              Branch 169
-             169:             Label
-                              LoopMerge 171 172 None
+                              Branch 141
+             143:             Label
+                              Unreachable
+                              FunctionEnd
+40(@PixelShaderFunction(vf4;):    9(fvec4) Function None 38
+       39(input):     10(ptr) FunctionParameter
+              41:             Label
+      146(param):     10(ptr) Variable Function
+      149(param):     10(ptr) Variable Function
+      152(param):     10(ptr) Variable Function
+      155(param):     10(ptr) Variable Function
+      158(param):     10(ptr) Variable Function
+      161(param):     10(ptr) Variable Function
+         164(ii):    123(ptr) Variable Function
+         182(ii):     33(ptr) Variable Function
+          186(i):    123(ptr) Variable Function
+      187(count):    123(ptr) Variable Function
+      200(first):     33(ptr) Variable Function
+     211(second):    210(ptr) Variable Function
+      219(third):     33(ptr) Variable Function
+      225(param):     33(ptr) Variable Function
+             145:           2 FunctionCall 6(f0()
+             147:    9(fvec4) Load 39(input)
+                              Store 146(param) 147
+             148:           2 FunctionCall 13(f1(vf4;) 146(param)
+             150:    9(fvec4) Load 39(input)
+                              Store 149(param) 150
+             151:           2 FunctionCall 16(f2(vf4;) 149(param)
+             153:    9(fvec4) Load 39(input)
+                              Store 152(param) 153
+             154:    8(float) FunctionCall 20(f3(vf4;) 152(param)
+             156:    9(fvec4) Load 39(input)
+                              Store 155(param) 156
+             157:    8(float) FunctionCall 23(f4(vf4;) 155(param)
+             159:    9(fvec4) Load 39(input)
+                              Store 158(param) 159
+             160:           2 FunctionCall 26(f5(vf4;) 158(param)
+             162:    9(fvec4) Load 39(input)
+                              Store 161(param) 162
+             163:           2 FunctionCall 29(f6(vf4;) 161(param)
+                              Store 164(ii) 165
+                              Branch 166
+             166:             Label
+                              LoopMerge 168 169 None
                               Branch 170
              170:             Label
-                              Branch 172
-             172:             Label
-                              Branch 169
-             171:             Label
-             173:    7(fvec4) Undef
-                              ReturnValue 173
+             171:    122(int) Load 164(ii)
+             173:    61(bool) SLessThan 171 172
+                              BranchConditional 173 167 168
+             167:               Label
+             174:    122(int)   Load 164(ii)
+             176:    61(bool)   IEqual 174 175
+                                SelectionMerge 178 None
+                                BranchConditional 176 177 178
+             177:                 Label
+                                  Branch 169
+             178:               Label
+                                Branch 169
+             169:               Label
+             180:    122(int)   Load 164(ii)
+             181:    122(int)   IAdd 180 127
+                                Store 164(ii) 181
+                                Branch 166
+             168:             Label
+             183:    8(float) Load 182(ii)
+             184:    8(float) FSub 183 47
+                              Store 182(ii) 184
+             185:           2 FunctionCall 31(f99()
+                              Store 186(i) 125
+             188:    8(float) Load 182(ii)
+             189:    122(int) ConvertFToS 188
+                              Store 187(count) 189
+                              Branch 190
+             190:             Label
+                              LoopMerge 192 193 None
+                              Branch 194
+             194:             Label
+             195:    122(int) Load 186(i)
+             196:    122(int) Load 187(count)
+             197:    61(bool) SLessThan 195 196
+                              BranchConditional 197 191 192
+             191:               Label
+                                Branch 193
+             193:               Label
+             198:    122(int)   Load 186(i)
+             199:    122(int)   IAdd 198 127
+                                Store 186(i) 199
+                                Branch 190
+             192:             Label
+                              Store 200(first) 201
+                              Branch 202
+             202:             Label
+                              LoopMerge 204 205 None
+                              Branch 206
+             206:             Label
+             207:    8(float) Load 200(first)
+             212:     33(ptr) AccessChain 211(second) 125
+             213:    8(float) Load 212
+             214:    61(bool) FOrdLessThan 207 213
+                              BranchConditional 214 203 204
+             203:               Label
+             215:    8(float)   Load 200(first)
+             216:     33(ptr)   AccessChain 211(second) 127
+             217:    8(float)   Load 216
+             218:    8(float)   FAdd 215 217
+             220:    8(float)   Load 219(third)
+             221:    8(float)   FAdd 218 220
+                                Branch 205
+             205:               Label
+             222:     33(ptr)   AccessChain 211(second) 127
+             223:    8(float)   Load 222
+             224:    8(float)   FAdd 223 47
+                                Store 222 224
+                                Branch 202
+             204:             Label
+             226:    8(float) Load 182(ii)
+                              Store 225(param) 226
+             227:           2 FunctionCall 36(f100(f1;) 225(param)
+             228:    9(fvec4) Load 39(input)
+                              ReturnValue 228
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.format.rwtexture.frag.out b/Test/baseResults/hlsl.format.rwtexture.frag.out
index 7ab5329..699dafe 100644
--- a/Test/baseResults/hlsl.format.rwtexture.frag.out
+++ b/Test/baseResults/hlsl.format.rwtexture.frag.out
@@ -184,7 +184,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 160
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.fraggeom.frag.out b/Test/baseResults/hlsl.fraggeom.frag.out
index af3564d..7509ddc 100644
--- a/Test/baseResults/hlsl.fraggeom.frag.out
+++ b/Test/baseResults/hlsl.fraggeom.frag.out
@@ -64,7 +64,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.array.dx10.frag.out b/Test/baseResults/hlsl.gather.array.dx10.frag.out
index 32d27ab..b954c2b 100644
--- a/Test/baseResults/hlsl.gather.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.array.dx10.frag.out
@@ -262,7 +262,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 124
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
index 57e4499..530bccd 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
@@ -258,7 +258,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 135
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
index a0c8d15..de745d1 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
@@ -220,7 +220,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 126
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
index 85ba294..3a89712 100644
--- a/Test/baseResults/hlsl.gather.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
@@ -208,7 +208,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 114
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
index c73547e..3601187 100644
--- a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
@@ -202,7 +202,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 97
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
index ac6c817..c2a4901 100644
--- a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
@@ -750,7 +750,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 255
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
index 8617d70..8bb01d5 100644
--- a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
@@ -758,7 +758,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 265
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
index 4a0d77a..a777678 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
@@ -1263,7 +1263,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 399
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
index c9740b0..2acc975 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
@@ -1255,7 +1255,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 389
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
index 5e2d422..8ad84cd 100644
--- a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
@@ -456,7 +456,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 164
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index eb92fbb..cf406ed 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
@@ -2318,7 +2318,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 550
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
index cccdfeb..51368b6 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.vert.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
@@ -116,7 +116,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
index d8675a2..d096c38 100644
--- a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
@@ -718,7 +718,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 232
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
index d1e2844..7c46c8e 100644
--- a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
+++ b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
@@ -580,7 +580,7 @@
 0:?     'sample' (layout( location=0) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.global-const-init.frag.out b/Test/baseResults/hlsl.global-const-init.frag.out
index a1aa55b..828c0c5 100644
--- a/Test/baseResults/hlsl.global-const-init.frag.out
+++ b/Test/baseResults/hlsl.global-const-init.frag.out
@@ -102,7 +102,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.groupid.comp.out b/Test/baseResults/hlsl.groupid.comp.out
index a76db50..65804b7 100644
--- a/Test/baseResults/hlsl.groupid.comp.out
+++ b/Test/baseResults/hlsl.groupid.comp.out
@@ -82,7 +82,7 @@
 0:?     'vGroupId' ( in 3-component vector of uint WorkGroupID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.gs-hs-mix.tesc.out b/Test/baseResults/hlsl.gs-hs-mix.tesc.out
index 4971371..ffa96b1 100644
--- a/Test/baseResults/hlsl.gs-hs-mix.tesc.out
+++ b/Test/baseResults/hlsl.gs-hs-mix.tesc.out
@@ -1,7 +1,6 @@
 hlsl.gs-hs-mix.tesc
 Shader version: 500
 vertices = 3
-input primitive = triangles
 vertex spacing = fractional_odd_spacing
 triangle order = ccw
 0:? Sequence
@@ -402,7 +401,6 @@
 
 Shader version: 500
 vertices = 3
-input primitive = triangles
 vertex spacing = fractional_odd_spacing
 triangle order = ccw
 0:? Sequence
@@ -798,7 +796,7 @@
 0:?     '@patchConstantOutput' (layout( location=1) patch out structure{ temp 3-element array of 3-component vector of float NormalWS})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 216
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hlslOffset.vert.out b/Test/baseResults/hlsl.hlslOffset.vert.out
index b0c0467..099318c 100644
--- a/Test/baseResults/hlsl.hlslOffset.vert.out
+++ b/Test/baseResults/hlsl.hlslOffset.vert.out
@@ -26,7 +26,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float m0, layout( row_major std140) uniform 3-component vector of float m4, layout( row_major std140) uniform float m16, layout( row_major std140 offset=20) uniform 3-component vector of float m20, layout( row_major std140 offset=36) uniform 3-component vector of float m36, layout( row_major std140 offset=56) uniform 2-component vector of float m56, layout( row_major std140) uniform float m64, layout( row_major std140) uniform 2-component vector of float m68, layout( row_major std140) uniform float m76, layout( row_major std140) uniform float m80, layout( row_major std140) uniform 1-element array of 2-component vector of float m96})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.hull.1.tesc.out b/Test/baseResults/hlsl.hull.1.tesc.out
index 1be1498..ca4417d 100644
--- a/Test/baseResults/hlsl.hull.1.tesc.out
+++ b/Test/baseResults/hlsl.hull.1.tesc.out
@@ -224,7 +224,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 89
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.2.tesc.out b/Test/baseResults/hlsl.hull.2.tesc.out
index c8218d2..70fc4f1 100644
--- a/Test/baseResults/hlsl.hull.2.tesc.out
+++ b/Test/baseResults/hlsl.hull.2.tesc.out
@@ -220,7 +220,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 91
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.3.tesc.out b/Test/baseResults/hlsl.hull.3.tesc.out
index 4ff0198..fba7fac 100644
--- a/Test/baseResults/hlsl.hull.3.tesc.out
+++ b/Test/baseResults/hlsl.hull.3.tesc.out
@@ -220,7 +220,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 91
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.4.tesc.out b/Test/baseResults/hlsl.hull.4.tesc.out
index a99730d..253bdc6 100644
--- a/Test/baseResults/hlsl.hull.4.tesc.out
+++ b/Test/baseResults/hlsl.hull.4.tesc.out
@@ -476,7 +476,7 @@
 0:?     '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 127
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
index 41f3c0a..2bf3c7c 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
@@ -396,7 +396,7 @@
 0:?     '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 124
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
index 986e110..62e48f7 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
@@ -414,7 +414,7 @@
 0:?     '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 126
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.void.tesc.out b/Test/baseResults/hlsl.hull.void.tesc.out
index c44c7e4..7c006db 100644
--- a/Test/baseResults/hlsl.hull.void.tesc.out
+++ b/Test/baseResults/hlsl.hull.void.tesc.out
@@ -108,7 +108,7 @@
 0:?     'InvocationId' ( in uint InvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 55
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.identifier.sample.frag.out b/Test/baseResults/hlsl.identifier.sample.frag.out
index a23451e..ddc4c51 100644
--- a/Test/baseResults/hlsl.identifier.sample.frag.out
+++ b/Test/baseResults/hlsl.identifier.sample.frag.out
@@ -86,7 +86,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.if.frag.out b/Test/baseResults/hlsl.if.frag.out
index 056b672..6b6de9c 100644
--- a/Test/baseResults/hlsl.if.frag.out
+++ b/Test/baseResults/hlsl.if.frag.out
@@ -2,104 +2,116 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in 4-component vector of float)
+0:1  Function Definition: f0(vf4; ( temp 4-component vector of float)
+0:1    Function Parameters: 
+0:1      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:3      Test condition and select ( temp void)
-0:3        Condition
-0:3        all ( temp bool)
-0:3          Equal ( temp 4-component vector of bool)
-0:3            'input' ( in 4-component vector of float)
-0:3            'input' ( in 4-component vector of float)
-0:3        true case
-0:4        Branch: Return with expression
-0:4          'input' ( in 4-component vector of float)
-0:6      Test condition and select ( temp void)
-0:6        Condition
-0:6        all ( temp bool)
-0:6          Equal ( temp 4-component vector of bool)
-0:6            'input' ( in 4-component vector of float)
-0:6            'input' ( in 4-component vector of float)
-0:6        true case
-0:7        Branch: Return with expression
-0:7          'input' ( in 4-component vector of float)
-0:6        false case
-0:9        Branch: Return with expression
-0:9          Negate value ( temp 4-component vector of float)
+0:2      Test condition and select ( temp void)
+0:2        Condition
+0:2        all ( temp bool)
+0:2          Equal ( temp 4-component vector of bool)
+0:2            'input' ( in 4-component vector of float)
+0:2            'input' ( in 4-component vector of float)
+0:2        true case
+0:3        Branch: Return with expression
+0:3          'input' ( in 4-component vector of float)
+0:2        false case
+0:5        Branch: Return with expression
+0:5          Negate value ( temp 4-component vector of float)
+0:5            'input' ( in 4-component vector of float)
+0:8  Function Definition: f1(vf4; ( temp 4-component vector of float)
+0:8    Function Parameters: 
+0:8      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:9      Test condition and select ( temp void)
+0:9        Condition
+0:9        all ( temp bool)
+0:9          Equal ( temp 4-component vector of bool)
 0:9            'input' ( in 4-component vector of float)
-0:11      Test condition and select ( temp void)
-0:11        Condition
-0:11        all ( temp bool)
-0:11          Equal ( temp 4-component vector of bool)
-0:11            'input' ( in 4-component vector of float)
-0:11            'input' ( in 4-component vector of float)
-0:11        true case is null
-0:14      Test condition and select ( temp void)
-0:14        Condition
-0:14        all ( temp bool)
-0:14          Equal ( temp 4-component vector of bool)
-0:14            'input' ( in 4-component vector of float)
-0:14            'input' ( in 4-component vector of float)
-0:14        true case is null
-0:19      Test condition and select ( temp void): Flatten
-0:19        Condition
-0:19        all ( temp bool)
-0:19          Equal ( temp 4-component vector of bool)
-0:19            'input' ( in 4-component vector of float)
-0:19            'input' ( in 4-component vector of float)
-0:19        true case
+0:9            'input' ( in 4-component vector of float)
+0:9        true case
 0:?         Sequence
-0:20          Branch: Return with expression
-0:20            'input' ( in 4-component vector of float)
+0:10          Branch: Return with expression
+0:10            'input' ( in 4-component vector of float)
+0:9        false case
+0:?         Sequence
+0:12          Branch: Return with expression
+0:12            Negate value ( temp 4-component vector of float)
+0:12              'input' ( in 4-component vector of float)
+0:17  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:17    Function Parameters: 
+0:17      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:18      Test condition and select ( temp void)
+0:18        Condition
+0:18        all ( temp bool)
+0:18          Equal ( temp 4-component vector of bool)
+0:18            'input' ( in 4-component vector of float)
+0:18            'input' ( in 4-component vector of float)
+0:18        true case
+0:19        Branch: Return with expression
+0:19          'input' ( in 4-component vector of float)
+0:21      Function Call: f0(vf4; ( temp 4-component vector of float)
+0:21        'input' ( in 4-component vector of float)
 0:23      Test condition and select ( temp void)
 0:23        Condition
 0:23        all ( temp bool)
 0:23          Equal ( temp 4-component vector of bool)
 0:23            'input' ( in 4-component vector of float)
 0:23            'input' ( in 4-component vector of float)
-0:23        true case
+0:23        true case is null
+0:26      Test condition and select ( temp void)
+0:26        Condition
+0:26        all ( temp bool)
+0:26          Equal ( temp 4-component vector of bool)
+0:26            'input' ( in 4-component vector of float)
+0:26            'input' ( in 4-component vector of float)
+0:26        true case is null
+0:31      Test condition and select ( temp void): Flatten
+0:31        Condition
+0:31        all ( temp bool)
+0:31          Equal ( temp 4-component vector of bool)
+0:31            'input' ( in 4-component vector of float)
+0:31            'input' ( in 4-component vector of float)
+0:31        true case
 0:?         Sequence
-0:24          Branch: Return with expression
-0:24            'input' ( in 4-component vector of float)
-0:23        false case
-0:?         Sequence
-0:26          Branch: Return with expression
-0:26            Negate value ( temp 4-component vector of float)
-0:26              'input' ( in 4-component vector of float)
-0:30      Test condition and select ( temp void)
-0:30        Condition
-0:30        Convert float to bool ( temp bool)
-0:30          move second child to first child ( temp float)
-0:30            'ii' ( temp float)
-0:30            direct index ( temp float)
-0:30              'input' ( in 4-component vector of float)
-0:30              Constant:
-0:30                2 (const int)
-0:30        true case
-0:31        Pre-Increment ( temp float)
-0:31          'ii' ( temp float)
-0:32      Pre-Increment ( temp int)
-0:32        'ii' ( temp int)
-0:33      Test condition and select ( temp void)
-0:33        Condition
-0:33        Compare Equal ( temp bool)
-0:33          Convert int to float ( temp float)
-0:33            'ii' ( temp int)
-0:33          Constant:
-0:33            1.000000
-0:33        true case
-0:34        Pre-Increment ( temp int)
-0:34          'ii' ( temp int)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:32          Branch: Return with expression
+0:32            'input' ( in 4-component vector of float)
+0:35      Function Call: f1(vf4; ( temp 4-component vector of float)
+0:35        'input' ( in 4-component vector of float)
+0:38      Test condition and select ( temp void)
+0:38        Condition
+0:38        Convert float to bool ( temp bool)
+0:38          move second child to first child ( temp float)
+0:38            'ii' ( temp float)
+0:38            direct index ( temp float)
+0:38              'input' ( in 4-component vector of float)
+0:38              Constant:
+0:38                2 (const int)
+0:38        true case
+0:39        Pre-Increment ( temp float)
+0:39          'ii' ( temp float)
+0:40      Pre-Increment ( temp int)
+0:40        'ii' ( temp int)
+0:41      Test condition and select ( temp void)
+0:41        Condition
+0:41        Compare Equal ( temp bool)
+0:41          Convert int to float ( temp float)
+0:41            'ii' ( temp int)
+0:41          Constant:
+0:41            1.000000
+0:41        true case
+0:42        Pre-Increment ( temp int)
+0:42          'ii' ( temp int)
+0:17  Function Definition: PixelShaderFunction( ( temp void)
+0:17    Function Parameters: 
 0:?     Sequence
-0:2      move second child to first child ( temp 4-component vector of float)
+0:17      move second child to first child ( temp 4-component vector of float)
 0:?         'input' ( temp 4-component vector of float)
 0:?         'input' (layout( location=0) in 4-component vector of float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:17      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:17        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
 0:?           'input' ( temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
@@ -112,259 +124,295 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in 4-component vector of float)
+0:1  Function Definition: f0(vf4; ( temp 4-component vector of float)
+0:1    Function Parameters: 
+0:1      'input' ( in 4-component vector of float)
 0:?     Sequence
-0:3      Test condition and select ( temp void)
-0:3        Condition
-0:3        all ( temp bool)
-0:3          Equal ( temp 4-component vector of bool)
-0:3            'input' ( in 4-component vector of float)
-0:3            'input' ( in 4-component vector of float)
-0:3        true case
-0:4        Branch: Return with expression
-0:4          'input' ( in 4-component vector of float)
-0:6      Test condition and select ( temp void)
-0:6        Condition
-0:6        all ( temp bool)
-0:6          Equal ( temp 4-component vector of bool)
-0:6            'input' ( in 4-component vector of float)
-0:6            'input' ( in 4-component vector of float)
-0:6        true case
-0:7        Branch: Return with expression
-0:7          'input' ( in 4-component vector of float)
-0:6        false case
-0:9        Branch: Return with expression
-0:9          Negate value ( temp 4-component vector of float)
+0:2      Test condition and select ( temp void)
+0:2        Condition
+0:2        all ( temp bool)
+0:2          Equal ( temp 4-component vector of bool)
+0:2            'input' ( in 4-component vector of float)
+0:2            'input' ( in 4-component vector of float)
+0:2        true case
+0:3        Branch: Return with expression
+0:3          'input' ( in 4-component vector of float)
+0:2        false case
+0:5        Branch: Return with expression
+0:5          Negate value ( temp 4-component vector of float)
+0:5            'input' ( in 4-component vector of float)
+0:8  Function Definition: f1(vf4; ( temp 4-component vector of float)
+0:8    Function Parameters: 
+0:8      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:9      Test condition and select ( temp void)
+0:9        Condition
+0:9        all ( temp bool)
+0:9          Equal ( temp 4-component vector of bool)
 0:9            'input' ( in 4-component vector of float)
-0:11      Test condition and select ( temp void)
-0:11        Condition
-0:11        all ( temp bool)
-0:11          Equal ( temp 4-component vector of bool)
-0:11            'input' ( in 4-component vector of float)
-0:11            'input' ( in 4-component vector of float)
-0:11        true case is null
-0:14      Test condition and select ( temp void)
-0:14        Condition
-0:14        all ( temp bool)
-0:14          Equal ( temp 4-component vector of bool)
-0:14            'input' ( in 4-component vector of float)
-0:14            'input' ( in 4-component vector of float)
-0:14        true case is null
-0:19      Test condition and select ( temp void): Flatten
-0:19        Condition
-0:19        all ( temp bool)
-0:19          Equal ( temp 4-component vector of bool)
-0:19            'input' ( in 4-component vector of float)
-0:19            'input' ( in 4-component vector of float)
-0:19        true case
+0:9            'input' ( in 4-component vector of float)
+0:9        true case
 0:?         Sequence
-0:20          Branch: Return with expression
-0:20            'input' ( in 4-component vector of float)
+0:10          Branch: Return with expression
+0:10            'input' ( in 4-component vector of float)
+0:9        false case
+0:?         Sequence
+0:12          Branch: Return with expression
+0:12            Negate value ( temp 4-component vector of float)
+0:12              'input' ( in 4-component vector of float)
+0:17  Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:17    Function Parameters: 
+0:17      'input' ( in 4-component vector of float)
+0:?     Sequence
+0:18      Test condition and select ( temp void)
+0:18        Condition
+0:18        all ( temp bool)
+0:18          Equal ( temp 4-component vector of bool)
+0:18            'input' ( in 4-component vector of float)
+0:18            'input' ( in 4-component vector of float)
+0:18        true case
+0:19        Branch: Return with expression
+0:19          'input' ( in 4-component vector of float)
+0:21      Function Call: f0(vf4; ( temp 4-component vector of float)
+0:21        'input' ( in 4-component vector of float)
 0:23      Test condition and select ( temp void)
 0:23        Condition
 0:23        all ( temp bool)
 0:23          Equal ( temp 4-component vector of bool)
 0:23            'input' ( in 4-component vector of float)
 0:23            'input' ( in 4-component vector of float)
-0:23        true case
+0:23        true case is null
+0:26      Test condition and select ( temp void)
+0:26        Condition
+0:26        all ( temp bool)
+0:26          Equal ( temp 4-component vector of bool)
+0:26            'input' ( in 4-component vector of float)
+0:26            'input' ( in 4-component vector of float)
+0:26        true case is null
+0:31      Test condition and select ( temp void): Flatten
+0:31        Condition
+0:31        all ( temp bool)
+0:31          Equal ( temp 4-component vector of bool)
+0:31            'input' ( in 4-component vector of float)
+0:31            'input' ( in 4-component vector of float)
+0:31        true case
 0:?         Sequence
-0:24          Branch: Return with expression
-0:24            'input' ( in 4-component vector of float)
-0:23        false case
-0:?         Sequence
-0:26          Branch: Return with expression
-0:26            Negate value ( temp 4-component vector of float)
-0:26              'input' ( in 4-component vector of float)
-0:30      Test condition and select ( temp void)
-0:30        Condition
-0:30        Convert float to bool ( temp bool)
-0:30          move second child to first child ( temp float)
-0:30            'ii' ( temp float)
-0:30            direct index ( temp float)
-0:30              'input' ( in 4-component vector of float)
-0:30              Constant:
-0:30                2 (const int)
-0:30        true case
-0:31        Pre-Increment ( temp float)
-0:31          'ii' ( temp float)
-0:32      Pre-Increment ( temp int)
-0:32        'ii' ( temp int)
-0:33      Test condition and select ( temp void)
-0:33        Condition
-0:33        Compare Equal ( temp bool)
-0:33          Convert int to float ( temp float)
-0:33            'ii' ( temp int)
-0:33          Constant:
-0:33            1.000000
-0:33        true case
-0:34        Pre-Increment ( temp int)
-0:34          'ii' ( temp int)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:32          Branch: Return with expression
+0:32            'input' ( in 4-component vector of float)
+0:35      Function Call: f1(vf4; ( temp 4-component vector of float)
+0:35        'input' ( in 4-component vector of float)
+0:38      Test condition and select ( temp void)
+0:38        Condition
+0:38        Convert float to bool ( temp bool)
+0:38          move second child to first child ( temp float)
+0:38            'ii' ( temp float)
+0:38            direct index ( temp float)
+0:38              'input' ( in 4-component vector of float)
+0:38              Constant:
+0:38                2 (const int)
+0:38        true case
+0:39        Pre-Increment ( temp float)
+0:39          'ii' ( temp float)
+0:40      Pre-Increment ( temp int)
+0:40        'ii' ( temp int)
+0:41      Test condition and select ( temp void)
+0:41        Condition
+0:41        Compare Equal ( temp bool)
+0:41          Convert int to float ( temp float)
+0:41            'ii' ( temp int)
+0:41          Constant:
+0:41            1.000000
+0:41        true case
+0:42        Pre-Increment ( temp int)
+0:42          'ii' ( temp int)
+0:17  Function Definition: PixelShaderFunction( ( temp void)
+0:17    Function Parameters: 
 0:?     Sequence
-0:2      move second child to first child ( temp 4-component vector of float)
+0:17      move second child to first child ( temp 4-component vector of float)
 0:?         'input' ( temp 4-component vector of float)
 0:?         'input' (layout( location=0) in 4-component vector of float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:17      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
+0:17        Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
 0:?           'input' ( temp 4-component vector of float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 103
+// Generated by (magic number): 80008
+// Id's are bound by 117
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 96 99
+                              EntryPoint Fragment 4  "PixelShaderFunction" 110 113
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
-                              Name 11  "@PixelShaderFunction(vf4;"
+                              Name 11  "f0(vf4;"
                               Name 10  "input"
-                              Name 68  "ii"
+                              Name 14  "f1(vf4;"
+                              Name 13  "input"
+                              Name 17  "@PixelShaderFunction(vf4;"
+                              Name 16  "input"
+                              Name 55  "param"
+                              Name 78  "param"
                               Name 82  "ii"
-                              Name 94  "input"
-                              Name 96  "input"
-                              Name 99  "@entryPointOutput"
-                              Name 100  "param"
-                              Decorate 96(input) Location 0
-                              Decorate 99(@entryPointOutput) Location 0
+                              Name 96  "ii"
+                              Name 108  "input"
+                              Name 110  "input"
+                              Name 113  "@entryPointOutput"
+                              Name 114  "param"
+                              Decorate 110(input) Location 0
+                              Decorate 113(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
                8:             TypePointer Function 7(fvec4)
                9:             TypeFunction 7(fvec4) 8(ptr)
-              15:             TypeBool
-              16:             TypeVector 15(bool) 4
-              67:             TypePointer Function 6(float)
-              69:             TypeInt 32 0
-              70:     69(int) Constant 2
-              73:    6(float) Constant 0
-              78:    6(float) Constant 1065353216
-              80:             TypeInt 32 1
-              81:             TypePointer Function 80(int)
-              84:     80(int) Constant 1
-              95:             TypePointer Input 7(fvec4)
-       96(input):     95(ptr) Variable Input
-              98:             TypePointer Output 7(fvec4)
-99(@entryPointOutput):     98(ptr) Variable Output
+              21:             TypeBool
+              22:             TypeVector 21(bool) 4
+              81:             TypePointer Function 6(float)
+              83:             TypeInt 32 0
+              84:     83(int) Constant 2
+              87:    6(float) Constant 0
+              92:    6(float) Constant 1065353216
+              94:             TypeInt 32 1
+              95:             TypePointer Function 94(int)
+              98:     94(int) Constant 1
+             109:             TypePointer Input 7(fvec4)
+      110(input):    109(ptr) Variable Input
+             112:             TypePointer Output 7(fvec4)
+113(@entryPointOutput):    112(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       94(input):      8(ptr) Variable Function
-      100(param):      8(ptr) Variable Function
-              97:    7(fvec4) Load 96(input)
-                              Store 94(input) 97
-             101:    7(fvec4) Load 94(input)
-                              Store 100(param) 101
-             102:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 100(param)
-                              Store 99(@entryPointOutput) 102
+      108(input):      8(ptr) Variable Function
+      114(param):      8(ptr) Variable Function
+             111:    7(fvec4) Load 110(input)
+                              Store 108(input) 111
+             115:    7(fvec4) Load 108(input)
+                              Store 114(param) 115
+             116:    7(fvec4) FunctionCall 17(@PixelShaderFunction(vf4;) 114(param)
+                              Store 113(@entryPointOutput) 116
                               Return
                               FunctionEnd
-11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
+     11(f0(vf4;):    7(fvec4) Function None 9
        10(input):      8(ptr) FunctionParameter
               12:             Label
-          68(ii):     67(ptr) Variable Function
+              19:    7(fvec4) Load 10(input)
+              20:    7(fvec4) Load 10(input)
+              23:   22(bvec4) FOrdEqual 19 20
+              24:    21(bool) All 23
+                              SelectionMerge 26 None
+                              BranchConditional 24 25 29
+              25:               Label
+              27:    7(fvec4)   Load 10(input)
+                                ReturnValue 27
+              29:               Label
+              30:    7(fvec4)   Load 10(input)
+              31:    7(fvec4)   FNegate 30
+                                ReturnValue 31
+              26:             Label
+                              Unreachable
+                              FunctionEnd
+     14(f1(vf4;):    7(fvec4) Function None 9
+       13(input):      8(ptr) FunctionParameter
+              15:             Label
+              34:    7(fvec4) Load 13(input)
+              35:    7(fvec4) Load 13(input)
+              36:   22(bvec4) FOrdEqual 34 35
+              37:    21(bool) All 36
+                              SelectionMerge 39 None
+                              BranchConditional 37 38 42
+              38:               Label
+              40:    7(fvec4)   Load 13(input)
+                                ReturnValue 40
+              42:               Label
+              43:    7(fvec4)   Load 13(input)
+              44:    7(fvec4)   FNegate 43
+                                ReturnValue 44
+              39:             Label
+                              Unreachable
+                              FunctionEnd
+17(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
+       16(input):      8(ptr) FunctionParameter
+              18:             Label
+       55(param):      8(ptr) Variable Function
+       78(param):      8(ptr) Variable Function
           82(ii):     81(ptr) Variable Function
-              13:    7(fvec4) Load 10(input)
-              14:    7(fvec4) Load 10(input)
-              17:   16(bvec4) FOrdEqual 13 14
-              18:    15(bool) All 17
-                              SelectionMerge 20 None
-                              BranchConditional 18 19 20
-              19:               Label
-              21:    7(fvec4)   Load 10(input)
-                                ReturnValue 21
-              20:             Label
-              23:    7(fvec4) Load 10(input)
-              24:    7(fvec4) Load 10(input)
-              25:   16(bvec4) FOrdEqual 23 24
-              26:    15(bool) All 25
-                              SelectionMerge 28 None
-                              BranchConditional 26 27 31
-              27:               Label
-              29:    7(fvec4)   Load 10(input)
-                                ReturnValue 29
-              31:               Label
-              32:    7(fvec4)   Load 10(input)
-              33:    7(fvec4)   FNegate 32
-                                ReturnValue 33
-              28:             Label
-              35:    7(fvec4) Load 10(input)
-              36:    7(fvec4) Load 10(input)
-              37:   16(bvec4) FOrdEqual 35 36
-              38:    15(bool) All 37
-                              SelectionMerge 40 None
-                              BranchConditional 38 39 40
-              39:               Label
-                                Branch 40
-              40:             Label
-              41:    7(fvec4) Load 10(input)
-              42:    7(fvec4) Load 10(input)
-              43:   16(bvec4) FOrdEqual 41 42
-              44:    15(bool) All 43
-                              SelectionMerge 46 None
-                              BranchConditional 44 45 46
-              45:               Label
-                                Branch 46
-              46:             Label
-              47:    7(fvec4) Load 10(input)
-              48:    7(fvec4) Load 10(input)
-              49:   16(bvec4) FOrdEqual 47 48
-              50:    15(bool) All 49
-                              SelectionMerge 52 Flatten 
+          96(ii):     95(ptr) Variable Function
+              47:    7(fvec4) Load 16(input)
+              48:    7(fvec4) Load 16(input)
+              49:   22(bvec4) FOrdEqual 47 48
+              50:    21(bool) All 49
+                              SelectionMerge 52 None
                               BranchConditional 50 51 52
               51:               Label
-              53:    7(fvec4)   Load 10(input)
+              53:    7(fvec4)   Load 16(input)
                                 ReturnValue 53
               52:             Label
-              55:    7(fvec4) Load 10(input)
-              56:    7(fvec4) Load 10(input)
-              57:   16(bvec4) FOrdEqual 55 56
-              58:    15(bool) All 57
-                              SelectionMerge 60 None
-                              BranchConditional 58 59 63
-              59:               Label
-              61:    7(fvec4)   Load 10(input)
-                                ReturnValue 61
-              63:               Label
-              64:    7(fvec4)   Load 10(input)
-              65:    7(fvec4)   FNegate 64
-                                ReturnValue 65
-              60:             Label
-              71:     67(ptr) AccessChain 10(input) 70
-              72:    6(float) Load 71
-                              Store 68(ii) 72
-              74:    15(bool) FOrdNotEqual 72 73
-                              SelectionMerge 76 None
-                              BranchConditional 74 75 76
-              75:               Label
-              77:    6(float)   Load 68(ii)
-              79:    6(float)   FAdd 77 78
-                                Store 68(ii) 79
-                                Branch 76
-              76:             Label
-              83:     80(int) Load 82(ii)
-              85:     80(int) IAdd 83 84
-                              Store 82(ii) 85
-              86:     80(int) Load 82(ii)
-              87:    6(float) ConvertSToF 86
-              88:    15(bool) FOrdEqual 87 78
+              56:    7(fvec4) Load 16(input)
+                              Store 55(param) 56
+              57:    7(fvec4) FunctionCall 11(f0(vf4;) 55(param)
+              58:    7(fvec4) Load 16(input)
+              59:    7(fvec4) Load 16(input)
+              60:   22(bvec4) FOrdEqual 58 59
+              61:    21(bool) All 60
+                              SelectionMerge 63 None
+                              BranchConditional 61 62 63
+              62:               Label
+                                Branch 63
+              63:             Label
+              64:    7(fvec4) Load 16(input)
+              65:    7(fvec4) Load 16(input)
+              66:   22(bvec4) FOrdEqual 64 65
+              67:    21(bool) All 66
+                              SelectionMerge 69 None
+                              BranchConditional 67 68 69
+              68:               Label
+                                Branch 69
+              69:             Label
+              70:    7(fvec4) Load 16(input)
+              71:    7(fvec4) Load 16(input)
+              72:   22(bvec4) FOrdEqual 70 71
+              73:    21(bool) All 72
+                              SelectionMerge 75 Flatten 
+                              BranchConditional 73 74 75
+              74:               Label
+              76:    7(fvec4)   Load 16(input)
+                                ReturnValue 76
+              75:             Label
+              79:    7(fvec4) Load 16(input)
+                              Store 78(param) 79
+              80:    7(fvec4) FunctionCall 14(f1(vf4;) 78(param)
+              85:     81(ptr) AccessChain 16(input) 84
+              86:    6(float) Load 85
+                              Store 82(ii) 86
+              88:    21(bool) FOrdNotEqual 86 87
                               SelectionMerge 90 None
                               BranchConditional 88 89 90
               89:               Label
-              91:     80(int)   Load 82(ii)
-              92:     80(int)   IAdd 91 84
-                                Store 82(ii) 92
+              91:    6(float)   Load 82(ii)
+              93:    6(float)   FAdd 91 92
+                                Store 82(ii) 93
                                 Branch 90
               90:             Label
-              93:    7(fvec4) Undef
-                              ReturnValue 93
+              97:     94(int) Load 96(ii)
+              99:     94(int) IAdd 97 98
+                              Store 96(ii) 99
+             100:     94(int) Load 96(ii)
+             101:    6(float) ConvertSToF 100
+             102:    21(bool) FOrdEqual 101 92
+                              SelectionMerge 104 None
+                              BranchConditional 102 103 104
+             103:               Label
+             105:     94(int)   Load 96(ii)
+             106:     94(int)   IAdd 105 98
+                                Store 96(ii) 106
+                                Branch 104
+             104:             Label
+             107:    7(fvec4) Undef
+                              ReturnValue 107
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
index 721aeea..304f24b 100644
--- a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
+++ b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
@@ -72,7 +72,7 @@
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.implicitBool.frag.out b/Test/baseResults/hlsl.implicitBool.frag.out
index c616125..8b5dcde 100644
--- a/Test/baseResults/hlsl.implicitBool.frag.out
+++ b/Test/baseResults/hlsl.implicitBool.frag.out
@@ -332,7 +332,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 139
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.include.vert.out b/Test/baseResults/hlsl.include.vert.out
index 88ee8e7..4a814ae 100644
--- a/Test/baseResults/hlsl.include.vert.out
+++ b/Test/baseResults/hlsl.include.vert.out
@@ -1,6 +1,6 @@
 ../Test/hlsl.include.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.inf.vert.out b/Test/baseResults/hlsl.inf.vert.out
index 1cedc55..02326b3 100644
--- a/Test/baseResults/hlsl.inf.vert.out
+++ b/Test/baseResults/hlsl.inf.vert.out
@@ -112,7 +112,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.init.frag.out b/Test/baseResults/hlsl.init.frag.out
index 1d9a5ef..2139adb 100644
--- a/Test/baseResults/hlsl.init.frag.out
+++ b/Test/baseResults/hlsl.init.frag.out
@@ -331,7 +331,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float a, layout( row_major std140) uniform float b, layout( row_major std140) uniform float c})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 110
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.init2.frag.out b/Test/baseResults/hlsl.init2.frag.out
index 9e03de3..0ba8bd2 100644
--- a/Test/baseResults/hlsl.init2.frag.out
+++ b/Test/baseResults/hlsl.init2.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 112
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.inoutquals.frag.out b/Test/baseResults/hlsl.inoutquals.frag.out
index 42adb1a..2ffa3c5 100644
--- a/Test/baseResults/hlsl.inoutquals.frag.out
+++ b/Test/baseResults/hlsl.inoutquals.frag.out
@@ -214,7 +214,7 @@
 0:?     'sampleMask' ( out 1-element array of int SampleMaskIn)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 92
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.int.dot.frag.out b/Test/baseResults/hlsl.int.dot.frag.out
index afe44c8..7ea22a1 100644
--- a/Test/baseResults/hlsl.int.dot.frag.out
+++ b/Test/baseResults/hlsl.int.dot.frag.out
@@ -224,7 +224,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader
@@ -295,7 +295,7 @@
               39:   17(ivec2) Load 19(i3)
               40:   17(ivec2) IMul 38 39
               41:     11(int) CompositeExtract 40 0
-              42:     11(int) CompositeExtract 38 1
+              42:     11(int) CompositeExtract 40 1
               43:     11(int) IAdd 41 42
               44:   17(ivec2) CompositeConstruct 43 43
                               Store 19(i3) 44
@@ -303,9 +303,9 @@
               46:   22(ivec3) Load 24(i4)
               47:   22(ivec3) IMul 45 46
               48:     11(int) CompositeExtract 47 0
-              49:     11(int) CompositeExtract 45 1
+              49:     11(int) CompositeExtract 47 1
               50:     11(int) IAdd 48 49
-              51:     11(int) CompositeExtract 45 2
+              51:     11(int) CompositeExtract 47 2
               52:     11(int) IAdd 50 51
               53:   22(ivec3) CompositeConstruct 52 52 52
                               Store 24(i4) 53
@@ -313,11 +313,11 @@
               55:   27(ivec4) Load 29(i5)
               56:   27(ivec4) IMul 54 55
               57:     11(int) CompositeExtract 56 0
-              58:     11(int) CompositeExtract 54 1
+              58:     11(int) CompositeExtract 56 1
               59:     11(int) IAdd 57 58
-              60:     11(int) CompositeExtract 54 2
+              60:     11(int) CompositeExtract 56 2
               61:     11(int) IAdd 59 60
-              62:     11(int) CompositeExtract 54 3
+              62:     11(int) CompositeExtract 56 3
               63:     11(int) IAdd 61 62
               64:   27(ivec4) CompositeConstruct 63 63 63 63
                               Store 29(i5) 64
diff --git a/Test/baseResults/hlsl.intrinsic.frexp.frag.out b/Test/baseResults/hlsl.intrinsic.frexp.frag.out
index 3a9d6fd..9fb9cc5 100644
--- a/Test/baseResults/hlsl.intrinsic.frexp.frag.out
+++ b/Test/baseResults/hlsl.intrinsic.frexp.frag.out
@@ -190,7 +190,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsic.frexp.vert.out b/Test/baseResults/hlsl.intrinsic.frexp.vert.out
index 92bd7ef..7069ece 100644
--- a/Test/baseResults/hlsl.intrinsic.frexp.vert.out
+++ b/Test/baseResults/hlsl.intrinsic.frexp.vert.out
@@ -113,7 +113,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
index 13fe578..a078978 100644
--- a/Test/baseResults/hlsl.intrinsics.barriers.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
@@ -52,7 +52,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out
index 3329c5c..761a3b3 100644
--- a/Test/baseResults/hlsl.intrinsics.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.comp.out
@@ -717,7 +717,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 265
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
index f2216de..4832241 100644
--- a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
@@ -74,7 +74,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.double.frag.out b/Test/baseResults/hlsl.intrinsics.double.frag.out
index 55a102f..472f31b 100644
--- a/Test/baseResults/hlsl.intrinsics.double.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.double.frag.out
@@ -164,7 +164,7 @@
 0:?     'inU1b' (layout( location=9) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 90
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
index 3f69827..0260b93 100644
--- a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out
@@ -155,7 +155,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.f1632.frag.out b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
index c5619ef..5277c5c 100644
--- a/Test/baseResults/hlsl.intrinsics.f1632.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
@@ -17,8 +17,13 @@
 0:7      'inF0' ( in 1-component vector of uint)
 0:?     Sequence
 0:8      Branch: Return with expression
-0:8        Constant:
-0:8          0.000000
+0:8        Construct float ( temp 1-component vector of float)
+0:8          direct index ( temp float)
+0:8            unpackHalf2x16 ( temp 2-component vector of float)
+0:8              Construct uint ( in uint)
+0:8                'inF0' ( in 1-component vector of uint)
+0:8            Constant:
+0:8              0 (const int)
 0:12  Function Definition: PixelShaderFunction2(vu2; ( temp 2-component vector of float)
 0:12    Function Parameters: 
 0:12      'inF0' ( in 2-component vector of uint)
@@ -149,8 +154,13 @@
 0:7      'inF0' ( in 1-component vector of uint)
 0:?     Sequence
 0:8      Branch: Return with expression
-0:8        Constant:
-0:8          0.000000
+0:8        Construct float ( temp 1-component vector of float)
+0:8          direct index ( temp float)
+0:8            unpackHalf2x16 ( temp 2-component vector of float)
+0:8              Construct uint ( in uint)
+0:8                'inF0' ( in 1-component vector of uint)
+0:8            Constant:
+0:8              0 (const int)
 0:12  Function Definition: PixelShaderFunction2(vu2; ( temp 2-component vector of float)
 0:12    Function Parameters: 
 0:12      'inF0' ( in 2-component vector of uint)
@@ -260,13 +270,13 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 103
+// Generated by (magic number): 80008
+// Id's are bound by 106
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 101
+                              EntryPoint Fragment 4  "main" 104
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -281,8 +291,8 @@
                               Name 35  "PixelShaderFunction(vu4;"
                               Name 34  "inF0"
                               Name 38  "@main("
-                              Name 101  "@entryPointOutput"
-                              Decorate 101(@entryPointOutput) Location 0
+                              Name 104  "@entryPointOutput"
+                              Decorate 104(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -303,17 +313,17 @@
               33:             TypeFunction 32(fvec4) 31(ptr)
               37:             TypeFunction 32(fvec4)
               42:      6(int) Constant 0
-              46:    8(float) Constant 0
-              53:      6(int) Constant 1
-              69:      6(int) Constant 2
-              89:      6(int) Constant 3
-              97:   32(fvec4) ConstantComposite 46 46 46 46
-             100:             TypePointer Output 32(fvec4)
-101(@entryPointOutput):    100(ptr) Variable Output
+              55:      6(int) Constant 1
+              71:      6(int) Constant 2
+              91:      6(int) Constant 3
+              99:    8(float) Constant 0
+             100:   32(fvec4) ConstantComposite 99 99 99 99
+             103:             TypePointer Output 32(fvec4)
+104(@entryPointOutput):    103(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-             102:   32(fvec4) FunctionCall 38(@main()
-                              Store 101(@entryPointOutput) 102
+             105:   32(fvec4) FunctionCall 38(@main()
+                              Store 104(@entryPointOutput) 105
                               Return
                               FunctionEnd
 11(PixelShaderFunctionS(u1;):    8(float) Function None 9
@@ -327,63 +337,66 @@
 14(PixelShaderFunction1(vu1;):    8(float) Function None 9
         13(inF0):      7(ptr) FunctionParameter
               15:             Label
-                              ReturnValue 46
+              46:      6(int) Load 13(inF0)
+              47:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 46
+              48:    8(float) CompositeExtract 47 0
+                              ReturnValue 48
                               FunctionEnd
 21(PixelShaderFunction2(vu2;):   18(fvec2) Function None 19
         20(inF0):     17(ptr) FunctionParameter
               22:             Label
-              49:      7(ptr) AccessChain 20(inF0) 42
-              50:      6(int) Load 49
-              51:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 50
-              52:    8(float) CompositeExtract 51 0
-              54:      7(ptr) AccessChain 20(inF0) 53
-              55:      6(int) Load 54
-              56:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 55
-              57:    8(float) CompositeExtract 56 0
-              58:   18(fvec2) CompositeConstruct 52 57
-                              ReturnValue 58
+              51:      7(ptr) AccessChain 20(inF0) 42
+              52:      6(int) Load 51
+              53:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 52
+              54:    8(float) CompositeExtract 53 0
+              56:      7(ptr) AccessChain 20(inF0) 55
+              57:      6(int) Load 56
+              58:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 57
+              59:    8(float) CompositeExtract 58 0
+              60:   18(fvec2) CompositeConstruct 54 59
+                              ReturnValue 60
                               FunctionEnd
 28(PixelShaderFunction3(vu3;):   25(fvec3) Function None 26
         27(inF0):     24(ptr) FunctionParameter
               29:             Label
-              61:      7(ptr) AccessChain 27(inF0) 42
-              62:      6(int) Load 61
-              63:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 62
-              64:    8(float) CompositeExtract 63 0
-              65:      7(ptr) AccessChain 27(inF0) 53
-              66:      6(int) Load 65
-              67:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 66
-              68:    8(float) CompositeExtract 67 0
-              70:      7(ptr) AccessChain 27(inF0) 69
-              71:      6(int) Load 70
-              72:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 71
-              73:    8(float) CompositeExtract 72 0
-              74:   25(fvec3) CompositeConstruct 64 68 73
-                              ReturnValue 74
+              63:      7(ptr) AccessChain 27(inF0) 42
+              64:      6(int) Load 63
+              65:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 64
+              66:    8(float) CompositeExtract 65 0
+              67:      7(ptr) AccessChain 27(inF0) 55
+              68:      6(int) Load 67
+              69:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 68
+              70:    8(float) CompositeExtract 69 0
+              72:      7(ptr) AccessChain 27(inF0) 71
+              73:      6(int) Load 72
+              74:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 73
+              75:    8(float) CompositeExtract 74 0
+              76:   25(fvec3) CompositeConstruct 66 70 75
+                              ReturnValue 76
                               FunctionEnd
 35(PixelShaderFunction(vu4;):   32(fvec4) Function None 33
         34(inF0):     31(ptr) FunctionParameter
               36:             Label
-              77:      7(ptr) AccessChain 34(inF0) 42
-              78:      6(int) Load 77
-              79:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 78
-              80:    8(float) CompositeExtract 79 0
-              81:      7(ptr) AccessChain 34(inF0) 53
-              82:      6(int) Load 81
-              83:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 82
-              84:    8(float) CompositeExtract 83 0
-              85:      7(ptr) AccessChain 34(inF0) 69
-              86:      6(int) Load 85
-              87:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 86
-              88:    8(float) CompositeExtract 87 0
-              90:      7(ptr) AccessChain 34(inF0) 89
-              91:      6(int) Load 90
-              92:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 91
-              93:    8(float) CompositeExtract 92 0
-              94:   32(fvec4) CompositeConstruct 80 84 88 93
-                              ReturnValue 94
+              79:      7(ptr) AccessChain 34(inF0) 42
+              80:      6(int) Load 79
+              81:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 80
+              82:    8(float) CompositeExtract 81 0
+              83:      7(ptr) AccessChain 34(inF0) 55
+              84:      6(int) Load 83
+              85:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 84
+              86:    8(float) CompositeExtract 85 0
+              87:      7(ptr) AccessChain 34(inF0) 71
+              88:      6(int) Load 87
+              89:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 88
+              90:    8(float) CompositeExtract 89 0
+              92:      7(ptr) AccessChain 34(inF0) 91
+              93:      6(int) Load 92
+              94:   18(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 93
+              95:    8(float) CompositeExtract 94 0
+              96:   32(fvec4) CompositeConstruct 82 86 90 95
+                              ReturnValue 96
                               FunctionEnd
       38(@main():   32(fvec4) Function None 37
               39:             Label
-                              ReturnValue 97
+                              ReturnValue 100
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.f3216.frag.out b/Test/baseResults/hlsl.intrinsics.f3216.frag.out
index c447efc..77826b3 100644
--- a/Test/baseResults/hlsl.intrinsics.f3216.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.f3216.frag.out
@@ -270,7 +270,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 106
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.frag.out b/Test/baseResults/hlsl.intrinsics.frag.out
index b8add07..dca823b 100644
--- a/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.frag.out
@@ -185,1073 +185,1068 @@
 0:55            'inF1' ( in float)
 0:56      Sequence
 0:56        move second child to first child ( temp float)
-0:56          'r034' ( temp float)
-0:56          Fraction ( temp float)
+0:56          'r033i' ( temp float)
+0:56          mod ( temp float)
 0:56            'inF0' ( in float)
+0:56            Constant:
+0:56              2.000000
 0:57      Sequence
 0:57        move second child to first child ( temp float)
-0:57          'r036' ( temp float)
-0:57          fwidth ( temp float)
+0:57          'r034' ( temp float)
+0:57          Fraction ( temp float)
 0:57            'inF0' ( in float)
 0:58      Sequence
-0:58        move second child to first child ( temp bool)
-0:58          'r037' ( temp bool)
-0:58          isinf ( temp bool)
+0:58        move second child to first child ( temp float)
+0:58          'r036' ( temp float)
+0:58          fwidth ( temp float)
 0:58            'inF0' ( in float)
 0:59      Sequence
 0:59        move second child to first child ( temp bool)
-0:59          'r038' ( temp bool)
-0:59          isnan ( temp bool)
+0:59          'r037' ( temp bool)
+0:59          isinf ( temp bool)
 0:59            'inF0' ( in float)
 0:60      Sequence
-0:60        move second child to first child ( temp float)
-0:60          'r039' ( temp float)
-0:60          ldexp ( temp float)
+0:60        move second child to first child ( temp bool)
+0:60          'r038' ( temp bool)
+0:60          isnan ( temp bool)
 0:60            'inF0' ( in float)
-0:60            'inF1' ( in float)
 0:61      Sequence
 0:61        move second child to first child ( temp float)
-0:61          'r039a' ( temp float)
-0:61          mix ( temp float)
+0:61          'r039' ( temp float)
+0:61          ldexp ( temp float)
 0:61            'inF0' ( in float)
 0:61            'inF1' ( in float)
-0:61            'inF2' ( in float)
 0:62      Sequence
 0:62        move second child to first child ( temp float)
-0:62          'r040' ( temp float)
-0:62          log ( temp float)
+0:62          'r039a' ( temp float)
+0:62          mix ( temp float)
 0:62            'inF0' ( in float)
+0:62            'inF1' ( in float)
+0:62            'inF2' ( in float)
 0:63      Sequence
 0:63        move second child to first child ( temp float)
-0:63          'r041' ( temp float)
-0:63          component-wise multiply ( temp float)
-0:63            log2 ( temp float)
-0:63              'inF0' ( in float)
-0:63            Constant:
-0:63              0.301030
+0:63          'r040' ( temp float)
+0:63          log ( temp float)
+0:63            'inF0' ( in float)
 0:64      Sequence
 0:64        move second child to first child ( temp float)
-0:64          'r042' ( temp float)
-0:64          log2 ( temp float)
-0:64            'inF0' ( in float)
+0:64          'r041' ( temp float)
+0:64          component-wise multiply ( temp float)
+0:64            log2 ( temp float)
+0:64              'inF0' ( in float)
+0:64            Constant:
+0:64              0.301030
 0:65      Sequence
 0:65        move second child to first child ( temp float)
-0:65          'r043' ( temp float)
-0:65          max ( temp float)
+0:65          'r042' ( temp float)
+0:65          log2 ( temp float)
 0:65            'inF0' ( in float)
-0:65            'inF1' ( in float)
 0:66      Sequence
 0:66        move second child to first child ( temp float)
-0:66          'r044' ( temp float)
-0:66          min ( temp float)
+0:66          'r043' ( temp float)
+0:66          max ( temp float)
 0:66            'inF0' ( in float)
 0:66            'inF1' ( in float)
 0:67      Sequence
 0:67        move second child to first child ( temp float)
-0:67          'r045' ( temp float)
-0:67          pow ( temp float)
+0:67          'r044' ( temp float)
+0:67          min ( temp float)
 0:67            'inF0' ( in float)
 0:67            'inF1' ( in float)
 0:68      Sequence
 0:68        move second child to first child ( temp float)
-0:68          'r046' ( temp float)
-0:68          radians ( temp float)
+0:68          'r045' ( temp float)
+0:68          pow ( temp float)
 0:68            'inF0' ( in float)
+0:68            'inF1' ( in float)
 0:69      Sequence
 0:69        move second child to first child ( temp float)
-0:69          'r047' ( temp float)
-0:69          divide ( temp float)
-0:69            Constant:
-0:69              1.000000
+0:69          'r046' ( temp float)
+0:69          radians ( temp float)
 0:69            'inF0' ( in float)
 0:70      Sequence
-0:70        move second child to first child ( temp uint)
-0:70          'r048' ( temp uint)
-0:70          Convert int to uint ( temp uint)
-0:70            bitFieldReverse ( temp int)
-0:70              Constant:
-0:70                2 (const int)
+0:70        move second child to first child ( temp float)
+0:70          'r047' ( temp float)
+0:70          divide ( temp float)
+0:70            Constant:
+0:70              1.000000
+0:70            'inF0' ( in float)
 0:71      Sequence
-0:71        move second child to first child ( temp float)
-0:71          'r049' ( temp float)
-0:71          roundEven ( temp float)
-0:71            'inF0' ( in float)
+0:71        move second child to first child ( temp uint)
+0:71          'r048' ( temp uint)
+0:71          Convert int to uint ( temp uint)
+0:71            bitFieldReverse ( temp int)
+0:71              Constant:
+0:71                2 (const int)
 0:72      Sequence
 0:72        move second child to first child ( temp float)
-0:72          'r050' ( temp float)
-0:72          inverse sqrt ( temp float)
+0:72          'r049' ( temp float)
+0:72          roundEven ( temp float)
 0:72            'inF0' ( in float)
 0:73      Sequence
 0:73        move second child to first child ( temp float)
-0:73          'r051' ( temp float)
-0:73          clamp ( temp float)
+0:73          'r050' ( temp float)
+0:73          inverse sqrt ( temp float)
 0:73            'inF0' ( in float)
-0:73            Constant:
-0:73              0.000000
-0:73            Constant:
-0:73              1.000000
 0:74      Sequence
 0:74        move second child to first child ( temp float)
-0:74          'r052' ( temp float)
-0:74          Sign ( temp float)
+0:74          'r051' ( temp float)
+0:74          clamp ( temp float)
 0:74            'inF0' ( in float)
+0:74            Constant:
+0:74              0.000000
+0:74            Constant:
+0:74              1.000000
 0:75      Sequence
 0:75        move second child to first child ( temp float)
-0:75          'r053' ( temp float)
-0:75          sine ( temp float)
+0:75          'r052' ( temp float)
+0:75          Sign ( temp float)
 0:75            'inF0' ( in float)
 0:76      Sequence
 0:76        move second child to first child ( temp float)
-0:76          'inF1' ( in float)
+0:76          'r053' ( temp float)
 0:76          sine ( temp float)
 0:76            'inF0' ( in float)
-0:76        move second child to first child ( temp float)
-0:76          'inF2' ( in float)
-0:76          cosine ( temp float)
-0:76            'inF0' ( in float)
 0:77      Sequence
 0:77        move second child to first child ( temp float)
-0:77          'r055' ( temp float)
-0:77          hyp. sine ( temp float)
+0:77          'inF1' ( in float)
+0:77          sine ( temp float)
+0:77            'inF0' ( in float)
+0:77        move second child to first child ( temp float)
+0:77          'inF2' ( in float)
+0:77          cosine ( temp float)
 0:77            'inF0' ( in float)
 0:78      Sequence
 0:78        move second child to first child ( temp float)
-0:78          'r056' ( temp float)
-0:78          smoothstep ( temp float)
+0:78          'r055' ( temp float)
+0:78          hyp. sine ( temp float)
 0:78            'inF0' ( in float)
-0:78            'inF1' ( in float)
-0:78            'inF2' ( in float)
 0:79      Sequence
 0:79        move second child to first child ( temp float)
-0:79          'r057' ( temp float)
-0:79          sqrt ( temp float)
+0:79          'r056' ( temp float)
+0:79          smoothstep ( temp float)
 0:79            'inF0' ( in float)
+0:79            'inF1' ( in float)
+0:79            'inF2' ( in float)
 0:80      Sequence
 0:80        move second child to first child ( temp float)
-0:80          'r058' ( temp float)
-0:80          step ( temp float)
+0:80          'r057' ( temp float)
+0:80          sqrt ( temp float)
 0:80            'inF0' ( in float)
-0:80            'inF1' ( in float)
 0:81      Sequence
 0:81        move second child to first child ( temp float)
-0:81          'r059' ( temp float)
-0:81          tangent ( temp float)
+0:81          'r058' ( temp float)
+0:81          step ( temp float)
 0:81            'inF0' ( in float)
+0:81            'inF1' ( in float)
 0:82      Sequence
 0:82        move second child to first child ( temp float)
-0:82          'r060' ( temp float)
-0:82          hyp. tangent ( temp float)
+0:82          'r059' ( temp float)
+0:82          tangent ( temp float)
 0:82            'inF0' ( in float)
-0:84      Sequence
-0:84        move second child to first child ( temp float)
-0:84          'r061' ( temp float)
-0:84          trunc ( temp float)
-0:84            'inF0' ( in float)
-0:86      Branch: Return with expression
-0:86        Constant:
-0:86          0.000000
-0:90  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
-0:90    Function Parameters: 
-0:90      'inF0' ( in 1-component vector of float)
-0:90      'inF1' ( in 1-component vector of float)
-0:90      'inF2' ( in 1-component vector of float)
+0:83      Sequence
+0:83        move second child to first child ( temp float)
+0:83          'r060' ( temp float)
+0:83          hyp. tangent ( temp float)
+0:83            'inF0' ( in float)
+0:85      Sequence
+0:85        move second child to first child ( temp float)
+0:85          'r061' ( temp float)
+0:85          trunc ( temp float)
+0:85            'inF0' ( in float)
+0:87      Branch: Return with expression
+0:87        Constant:
+0:87          0.000000
+0:91  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
+0:91    Function Parameters: 
+0:91      'inF0' ( in 1-component vector of float)
+0:91      'inF1' ( in 1-component vector of float)
+0:91      'inF2' ( in 1-component vector of float)
 0:?     Sequence
-0:92      Branch: Return with expression
-0:92        Constant:
-0:92          0.000000
-0:96  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
-0:96    Function Parameters: 
-0:96      'inF0' ( in 2-component vector of float)
-0:96      'inF1' ( in 2-component vector of float)
-0:96      'inF2' ( in 2-component vector of float)
-0:96      'inU0' ( in 2-component vector of uint)
-0:96      'inU1' ( in 2-component vector of uint)
+0:93      Branch: Return with expression
+0:93        Constant:
+0:93          0.000000
+0:97  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
+0:97    Function Parameters: 
+0:97      'inF0' ( in 2-component vector of float)
+0:97      'inF1' ( in 2-component vector of float)
+0:97      'inF2' ( in 2-component vector of float)
+0:97      'inU0' ( in 2-component vector of uint)
+0:97      'inU1' ( in 2-component vector of uint)
 0:?     Sequence
-0:99      Sequence
-0:99        move second child to first child ( temp bool)
-0:99          'r000' ( temp bool)
-0:99          all ( temp bool)
-0:99            Convert float to bool ( temp 2-component vector of bool)
-0:99              'inF0' ( in 2-component vector of float)
 0:100      Sequence
-0:100        move second child to first child ( temp 2-component vector of float)
-0:100          'r001' ( temp 2-component vector of float)
-0:100          Absolute value ( temp 2-component vector of float)
-0:100            'inF0' ( in 2-component vector of float)
+0:100        move second child to first child ( temp bool)
+0:100          'r000' ( temp bool)
+0:100          all ( temp bool)
+0:100            Convert float to bool ( temp 2-component vector of bool)
+0:100              'inF0' ( in 2-component vector of float)
 0:101      Sequence
 0:101        move second child to first child ( temp 2-component vector of float)
-0:101          'r002' ( temp 2-component vector of float)
-0:101          arc cosine ( temp 2-component vector of float)
+0:101          'r001' ( temp 2-component vector of float)
+0:101          Absolute value ( temp 2-component vector of float)
 0:101            'inF0' ( in 2-component vector of float)
 0:102      Sequence
-0:102        move second child to first child ( temp bool)
-0:102          'r003' ( temp bool)
-0:102          any ( temp bool)
-0:102            Convert float to bool ( temp 2-component vector of bool)
-0:102              'inF0' ( in 2-component vector of float)
+0:102        move second child to first child ( temp 2-component vector of float)
+0:102          'r002' ( temp 2-component vector of float)
+0:102          arc cosine ( temp 2-component vector of float)
+0:102            'inF0' ( in 2-component vector of float)
 0:103      Sequence
-0:103        move second child to first child ( temp 2-component vector of float)
-0:103          'r004' ( temp 2-component vector of float)
-0:103          arc sine ( temp 2-component vector of float)
-0:103            'inF0' ( in 2-component vector of float)
+0:103        move second child to first child ( temp bool)
+0:103          'r003' ( temp bool)
+0:103          any ( temp bool)
+0:103            Convert float to bool ( temp 2-component vector of bool)
+0:103              'inF0' ( in 2-component vector of float)
 0:104      Sequence
-0:104        move second child to first child ( temp 2-component vector of int)
-0:104          'r005' ( temp 2-component vector of int)
-0:104          floatBitsToInt ( temp 2-component vector of int)
+0:104        move second child to first child ( temp 2-component vector of float)
+0:104          'r004' ( temp 2-component vector of float)
+0:104          arc sine ( temp 2-component vector of float)
 0:104            'inF0' ( in 2-component vector of float)
 0:105      Sequence
-0:105        move second child to first child ( temp 2-component vector of uint)
-0:105          'r006' ( temp 2-component vector of uint)
-0:105          floatBitsToUint ( temp 2-component vector of uint)
+0:105        move second child to first child ( temp 2-component vector of int)
+0:105          'r005' ( temp 2-component vector of int)
+0:105          floatBitsToInt ( temp 2-component vector of int)
 0:105            'inF0' ( in 2-component vector of float)
 0:106      Sequence
-0:106        move second child to first child ( temp 2-component vector of float)
-0:106          'r007' ( temp 2-component vector of float)
-0:106          intBitsToFloat ( temp 2-component vector of float)
-0:106            'inU0' ( in 2-component vector of uint)
-0:108      Sequence
-0:108        move second child to first child ( temp 2-component vector of float)
-0:108          'r009' ( temp 2-component vector of float)
-0:108          arc tangent ( temp 2-component vector of float)
-0:108            'inF0' ( in 2-component vector of float)
+0:106        move second child to first child ( temp 2-component vector of uint)
+0:106          'r006' ( temp 2-component vector of uint)
+0:106          floatBitsToUint ( temp 2-component vector of uint)
+0:106            'inF0' ( in 2-component vector of float)
+0:107      Sequence
+0:107        move second child to first child ( temp 2-component vector of float)
+0:107          'r007' ( temp 2-component vector of float)
+0:107          intBitsToFloat ( temp 2-component vector of float)
+0:107            'inU0' ( in 2-component vector of uint)
 0:109      Sequence
 0:109        move second child to first child ( temp 2-component vector of float)
-0:109          'r010' ( temp 2-component vector of float)
+0:109          'r009' ( temp 2-component vector of float)
 0:109          arc tangent ( temp 2-component vector of float)
 0:109            'inF0' ( in 2-component vector of float)
-0:109            'inF1' ( in 2-component vector of float)
 0:110      Sequence
 0:110        move second child to first child ( temp 2-component vector of float)
-0:110          'r011' ( temp 2-component vector of float)
-0:110          Ceiling ( temp 2-component vector of float)
+0:110          'r010' ( temp 2-component vector of float)
+0:110          arc tangent ( temp 2-component vector of float)
 0:110            'inF0' ( in 2-component vector of float)
+0:110            'inF1' ( in 2-component vector of float)
 0:111      Sequence
 0:111        move second child to first child ( temp 2-component vector of float)
-0:111          'r012' ( temp 2-component vector of float)
-0:111          clamp ( temp 2-component vector of float)
+0:111          'r011' ( temp 2-component vector of float)
+0:111          Ceiling ( temp 2-component vector of float)
 0:111            'inF0' ( in 2-component vector of float)
-0:111            'inF1' ( in 2-component vector of float)
-0:111            'inF2' ( in 2-component vector of float)
-0:112      Test condition and select ( temp void)
-0:112        Condition
-0:112        any ( temp bool)
-0:112          Compare Less Than ( temp 2-component vector of bool)
+0:112      Sequence
+0:112        move second child to first child ( temp 2-component vector of float)
+0:112          'r012' ( temp 2-component vector of float)
+0:112          clamp ( temp 2-component vector of float)
 0:112            'inF0' ( in 2-component vector of float)
-0:112            Constant:
-0:112              0.000000
-0:112              0.000000
-0:112        true case
-0:112        Branch: Kill
+0:112            'inF1' ( in 2-component vector of float)
+0:112            'inF2' ( in 2-component vector of float)
 0:113      Test condition and select ( temp void)
 0:113        Condition
 0:113        any ( temp bool)
 0:113          Compare Less Than ( temp 2-component vector of bool)
-0:113            'inU0' ( in 2-component vector of uint)
+0:113            'inF0' ( in 2-component vector of float)
 0:113            Constant:
 0:113              0.000000
 0:113              0.000000
 0:113        true case
 0:113        Branch: Kill
-0:114      Sequence
-0:114        move second child to first child ( temp 2-component vector of float)
-0:114          'r013' ( temp 2-component vector of float)
-0:114          cosine ( temp 2-component vector of float)
-0:114            'inF0' ( in 2-component vector of float)
+0:114      Test condition and select ( temp void)
+0:114        Condition
+0:114        any ( temp bool)
+0:114          Compare Less Than ( temp 2-component vector of bool)
+0:114            'inU0' ( in 2-component vector of uint)
+0:114            Constant:
+0:114              0.000000
+0:114              0.000000
+0:114        true case
+0:114        Branch: Kill
 0:115      Sequence
 0:115        move second child to first child ( temp 2-component vector of float)
-0:115          'r015' ( temp 2-component vector of float)
-0:115          hyp. cosine ( temp 2-component vector of float)
+0:115          'r013' ( temp 2-component vector of float)
+0:115          cosine ( temp 2-component vector of float)
 0:115            'inF0' ( in 2-component vector of float)
 0:116      Sequence
-0:116        move second child to first child ( temp 2-component vector of int)
-0:116          'r016' ( temp 2-component vector of int)
+0:116        move second child to first child ( temp 2-component vector of float)
+0:116          'r015' ( temp 2-component vector of float)
+0:116          hyp. cosine ( temp 2-component vector of float)
+0:116            'inF0' ( in 2-component vector of float)
+0:117      Sequence
+0:117        move second child to first child ( temp 2-component vector of int)
+0:117          'r016' ( temp 2-component vector of int)
 0:?           bitCount ( temp 2-component vector of int)
 0:?             Constant:
 0:?               7 (const int)
 0:?               3 (const int)
-0:117      Sequence
-0:117        move second child to first child ( temp 2-component vector of float)
-0:117          'r017' ( temp 2-component vector of float)
-0:117          dPdx ( temp 2-component vector of float)
-0:117            'inF0' ( in 2-component vector of float)
 0:118      Sequence
 0:118        move second child to first child ( temp 2-component vector of float)
-0:118          'r018' ( temp 2-component vector of float)
-0:118          dPdxCoarse ( temp 2-component vector of float)
+0:118          'r017' ( temp 2-component vector of float)
+0:118          dPdx ( temp 2-component vector of float)
 0:118            'inF0' ( in 2-component vector of float)
 0:119      Sequence
 0:119        move second child to first child ( temp 2-component vector of float)
-0:119          'r019' ( temp 2-component vector of float)
-0:119          dPdxFine ( temp 2-component vector of float)
+0:119          'r018' ( temp 2-component vector of float)
+0:119          dPdxCoarse ( temp 2-component vector of float)
 0:119            'inF0' ( in 2-component vector of float)
 0:120      Sequence
 0:120        move second child to first child ( temp 2-component vector of float)
-0:120          'r020' ( temp 2-component vector of float)
-0:120          dPdy ( temp 2-component vector of float)
+0:120          'r019' ( temp 2-component vector of float)
+0:120          dPdxFine ( temp 2-component vector of float)
 0:120            'inF0' ( in 2-component vector of float)
 0:121      Sequence
 0:121        move second child to first child ( temp 2-component vector of float)
-0:121          'r021' ( temp 2-component vector of float)
-0:121          dPdyCoarse ( temp 2-component vector of float)
+0:121          'r020' ( temp 2-component vector of float)
+0:121          dPdy ( temp 2-component vector of float)
 0:121            'inF0' ( in 2-component vector of float)
 0:122      Sequence
 0:122        move second child to first child ( temp 2-component vector of float)
-0:122          'r022' ( temp 2-component vector of float)
-0:122          dPdyFine ( temp 2-component vector of float)
+0:122          'r021' ( temp 2-component vector of float)
+0:122          dPdyCoarse ( temp 2-component vector of float)
 0:122            'inF0' ( in 2-component vector of float)
 0:123      Sequence
 0:123        move second child to first child ( temp 2-component vector of float)
-0:123          'r023' ( temp 2-component vector of float)
-0:123          degrees ( temp 2-component vector of float)
+0:123          'r022' ( temp 2-component vector of float)
+0:123          dPdyFine ( temp 2-component vector of float)
 0:123            'inF0' ( in 2-component vector of float)
-0:127      Sequence
-0:127        move second child to first child ( temp float)
-0:127          'r026' ( temp float)
-0:127          distance ( temp float)
-0:127            'inF0' ( in 2-component vector of float)
-0:127            'inF1' ( in 2-component vector of float)
+0:124      Sequence
+0:124        move second child to first child ( temp 2-component vector of float)
+0:124          'r023' ( temp 2-component vector of float)
+0:124          degrees ( temp 2-component vector of float)
+0:124            'inF0' ( in 2-component vector of float)
 0:128      Sequence
 0:128        move second child to first child ( temp float)
-0:128          'r027' ( temp float)
-0:128          dot-product ( temp float)
+0:128          'r026' ( temp float)
+0:128          distance ( temp float)
 0:128            'inF0' ( in 2-component vector of float)
 0:128            'inF1' ( in 2-component vector of float)
-0:132      Sequence
-0:132        move second child to first child ( temp 2-component vector of float)
-0:132          'r028' ( temp 2-component vector of float)
-0:132          exp ( temp 2-component vector of float)
-0:132            'inF0' ( in 2-component vector of float)
+0:129      Sequence
+0:129        move second child to first child ( temp float)
+0:129          'r027' ( temp float)
+0:129          dot-product ( temp float)
+0:129            'inF0' ( in 2-component vector of float)
+0:129            'inF1' ( in 2-component vector of float)
 0:133      Sequence
 0:133        move second child to first child ( temp 2-component vector of float)
-0:133          'r029' ( temp 2-component vector of float)
-0:133          exp2 ( temp 2-component vector of float)
+0:133          'r028' ( temp 2-component vector of float)
+0:133          exp ( temp 2-component vector of float)
 0:133            'inF0' ( in 2-component vector of float)
 0:134      Sequence
 0:134        move second child to first child ( temp 2-component vector of float)
-0:134          'r030' ( temp 2-component vector of float)
-0:134          face-forward ( temp 2-component vector of float)
+0:134          'r029' ( temp 2-component vector of float)
+0:134          exp2 ( temp 2-component vector of float)
 0:134            'inF0' ( in 2-component vector of float)
-0:134            'inF1' ( in 2-component vector of float)
-0:134            'inF2' ( in 2-component vector of float)
 0:135      Sequence
-0:135        move second child to first child ( temp 2-component vector of uint)
-0:135          'r031' ( temp 2-component vector of uint)
+0:135        move second child to first child ( temp 2-component vector of float)
+0:135          'r030' ( temp 2-component vector of float)
+0:135          face-forward ( temp 2-component vector of float)
+0:135            'inF0' ( in 2-component vector of float)
+0:135            'inF1' ( in 2-component vector of float)
+0:135            'inF2' ( in 2-component vector of float)
+0:136      Sequence
+0:136        move second child to first child ( temp 2-component vector of uint)
+0:136          'r031' ( temp 2-component vector of uint)
 0:?           findMSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:136      Sequence
-0:136        move second child to first child ( temp 2-component vector of uint)
-0:136          'r032' ( temp 2-component vector of uint)
+0:137      Sequence
+0:137        move second child to first child ( temp 2-component vector of uint)
+0:137          'r032' ( temp 2-component vector of uint)
 0:?           findLSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:137      Sequence
-0:137        move second child to first child ( temp 2-component vector of float)
-0:137          'r033' ( temp 2-component vector of float)
-0:137          Floor ( temp 2-component vector of float)
-0:137            'inF0' ( in 2-component vector of float)
-0:139      Sequence
-0:139        move second child to first child ( temp 2-component vector of float)
-0:139          'r035' ( temp 2-component vector of float)
-0:139          mod ( temp 2-component vector of float)
-0:139            'inF0' ( in 2-component vector of float)
-0:139            'inF1' ( in 2-component vector of float)
+0:138      Sequence
+0:138        move second child to first child ( temp 2-component vector of float)
+0:138          'r033' ( temp 2-component vector of float)
+0:138          Floor ( temp 2-component vector of float)
+0:138            'inF0' ( in 2-component vector of float)
 0:140      Sequence
 0:140        move second child to first child ( temp 2-component vector of float)
-0:140          'r036' ( temp 2-component vector of float)
-0:140          Fraction ( temp 2-component vector of float)
+0:140          'r035' ( temp 2-component vector of float)
+0:140          mod ( temp 2-component vector of float)
 0:140            'inF0' ( in 2-component vector of float)
+0:140            'inF1' ( in 2-component vector of float)
 0:141      Sequence
 0:141        move second child to first child ( temp 2-component vector of float)
-0:141          'r038' ( temp 2-component vector of float)
-0:141          fwidth ( temp 2-component vector of float)
+0:141          'r036' ( temp 2-component vector of float)
+0:141          Fraction ( temp 2-component vector of float)
 0:141            'inF0' ( in 2-component vector of float)
 0:142      Sequence
-0:142        move second child to first child ( temp 2-component vector of bool)
-0:142          'r039' ( temp 2-component vector of bool)
-0:142          isinf ( temp 2-component vector of bool)
+0:142        move second child to first child ( temp 2-component vector of float)
+0:142          'r038' ( temp 2-component vector of float)
+0:142          fwidth ( temp 2-component vector of float)
 0:142            'inF0' ( in 2-component vector of float)
 0:143      Sequence
 0:143        move second child to first child ( temp 2-component vector of bool)
-0:143          'r040' ( temp 2-component vector of bool)
-0:143          isnan ( temp 2-component vector of bool)
+0:143          'r039' ( temp 2-component vector of bool)
+0:143          isinf ( temp 2-component vector of bool)
 0:143            'inF0' ( in 2-component vector of float)
 0:144      Sequence
-0:144        move second child to first child ( temp 2-component vector of float)
-0:144          'r041' ( temp 2-component vector of float)
-0:144          ldexp ( temp 2-component vector of float)
+0:144        move second child to first child ( temp 2-component vector of bool)
+0:144          'r040' ( temp 2-component vector of bool)
+0:144          isnan ( temp 2-component vector of bool)
 0:144            'inF0' ( in 2-component vector of float)
-0:144            'inF1' ( in 2-component vector of float)
 0:145      Sequence
 0:145        move second child to first child ( temp 2-component vector of float)
-0:145          'r039a' ( temp 2-component vector of float)
-0:145          mix ( temp 2-component vector of float)
+0:145          'r041' ( temp 2-component vector of float)
+0:145          ldexp ( temp 2-component vector of float)
 0:145            'inF0' ( in 2-component vector of float)
 0:145            'inF1' ( in 2-component vector of float)
-0:145            'inF2' ( in 2-component vector of float)
 0:146      Sequence
-0:146        move second child to first child ( temp float)
-0:146          'r042' ( temp float)
-0:146          length ( temp float)
+0:146        move second child to first child ( temp 2-component vector of float)
+0:146          'r039a' ( temp 2-component vector of float)
+0:146          mix ( temp 2-component vector of float)
 0:146            'inF0' ( in 2-component vector of float)
+0:146            'inF1' ( in 2-component vector of float)
+0:146            'inF2' ( in 2-component vector of float)
 0:147      Sequence
-0:147        move second child to first child ( temp 2-component vector of float)
-0:147          'r043' ( temp 2-component vector of float)
-0:147          log ( temp 2-component vector of float)
+0:147        move second child to first child ( temp float)
+0:147          'r042' ( temp float)
+0:147          length ( temp float)
 0:147            'inF0' ( in 2-component vector of float)
 0:148      Sequence
 0:148        move second child to first child ( temp 2-component vector of float)
-0:148          'r044' ( temp 2-component vector of float)
-0:148          vector-scale ( temp 2-component vector of float)
-0:148            log2 ( temp 2-component vector of float)
-0:148              'inF0' ( in 2-component vector of float)
-0:148            Constant:
-0:148              0.301030
+0:148          'r043' ( temp 2-component vector of float)
+0:148          log ( temp 2-component vector of float)
+0:148            'inF0' ( in 2-component vector of float)
 0:149      Sequence
 0:149        move second child to first child ( temp 2-component vector of float)
-0:149          'r045' ( temp 2-component vector of float)
-0:149          log2 ( temp 2-component vector of float)
-0:149            'inF0' ( in 2-component vector of float)
+0:149          'r044' ( temp 2-component vector of float)
+0:149          vector-scale ( temp 2-component vector of float)
+0:149            log2 ( temp 2-component vector of float)
+0:149              'inF0' ( in 2-component vector of float)
+0:149            Constant:
+0:149              0.301030
 0:150      Sequence
 0:150        move second child to first child ( temp 2-component vector of float)
-0:150          'r046' ( temp 2-component vector of float)
-0:150          max ( temp 2-component vector of float)
+0:150          'r045' ( temp 2-component vector of float)
+0:150          log2 ( temp 2-component vector of float)
 0:150            'inF0' ( in 2-component vector of float)
-0:150            'inF1' ( in 2-component vector of float)
 0:151      Sequence
 0:151        move second child to first child ( temp 2-component vector of float)
-0:151          'r047' ( temp 2-component vector of float)
-0:151          min ( temp 2-component vector of float)
+0:151          'r046' ( temp 2-component vector of float)
+0:151          max ( temp 2-component vector of float)
 0:151            'inF0' ( in 2-component vector of float)
 0:151            'inF1' ( in 2-component vector of float)
 0:152      Sequence
 0:152        move second child to first child ( temp 2-component vector of float)
-0:152          'r048' ( temp 2-component vector of float)
-0:152          normalize ( temp 2-component vector of float)
+0:152          'r047' ( temp 2-component vector of float)
+0:152          min ( temp 2-component vector of float)
 0:152            'inF0' ( in 2-component vector of float)
+0:152            'inF1' ( in 2-component vector of float)
 0:153      Sequence
 0:153        move second child to first child ( temp 2-component vector of float)
-0:153          'r049' ( temp 2-component vector of float)
-0:153          pow ( temp 2-component vector of float)
+0:153          'r048' ( temp 2-component vector of float)
+0:153          normalize ( temp 2-component vector of float)
 0:153            'inF0' ( in 2-component vector of float)
-0:153            'inF1' ( in 2-component vector of float)
 0:154      Sequence
 0:154        move second child to first child ( temp 2-component vector of float)
-0:154          'r050' ( temp 2-component vector of float)
-0:154          radians ( temp 2-component vector of float)
+0:154          'r049' ( temp 2-component vector of float)
+0:154          pow ( temp 2-component vector of float)
 0:154            'inF0' ( in 2-component vector of float)
+0:154            'inF1' ( in 2-component vector of float)
 0:155      Sequence
 0:155        move second child to first child ( temp 2-component vector of float)
-0:155          'r051' ( temp 2-component vector of float)
-0:155          divide ( temp 2-component vector of float)
-0:155            Constant:
-0:155              1.000000
+0:155          'r050' ( temp 2-component vector of float)
+0:155          radians ( temp 2-component vector of float)
 0:155            'inF0' ( in 2-component vector of float)
 0:156      Sequence
 0:156        move second child to first child ( temp 2-component vector of float)
-0:156          'r052' ( temp 2-component vector of float)
-0:156          reflect ( temp 2-component vector of float)
+0:156          'r051' ( temp 2-component vector of float)
+0:156          divide ( temp 2-component vector of float)
+0:156            Constant:
+0:156              1.000000
 0:156            'inF0' ( in 2-component vector of float)
-0:156            'inF1' ( in 2-component vector of float)
 0:157      Sequence
 0:157        move second child to first child ( temp 2-component vector of float)
-0:157          'r053' ( temp 2-component vector of float)
-0:157          refract ( temp 2-component vector of float)
+0:157          'r052' ( temp 2-component vector of float)
+0:157          reflect ( temp 2-component vector of float)
 0:157            'inF0' ( in 2-component vector of float)
 0:157            'inF1' ( in 2-component vector of float)
-0:157            Constant:
-0:157              2.000000
 0:158      Sequence
-0:158        move second child to first child ( temp 2-component vector of uint)
-0:158          'r054' ( temp 2-component vector of uint)
+0:158        move second child to first child ( temp 2-component vector of float)
+0:158          'r053' ( temp 2-component vector of float)
+0:158          refract ( temp 2-component vector of float)
+0:158            'inF0' ( in 2-component vector of float)
+0:158            'inF1' ( in 2-component vector of float)
+0:158            Constant:
+0:158              2.000000
+0:159      Sequence
+0:159        move second child to first child ( temp 2-component vector of uint)
+0:159          'r054' ( temp 2-component vector of uint)
 0:?           bitFieldReverse ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
-0:159      Sequence
-0:159        move second child to first child ( temp 2-component vector of float)
-0:159          'r055' ( temp 2-component vector of float)
-0:159          roundEven ( temp 2-component vector of float)
-0:159            'inF0' ( in 2-component vector of float)
 0:160      Sequence
 0:160        move second child to first child ( temp 2-component vector of float)
-0:160          'r056' ( temp 2-component vector of float)
-0:160          inverse sqrt ( temp 2-component vector of float)
+0:160          'r055' ( temp 2-component vector of float)
+0:160          roundEven ( temp 2-component vector of float)
 0:160            'inF0' ( in 2-component vector of float)
 0:161      Sequence
 0:161        move second child to first child ( temp 2-component vector of float)
-0:161          'r057' ( temp 2-component vector of float)
-0:161          clamp ( temp 2-component vector of float)
+0:161          'r056' ( temp 2-component vector of float)
+0:161          inverse sqrt ( temp 2-component vector of float)
 0:161            'inF0' ( in 2-component vector of float)
-0:161            Constant:
-0:161              0.000000
-0:161            Constant:
-0:161              1.000000
 0:162      Sequence
 0:162        move second child to first child ( temp 2-component vector of float)
-0:162          'r058' ( temp 2-component vector of float)
-0:162          Sign ( temp 2-component vector of float)
+0:162          'r057' ( temp 2-component vector of float)
+0:162          clamp ( temp 2-component vector of float)
 0:162            'inF0' ( in 2-component vector of float)
+0:162            Constant:
+0:162              0.000000
+0:162            Constant:
+0:162              1.000000
 0:163      Sequence
 0:163        move second child to first child ( temp 2-component vector of float)
-0:163          'r059' ( temp 2-component vector of float)
-0:163          sine ( temp 2-component vector of float)
+0:163          'r058' ( temp 2-component vector of float)
+0:163          Sign ( temp 2-component vector of float)
 0:163            'inF0' ( in 2-component vector of float)
 0:164      Sequence
 0:164        move second child to first child ( temp 2-component vector of float)
-0:164          'inF1' ( in 2-component vector of float)
+0:164          'r059' ( temp 2-component vector of float)
 0:164          sine ( temp 2-component vector of float)
 0:164            'inF0' ( in 2-component vector of float)
-0:164        move second child to first child ( temp 2-component vector of float)
-0:164          'inF2' ( in 2-component vector of float)
-0:164          cosine ( temp 2-component vector of float)
-0:164            'inF0' ( in 2-component vector of float)
 0:165      Sequence
 0:165        move second child to first child ( temp 2-component vector of float)
-0:165          'r060' ( temp 2-component vector of float)
-0:165          hyp. sine ( temp 2-component vector of float)
+0:165          'inF1' ( in 2-component vector of float)
+0:165          sine ( temp 2-component vector of float)
+0:165            'inF0' ( in 2-component vector of float)
+0:165        move second child to first child ( temp 2-component vector of float)
+0:165          'inF2' ( in 2-component vector of float)
+0:165          cosine ( temp 2-component vector of float)
 0:165            'inF0' ( in 2-component vector of float)
 0:166      Sequence
 0:166        move second child to first child ( temp 2-component vector of float)
-0:166          'r061' ( temp 2-component vector of float)
-0:166          smoothstep ( temp 2-component vector of float)
+0:166          'r060' ( temp 2-component vector of float)
+0:166          hyp. sine ( temp 2-component vector of float)
 0:166            'inF0' ( in 2-component vector of float)
-0:166            'inF1' ( in 2-component vector of float)
-0:166            'inF2' ( in 2-component vector of float)
 0:167      Sequence
 0:167        move second child to first child ( temp 2-component vector of float)
-0:167          'r062' ( temp 2-component vector of float)
-0:167          sqrt ( temp 2-component vector of float)
+0:167          'r061' ( temp 2-component vector of float)
+0:167          smoothstep ( temp 2-component vector of float)
 0:167            'inF0' ( in 2-component vector of float)
+0:167            'inF1' ( in 2-component vector of float)
+0:167            'inF2' ( in 2-component vector of float)
 0:168      Sequence
 0:168        move second child to first child ( temp 2-component vector of float)
-0:168          'r063' ( temp 2-component vector of float)
-0:168          step ( temp 2-component vector of float)
+0:168          'r062' ( temp 2-component vector of float)
+0:168          sqrt ( temp 2-component vector of float)
 0:168            'inF0' ( in 2-component vector of float)
-0:168            'inF1' ( in 2-component vector of float)
 0:169      Sequence
 0:169        move second child to first child ( temp 2-component vector of float)
-0:169          'r064' ( temp 2-component vector of float)
-0:169          tangent ( temp 2-component vector of float)
+0:169          'r063' ( temp 2-component vector of float)
+0:169          step ( temp 2-component vector of float)
 0:169            'inF0' ( in 2-component vector of float)
+0:169            'inF1' ( in 2-component vector of float)
 0:170      Sequence
 0:170        move second child to first child ( temp 2-component vector of float)
-0:170          'r065' ( temp 2-component vector of float)
-0:170          hyp. tangent ( temp 2-component vector of float)
+0:170          'r064' ( temp 2-component vector of float)
+0:170          tangent ( temp 2-component vector of float)
 0:170            'inF0' ( in 2-component vector of float)
-0:172      Sequence
-0:172        move second child to first child ( temp 2-component vector of float)
-0:172          'r066' ( temp 2-component vector of float)
-0:172          trunc ( temp 2-component vector of float)
-0:172            'inF0' ( in 2-component vector of float)
-0:175      Branch: Return with expression
+0:171      Sequence
+0:171        move second child to first child ( temp 2-component vector of float)
+0:171          'r065' ( temp 2-component vector of float)
+0:171          hyp. tangent ( temp 2-component vector of float)
+0:171            'inF0' ( in 2-component vector of float)
+0:173      Sequence
+0:173        move second child to first child ( temp 2-component vector of float)
+0:173          'r066' ( temp 2-component vector of float)
+0:173          trunc ( temp 2-component vector of float)
+0:173            'inF0' ( in 2-component vector of float)
+0:176      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:179  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
-0:179    Function Parameters: 
-0:179      'inF0' ( in 3-component vector of float)
-0:179      'inF1' ( in 3-component vector of float)
-0:179      'inF2' ( in 3-component vector of float)
-0:179      'inU0' ( in 3-component vector of uint)
-0:179      'inU1' ( in 3-component vector of uint)
+0:180  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
+0:180    Function Parameters: 
+0:180      'inF0' ( in 3-component vector of float)
+0:180      'inF1' ( in 3-component vector of float)
+0:180      'inF2' ( in 3-component vector of float)
+0:180      'inU0' ( in 3-component vector of uint)
+0:180      'inU1' ( in 3-component vector of uint)
 0:?     Sequence
-0:182      Sequence
-0:182        move second child to first child ( temp bool)
-0:182          'r000' ( temp bool)
-0:182          all ( temp bool)
-0:182            Convert float to bool ( temp 3-component vector of bool)
-0:182              'inF0' ( in 3-component vector of float)
 0:183      Sequence
-0:183        move second child to first child ( temp 3-component vector of float)
-0:183          'r001' ( temp 3-component vector of float)
-0:183          Absolute value ( temp 3-component vector of float)
-0:183            'inF0' ( in 3-component vector of float)
+0:183        move second child to first child ( temp bool)
+0:183          'r000' ( temp bool)
+0:183          all ( temp bool)
+0:183            Convert float to bool ( temp 3-component vector of bool)
+0:183              'inF0' ( in 3-component vector of float)
 0:184      Sequence
 0:184        move second child to first child ( temp 3-component vector of float)
-0:184          'r002' ( temp 3-component vector of float)
-0:184          arc cosine ( temp 3-component vector of float)
+0:184          'r001' ( temp 3-component vector of float)
+0:184          Absolute value ( temp 3-component vector of float)
 0:184            'inF0' ( in 3-component vector of float)
 0:185      Sequence
-0:185        move second child to first child ( temp bool)
-0:185          'r003' ( temp bool)
-0:185          any ( temp bool)
-0:185            Convert float to bool ( temp 3-component vector of bool)
-0:185              'inF0' ( in 3-component vector of float)
+0:185        move second child to first child ( temp 3-component vector of float)
+0:185          'r002' ( temp 3-component vector of float)
+0:185          arc cosine ( temp 3-component vector of float)
+0:185            'inF0' ( in 3-component vector of float)
 0:186      Sequence
-0:186        move second child to first child ( temp 3-component vector of float)
-0:186          'r004' ( temp 3-component vector of float)
-0:186          arc sine ( temp 3-component vector of float)
-0:186            'inF0' ( in 3-component vector of float)
+0:186        move second child to first child ( temp bool)
+0:186          'r003' ( temp bool)
+0:186          any ( temp bool)
+0:186            Convert float to bool ( temp 3-component vector of bool)
+0:186              'inF0' ( in 3-component vector of float)
 0:187      Sequence
-0:187        move second child to first child ( temp 3-component vector of int)
-0:187          'r005' ( temp 3-component vector of int)
-0:187          floatBitsToInt ( temp 3-component vector of int)
+0:187        move second child to first child ( temp 3-component vector of float)
+0:187          'r004' ( temp 3-component vector of float)
+0:187          arc sine ( temp 3-component vector of float)
 0:187            'inF0' ( in 3-component vector of float)
 0:188      Sequence
-0:188        move second child to first child ( temp 3-component vector of uint)
-0:188          'r006' ( temp 3-component vector of uint)
-0:188          floatBitsToUint ( temp 3-component vector of uint)
+0:188        move second child to first child ( temp 3-component vector of int)
+0:188          'r005' ( temp 3-component vector of int)
+0:188          floatBitsToInt ( temp 3-component vector of int)
 0:188            'inF0' ( in 3-component vector of float)
 0:189      Sequence
-0:189        move second child to first child ( temp 3-component vector of float)
-0:189          'r007' ( temp 3-component vector of float)
-0:189          intBitsToFloat ( temp 3-component vector of float)
-0:189            'inU0' ( in 3-component vector of uint)
-0:191      Sequence
-0:191        move second child to first child ( temp 3-component vector of float)
-0:191          'r009' ( temp 3-component vector of float)
-0:191          arc tangent ( temp 3-component vector of float)
-0:191            'inF0' ( in 3-component vector of float)
+0:189        move second child to first child ( temp 3-component vector of uint)
+0:189          'r006' ( temp 3-component vector of uint)
+0:189          floatBitsToUint ( temp 3-component vector of uint)
+0:189            'inF0' ( in 3-component vector of float)
+0:190      Sequence
+0:190        move second child to first child ( temp 3-component vector of float)
+0:190          'r007' ( temp 3-component vector of float)
+0:190          intBitsToFloat ( temp 3-component vector of float)
+0:190            'inU0' ( in 3-component vector of uint)
 0:192      Sequence
 0:192        move second child to first child ( temp 3-component vector of float)
-0:192          'r010' ( temp 3-component vector of float)
+0:192          'r009' ( temp 3-component vector of float)
 0:192          arc tangent ( temp 3-component vector of float)
 0:192            'inF0' ( in 3-component vector of float)
-0:192            'inF1' ( in 3-component vector of float)
 0:193      Sequence
 0:193        move second child to first child ( temp 3-component vector of float)
-0:193          'r011' ( temp 3-component vector of float)
-0:193          Ceiling ( temp 3-component vector of float)
+0:193          'r010' ( temp 3-component vector of float)
+0:193          arc tangent ( temp 3-component vector of float)
 0:193            'inF0' ( in 3-component vector of float)
+0:193            'inF1' ( in 3-component vector of float)
 0:194      Sequence
 0:194        move second child to first child ( temp 3-component vector of float)
-0:194          'r012' ( temp 3-component vector of float)
-0:194          clamp ( temp 3-component vector of float)
+0:194          'r011' ( temp 3-component vector of float)
+0:194          Ceiling ( temp 3-component vector of float)
 0:194            'inF0' ( in 3-component vector of float)
-0:194            'inF1' ( in 3-component vector of float)
-0:194            'inF2' ( in 3-component vector of float)
-0:195      Test condition and select ( temp void)
-0:195        Condition
-0:195        any ( temp bool)
-0:195          Compare Less Than ( temp 3-component vector of bool)
+0:195      Sequence
+0:195        move second child to first child ( temp 3-component vector of float)
+0:195          'r012' ( temp 3-component vector of float)
+0:195          clamp ( temp 3-component vector of float)
 0:195            'inF0' ( in 3-component vector of float)
-0:195            Constant:
-0:195              0.000000
-0:195              0.000000
-0:195              0.000000
-0:195        true case
-0:195        Branch: Kill
+0:195            'inF1' ( in 3-component vector of float)
+0:195            'inF2' ( in 3-component vector of float)
 0:196      Test condition and select ( temp void)
 0:196        Condition
 0:196        any ( temp bool)
 0:196          Compare Less Than ( temp 3-component vector of bool)
-0:196            'inU0' ( in 3-component vector of uint)
+0:196            'inF0' ( in 3-component vector of float)
 0:196            Constant:
 0:196              0.000000
 0:196              0.000000
 0:196              0.000000
 0:196        true case
 0:196        Branch: Kill
-0:197      Sequence
-0:197        move second child to first child ( temp 3-component vector of float)
-0:197          'r013' ( temp 3-component vector of float)
-0:197          cosine ( temp 3-component vector of float)
-0:197            'inF0' ( in 3-component vector of float)
+0:197      Test condition and select ( temp void)
+0:197        Condition
+0:197        any ( temp bool)
+0:197          Compare Less Than ( temp 3-component vector of bool)
+0:197            'inU0' ( in 3-component vector of uint)
+0:197            Constant:
+0:197              0.000000
+0:197              0.000000
+0:197              0.000000
+0:197        true case
+0:197        Branch: Kill
 0:198      Sequence
 0:198        move second child to first child ( temp 3-component vector of float)
-0:198          'r014' ( temp 3-component vector of float)
-0:198          hyp. cosine ( temp 3-component vector of float)
+0:198          'r013' ( temp 3-component vector of float)
+0:198          cosine ( temp 3-component vector of float)
 0:198            'inF0' ( in 3-component vector of float)
 0:199      Sequence
-0:199        move second child to first child ( temp 3-component vector of uint)
-0:199          'r015' ( temp 3-component vector of uint)
+0:199        move second child to first child ( temp 3-component vector of float)
+0:199          'r014' ( temp 3-component vector of float)
+0:199          hyp. cosine ( temp 3-component vector of float)
+0:199            'inF0' ( in 3-component vector of float)
+0:200      Sequence
+0:200        move second child to first child ( temp 3-component vector of uint)
+0:200          'r015' ( temp 3-component vector of uint)
 0:?           bitCount ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
-0:200      Sequence
-0:200        move second child to first child ( temp 3-component vector of float)
-0:200          'r016' ( temp 3-component vector of float)
-0:200          cross-product ( temp 3-component vector of float)
-0:200            'inF0' ( in 3-component vector of float)
-0:200            'inF1' ( in 3-component vector of float)
 0:201      Sequence
 0:201        move second child to first child ( temp 3-component vector of float)
-0:201          'r017' ( temp 3-component vector of float)
-0:201          dPdx ( temp 3-component vector of float)
+0:201          'r016' ( temp 3-component vector of float)
+0:201          cross-product ( temp 3-component vector of float)
 0:201            'inF0' ( in 3-component vector of float)
+0:201            'inF1' ( in 3-component vector of float)
 0:202      Sequence
 0:202        move second child to first child ( temp 3-component vector of float)
-0:202          'r018' ( temp 3-component vector of float)
-0:202          dPdxCoarse ( temp 3-component vector of float)
+0:202          'r017' ( temp 3-component vector of float)
+0:202          dPdx ( temp 3-component vector of float)
 0:202            'inF0' ( in 3-component vector of float)
 0:203      Sequence
 0:203        move second child to first child ( temp 3-component vector of float)
-0:203          'r019' ( temp 3-component vector of float)
-0:203          dPdxFine ( temp 3-component vector of float)
+0:203          'r018' ( temp 3-component vector of float)
+0:203          dPdxCoarse ( temp 3-component vector of float)
 0:203            'inF0' ( in 3-component vector of float)
 0:204      Sequence
 0:204        move second child to first child ( temp 3-component vector of float)
-0:204          'r020' ( temp 3-component vector of float)
-0:204          dPdy ( temp 3-component vector of float)
+0:204          'r019' ( temp 3-component vector of float)
+0:204          dPdxFine ( temp 3-component vector of float)
 0:204            'inF0' ( in 3-component vector of float)
 0:205      Sequence
 0:205        move second child to first child ( temp 3-component vector of float)
-0:205          'r021' ( temp 3-component vector of float)
-0:205          dPdyCoarse ( temp 3-component vector of float)
+0:205          'r020' ( temp 3-component vector of float)
+0:205          dPdy ( temp 3-component vector of float)
 0:205            'inF0' ( in 3-component vector of float)
 0:206      Sequence
 0:206        move second child to first child ( temp 3-component vector of float)
-0:206          'r022' ( temp 3-component vector of float)
-0:206          dPdyFine ( temp 3-component vector of float)
+0:206          'r021' ( temp 3-component vector of float)
+0:206          dPdyCoarse ( temp 3-component vector of float)
 0:206            'inF0' ( in 3-component vector of float)
 0:207      Sequence
 0:207        move second child to first child ( temp 3-component vector of float)
-0:207          'r023' ( temp 3-component vector of float)
-0:207          degrees ( temp 3-component vector of float)
+0:207          'r022' ( temp 3-component vector of float)
+0:207          dPdyFine ( temp 3-component vector of float)
 0:207            'inF0' ( in 3-component vector of float)
 0:208      Sequence
-0:208        move second child to first child ( temp float)
-0:208          'r024' ( temp float)
-0:208          distance ( temp float)
+0:208        move second child to first child ( temp 3-component vector of float)
+0:208          'r023' ( temp 3-component vector of float)
+0:208          degrees ( temp 3-component vector of float)
 0:208            'inF0' ( in 3-component vector of float)
-0:208            'inF1' ( in 3-component vector of float)
 0:209      Sequence
 0:209        move second child to first child ( temp float)
-0:209          'r025' ( temp float)
-0:209          dot-product ( temp float)
+0:209          'r024' ( temp float)
+0:209          distance ( temp float)
 0:209            'inF0' ( in 3-component vector of float)
 0:209            'inF1' ( in 3-component vector of float)
-0:213      Sequence
-0:213        move second child to first child ( temp 3-component vector of float)
-0:213          'r029' ( temp 3-component vector of float)
-0:213          exp ( temp 3-component vector of float)
-0:213            'inF0' ( in 3-component vector of float)
+0:210      Sequence
+0:210        move second child to first child ( temp float)
+0:210          'r025' ( temp float)
+0:210          dot-product ( temp float)
+0:210            'inF0' ( in 3-component vector of float)
+0:210            'inF1' ( in 3-component vector of float)
 0:214      Sequence
 0:214        move second child to first child ( temp 3-component vector of float)
-0:214          'r030' ( temp 3-component vector of float)
-0:214          exp2 ( temp 3-component vector of float)
+0:214          'r029' ( temp 3-component vector of float)
+0:214          exp ( temp 3-component vector of float)
 0:214            'inF0' ( in 3-component vector of float)
 0:215      Sequence
 0:215        move second child to first child ( temp 3-component vector of float)
-0:215          'r031' ( temp 3-component vector of float)
-0:215          face-forward ( temp 3-component vector of float)
+0:215          'r030' ( temp 3-component vector of float)
+0:215          exp2 ( temp 3-component vector of float)
 0:215            'inF0' ( in 3-component vector of float)
-0:215            'inF1' ( in 3-component vector of float)
-0:215            'inF2' ( in 3-component vector of float)
 0:216      Sequence
-0:216        move second child to first child ( temp 3-component vector of uint)
-0:216          'r032' ( temp 3-component vector of uint)
+0:216        move second child to first child ( temp 3-component vector of float)
+0:216          'r031' ( temp 3-component vector of float)
+0:216          face-forward ( temp 3-component vector of float)
+0:216            'inF0' ( in 3-component vector of float)
+0:216            'inF1' ( in 3-component vector of float)
+0:216            'inF2' ( in 3-component vector of float)
+0:217      Sequence
+0:217        move second child to first child ( temp 3-component vector of uint)
+0:217          'r032' ( temp 3-component vector of uint)
 0:?           findMSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:217      Sequence
-0:217        move second child to first child ( temp 3-component vector of uint)
-0:217          'r033' ( temp 3-component vector of uint)
+0:218      Sequence
+0:218        move second child to first child ( temp 3-component vector of uint)
+0:218          'r033' ( temp 3-component vector of uint)
 0:?           findLSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:218      Sequence
-0:218        move second child to first child ( temp 3-component vector of float)
-0:218          'r034' ( temp 3-component vector of float)
-0:218          Floor ( temp 3-component vector of float)
-0:218            'inF0' ( in 3-component vector of float)
-0:220      Sequence
-0:220        move second child to first child ( temp 3-component vector of float)
-0:220          'r036' ( temp 3-component vector of float)
-0:220          mod ( temp 3-component vector of float)
-0:220            'inF0' ( in 3-component vector of float)
-0:220            'inF1' ( in 3-component vector of float)
+0:219      Sequence
+0:219        move second child to first child ( temp 3-component vector of float)
+0:219          'r034' ( temp 3-component vector of float)
+0:219          Floor ( temp 3-component vector of float)
+0:219            'inF0' ( in 3-component vector of float)
 0:221      Sequence
 0:221        move second child to first child ( temp 3-component vector of float)
-0:221          'r037' ( temp 3-component vector of float)
-0:221          Fraction ( temp 3-component vector of float)
+0:221          'r036' ( temp 3-component vector of float)
+0:221          mod ( temp 3-component vector of float)
 0:221            'inF0' ( in 3-component vector of float)
+0:221            'inF1' ( in 3-component vector of float)
 0:222      Sequence
 0:222        move second child to first child ( temp 3-component vector of float)
-0:222          'r039' ( temp 3-component vector of float)
-0:222          fwidth ( temp 3-component vector of float)
+0:222          'r037' ( temp 3-component vector of float)
+0:222          Fraction ( temp 3-component vector of float)
 0:222            'inF0' ( in 3-component vector of float)
 0:223      Sequence
-0:223        move second child to first child ( temp 3-component vector of bool)
-0:223          'r040' ( temp 3-component vector of bool)
-0:223          isinf ( temp 3-component vector of bool)
+0:223        move second child to first child ( temp 3-component vector of float)
+0:223          'r039' ( temp 3-component vector of float)
+0:223          fwidth ( temp 3-component vector of float)
 0:223            'inF0' ( in 3-component vector of float)
 0:224      Sequence
 0:224        move second child to first child ( temp 3-component vector of bool)
-0:224          'r041' ( temp 3-component vector of bool)
-0:224          isnan ( temp 3-component vector of bool)
+0:224          'r040' ( temp 3-component vector of bool)
+0:224          isinf ( temp 3-component vector of bool)
 0:224            'inF0' ( in 3-component vector of float)
 0:225      Sequence
-0:225        move second child to first child ( temp 3-component vector of float)
-0:225          'r042' ( temp 3-component vector of float)
-0:225          ldexp ( temp 3-component vector of float)
+0:225        move second child to first child ( temp 3-component vector of bool)
+0:225          'r041' ( temp 3-component vector of bool)
+0:225          isnan ( temp 3-component vector of bool)
 0:225            'inF0' ( in 3-component vector of float)
-0:225            'inF1' ( in 3-component vector of float)
 0:226      Sequence
 0:226        move second child to first child ( temp 3-component vector of float)
-0:226          'r039a' ( temp 3-component vector of float)
-0:226          mix ( temp 3-component vector of float)
+0:226          'r042' ( temp 3-component vector of float)
+0:226          ldexp ( temp 3-component vector of float)
 0:226            'inF0' ( in 3-component vector of float)
 0:226            'inF1' ( in 3-component vector of float)
-0:226            'inF2' ( in 3-component vector of float)
 0:227      Sequence
 0:227        move second child to first child ( temp 3-component vector of float)
-0:227          'r039b' ( temp 3-component vector of float)
+0:227          'r039a' ( temp 3-component vector of float)
 0:227          mix ( temp 3-component vector of float)
 0:227            'inF0' ( in 3-component vector of float)
 0:227            'inF1' ( in 3-component vector of float)
-0:227            Constant:
-0:227              0.300000
+0:227            'inF2' ( in 3-component vector of float)
 0:228      Sequence
-0:228        move second child to first child ( temp float)
-0:228          'r043' ( temp float)
-0:228          length ( temp float)
+0:228        move second child to first child ( temp 3-component vector of float)
+0:228          'r039b' ( temp 3-component vector of float)
+0:228          mix ( temp 3-component vector of float)
 0:228            'inF0' ( in 3-component vector of float)
+0:228            'inF1' ( in 3-component vector of float)
+0:228            Constant:
+0:228              0.300000
 0:229      Sequence
-0:229        move second child to first child ( temp 3-component vector of float)
-0:229          'r044' ( temp 3-component vector of float)
-0:229          log ( temp 3-component vector of float)
+0:229        move second child to first child ( temp float)
+0:229          'r043' ( temp float)
+0:229          length ( temp float)
 0:229            'inF0' ( in 3-component vector of float)
 0:230      Sequence
 0:230        move second child to first child ( temp 3-component vector of float)
-0:230          'r045' ( temp 3-component vector of float)
-0:230          vector-scale ( temp 3-component vector of float)
-0:230            log2 ( temp 3-component vector of float)
-0:230              'inF0' ( in 3-component vector of float)
-0:230            Constant:
-0:230              0.301030
+0:230          'r044' ( temp 3-component vector of float)
+0:230          log ( temp 3-component vector of float)
+0:230            'inF0' ( in 3-component vector of float)
 0:231      Sequence
 0:231        move second child to first child ( temp 3-component vector of float)
-0:231          'r046' ( temp 3-component vector of float)
-0:231          log2 ( temp 3-component vector of float)
-0:231            'inF0' ( in 3-component vector of float)
+0:231          'r045' ( temp 3-component vector of float)
+0:231          vector-scale ( temp 3-component vector of float)
+0:231            log2 ( temp 3-component vector of float)
+0:231              'inF0' ( in 3-component vector of float)
+0:231            Constant:
+0:231              0.301030
 0:232      Sequence
 0:232        move second child to first child ( temp 3-component vector of float)
-0:232          'r047' ( temp 3-component vector of float)
-0:232          max ( temp 3-component vector of float)
+0:232          'r046' ( temp 3-component vector of float)
+0:232          log2 ( temp 3-component vector of float)
 0:232            'inF0' ( in 3-component vector of float)
-0:232            'inF1' ( in 3-component vector of float)
 0:233      Sequence
 0:233        move second child to first child ( temp 3-component vector of float)
-0:233          'r048' ( temp 3-component vector of float)
-0:233          min ( temp 3-component vector of float)
+0:233          'r047' ( temp 3-component vector of float)
+0:233          max ( temp 3-component vector of float)
 0:233            'inF0' ( in 3-component vector of float)
 0:233            'inF1' ( in 3-component vector of float)
 0:234      Sequence
 0:234        move second child to first child ( temp 3-component vector of float)
-0:234          'r049' ( temp 3-component vector of float)
-0:234          normalize ( temp 3-component vector of float)
+0:234          'r048' ( temp 3-component vector of float)
+0:234          min ( temp 3-component vector of float)
 0:234            'inF0' ( in 3-component vector of float)
+0:234            'inF1' ( in 3-component vector of float)
 0:235      Sequence
 0:235        move second child to first child ( temp 3-component vector of float)
-0:235          'r050' ( temp 3-component vector of float)
-0:235          pow ( temp 3-component vector of float)
+0:235          'r049' ( temp 3-component vector of float)
+0:235          normalize ( temp 3-component vector of float)
 0:235            'inF0' ( in 3-component vector of float)
-0:235            'inF1' ( in 3-component vector of float)
 0:236      Sequence
 0:236        move second child to first child ( temp 3-component vector of float)
-0:236          'r051' ( temp 3-component vector of float)
-0:236          radians ( temp 3-component vector of float)
+0:236          'r050' ( temp 3-component vector of float)
+0:236          pow ( temp 3-component vector of float)
 0:236            'inF0' ( in 3-component vector of float)
+0:236            'inF1' ( in 3-component vector of float)
 0:237      Sequence
 0:237        move second child to first child ( temp 3-component vector of float)
-0:237          'r052' ( temp 3-component vector of float)
-0:237          divide ( temp 3-component vector of float)
-0:237            Constant:
-0:237              1.000000
+0:237          'r051' ( temp 3-component vector of float)
+0:237          radians ( temp 3-component vector of float)
 0:237            'inF0' ( in 3-component vector of float)
 0:238      Sequence
 0:238        move second child to first child ( temp 3-component vector of float)
-0:238          'r053' ( temp 3-component vector of float)
-0:238          reflect ( temp 3-component vector of float)
+0:238          'r052' ( temp 3-component vector of float)
+0:238          divide ( temp 3-component vector of float)
+0:238            Constant:
+0:238              1.000000
 0:238            'inF0' ( in 3-component vector of float)
-0:238            'inF1' ( in 3-component vector of float)
 0:239      Sequence
 0:239        move second child to first child ( temp 3-component vector of float)
-0:239          'r054' ( temp 3-component vector of float)
-0:239          refract ( temp 3-component vector of float)
+0:239          'r053' ( temp 3-component vector of float)
+0:239          reflect ( temp 3-component vector of float)
 0:239            'inF0' ( in 3-component vector of float)
 0:239            'inF1' ( in 3-component vector of float)
-0:239            Constant:
-0:239              2.000000
 0:240      Sequence
-0:240        move second child to first child ( temp 3-component vector of uint)
-0:240          'r055' ( temp 3-component vector of uint)
+0:240        move second child to first child ( temp 3-component vector of float)
+0:240          'r054' ( temp 3-component vector of float)
+0:240          refract ( temp 3-component vector of float)
+0:240            'inF0' ( in 3-component vector of float)
+0:240            'inF1' ( in 3-component vector of float)
+0:240            Constant:
+0:240              2.000000
+0:241      Sequence
+0:241        move second child to first child ( temp 3-component vector of uint)
+0:241          'r055' ( temp 3-component vector of uint)
 0:?           bitFieldReverse ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
-0:241      Sequence
-0:241        move second child to first child ( temp 3-component vector of float)
-0:241          'r056' ( temp 3-component vector of float)
-0:241          roundEven ( temp 3-component vector of float)
-0:241            'inF0' ( in 3-component vector of float)
 0:242      Sequence
 0:242        move second child to first child ( temp 3-component vector of float)
-0:242          'r057' ( temp 3-component vector of float)
-0:242          inverse sqrt ( temp 3-component vector of float)
+0:242          'r056' ( temp 3-component vector of float)
+0:242          roundEven ( temp 3-component vector of float)
 0:242            'inF0' ( in 3-component vector of float)
 0:243      Sequence
 0:243        move second child to first child ( temp 3-component vector of float)
-0:243          'r058' ( temp 3-component vector of float)
-0:243          clamp ( temp 3-component vector of float)
+0:243          'r057' ( temp 3-component vector of float)
+0:243          inverse sqrt ( temp 3-component vector of float)
 0:243            'inF0' ( in 3-component vector of float)
-0:243            Constant:
-0:243              0.000000
-0:243            Constant:
-0:243              1.000000
 0:244      Sequence
 0:244        move second child to first child ( temp 3-component vector of float)
-0:244          'r059' ( temp 3-component vector of float)
-0:244          Sign ( temp 3-component vector of float)
+0:244          'r058' ( temp 3-component vector of float)
+0:244          clamp ( temp 3-component vector of float)
 0:244            'inF0' ( in 3-component vector of float)
+0:244            Constant:
+0:244              0.000000
+0:244            Constant:
+0:244              1.000000
 0:245      Sequence
 0:245        move second child to first child ( temp 3-component vector of float)
-0:245          'r060' ( temp 3-component vector of float)
-0:245          sine ( temp 3-component vector of float)
+0:245          'r059' ( temp 3-component vector of float)
+0:245          Sign ( temp 3-component vector of float)
 0:245            'inF0' ( in 3-component vector of float)
 0:246      Sequence
 0:246        move second child to first child ( temp 3-component vector of float)
-0:246          'inF1' ( in 3-component vector of float)
+0:246          'r060' ( temp 3-component vector of float)
 0:246          sine ( temp 3-component vector of float)
 0:246            'inF0' ( in 3-component vector of float)
-0:246        move second child to first child ( temp 3-component vector of float)
-0:246          'inF2' ( in 3-component vector of float)
-0:246          cosine ( temp 3-component vector of float)
-0:246            'inF0' ( in 3-component vector of float)
 0:247      Sequence
 0:247        move second child to first child ( temp 3-component vector of float)
-0:247          'r061' ( temp 3-component vector of float)
-0:247          hyp. sine ( temp 3-component vector of float)
+0:247          'inF1' ( in 3-component vector of float)
+0:247          sine ( temp 3-component vector of float)
+0:247            'inF0' ( in 3-component vector of float)
+0:247        move second child to first child ( temp 3-component vector of float)
+0:247          'inF2' ( in 3-component vector of float)
+0:247          cosine ( temp 3-component vector of float)
 0:247            'inF0' ( in 3-component vector of float)
 0:248      Sequence
 0:248        move second child to first child ( temp 3-component vector of float)
-0:248          'r062' ( temp 3-component vector of float)
-0:248          smoothstep ( temp 3-component vector of float)
+0:248          'r061' ( temp 3-component vector of float)
+0:248          hyp. sine ( temp 3-component vector of float)
 0:248            'inF0' ( in 3-component vector of float)
-0:248            'inF1' ( in 3-component vector of float)
-0:248            'inF2' ( in 3-component vector of float)
 0:249      Sequence
 0:249        move second child to first child ( temp 3-component vector of float)
-0:249          'r063' ( temp 3-component vector of float)
-0:249          sqrt ( temp 3-component vector of float)
+0:249          'r062' ( temp 3-component vector of float)
+0:249          smoothstep ( temp 3-component vector of float)
 0:249            'inF0' ( in 3-component vector of float)
+0:249            'inF1' ( in 3-component vector of float)
+0:249            'inF2' ( in 3-component vector of float)
 0:250      Sequence
 0:250        move second child to first child ( temp 3-component vector of float)
-0:250          'r064' ( temp 3-component vector of float)
-0:250          step ( temp 3-component vector of float)
+0:250          'r063' ( temp 3-component vector of float)
+0:250          sqrt ( temp 3-component vector of float)
 0:250            'inF0' ( in 3-component vector of float)
-0:250            'inF1' ( in 3-component vector of float)
 0:251      Sequence
 0:251        move second child to first child ( temp 3-component vector of float)
-0:251          'r065' ( temp 3-component vector of float)
-0:251          tangent ( temp 3-component vector of float)
+0:251          'r064' ( temp 3-component vector of float)
+0:251          step ( temp 3-component vector of float)
 0:251            'inF0' ( in 3-component vector of float)
+0:251            'inF1' ( in 3-component vector of float)
 0:252      Sequence
 0:252        move second child to first child ( temp 3-component vector of float)
-0:252          'r066' ( temp 3-component vector of float)
-0:252          hyp. tangent ( temp 3-component vector of float)
+0:252          'r065' ( temp 3-component vector of float)
+0:252          tangent ( temp 3-component vector of float)
 0:252            'inF0' ( in 3-component vector of float)
-0:254      Sequence
-0:254        move second child to first child ( temp 3-component vector of float)
-0:254          'r067' ( temp 3-component vector of float)
-0:254          trunc ( temp 3-component vector of float)
-0:254            'inF0' ( in 3-component vector of float)
-0:257      Branch: Return with expression
+0:253      Sequence
+0:253        move second child to first child ( temp 3-component vector of float)
+0:253          'r066' ( temp 3-component vector of float)
+0:253          hyp. tangent ( temp 3-component vector of float)
+0:253            'inF0' ( in 3-component vector of float)
+0:255      Sequence
+0:255        move second child to first child ( temp 3-component vector of float)
+0:255          'r067' ( temp 3-component vector of float)
+0:255          trunc ( temp 3-component vector of float)
+0:255            'inF0' ( in 3-component vector of float)
+0:258      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:261  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
-0:261    Function Parameters: 
-0:261      'inF0' ( in 4-component vector of float)
-0:261      'inF1' ( in 4-component vector of float)
-0:261      'inF2' ( in 4-component vector of float)
-0:261      'inU0' ( in 4-component vector of uint)
-0:261      'inU1' ( in 4-component vector of uint)
+0:262  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:262    Function Parameters: 
+0:262      'inF0' ( in 4-component vector of float)
+0:262      'inF1' ( in 4-component vector of float)
+0:262      'inF2' ( in 4-component vector of float)
+0:262      'inU0' ( in 4-component vector of uint)
+0:262      'inU1' ( in 4-component vector of uint)
 0:?     Sequence
-0:264      Sequence
-0:264        move second child to first child ( temp bool)
-0:264          'r000' ( temp bool)
-0:264          all ( temp bool)
-0:264            Convert float to bool ( temp 4-component vector of bool)
-0:264              'inF0' ( in 4-component vector of float)
 0:265      Sequence
-0:265        move second child to first child ( temp 4-component vector of float)
-0:265          'r001' ( temp 4-component vector of float)
-0:265          Absolute value ( temp 4-component vector of float)
-0:265            'inF0' ( in 4-component vector of float)
+0:265        move second child to first child ( temp bool)
+0:265          'r000' ( temp bool)
+0:265          all ( temp bool)
+0:265            Convert float to bool ( temp 4-component vector of bool)
+0:265              'inF0' ( in 4-component vector of float)
 0:266      Sequence
 0:266        move second child to first child ( temp 4-component vector of float)
-0:266          'r002' ( temp 4-component vector of float)
-0:266          arc cosine ( temp 4-component vector of float)
+0:266          'r001' ( temp 4-component vector of float)
+0:266          Absolute value ( temp 4-component vector of float)
 0:266            'inF0' ( in 4-component vector of float)
 0:267      Sequence
-0:267        move second child to first child ( temp bool)
-0:267          'r003' ( temp bool)
-0:267          any ( temp bool)
-0:267            Convert float to bool ( temp 4-component vector of bool)
-0:267              'inF0' ( in 4-component vector of float)
+0:267        move second child to first child ( temp 4-component vector of float)
+0:267          'r002' ( temp 4-component vector of float)
+0:267          arc cosine ( temp 4-component vector of float)
+0:267            'inF0' ( in 4-component vector of float)
 0:268      Sequence
-0:268        move second child to first child ( temp 4-component vector of float)
-0:268          'r004' ( temp 4-component vector of float)
-0:268          arc sine ( temp 4-component vector of float)
-0:268            'inF0' ( in 4-component vector of float)
+0:268        move second child to first child ( temp bool)
+0:268          'r003' ( temp bool)
+0:268          any ( temp bool)
+0:268            Convert float to bool ( temp 4-component vector of bool)
+0:268              'inF0' ( in 4-component vector of float)
 0:269      Sequence
-0:269        move second child to first child ( temp 4-component vector of int)
-0:269          'r005' ( temp 4-component vector of int)
-0:269          floatBitsToInt ( temp 4-component vector of int)
+0:269        move second child to first child ( temp 4-component vector of float)
+0:269          'r004' ( temp 4-component vector of float)
+0:269          arc sine ( temp 4-component vector of float)
 0:269            'inF0' ( in 4-component vector of float)
 0:270      Sequence
-0:270        move second child to first child ( temp 4-component vector of uint)
-0:270          'r006' ( temp 4-component vector of uint)
-0:270          floatBitsToUint ( temp 4-component vector of uint)
+0:270        move second child to first child ( temp 4-component vector of int)
+0:270          'r005' ( temp 4-component vector of int)
+0:270          floatBitsToInt ( temp 4-component vector of int)
 0:270            'inF0' ( in 4-component vector of float)
 0:271      Sequence
-0:271        move second child to first child ( temp 4-component vector of float)
-0:271          'r007' ( temp 4-component vector of float)
-0:271          intBitsToFloat ( temp 4-component vector of float)
-0:271            'inU0' ( in 4-component vector of uint)
-0:273      Sequence
-0:273        move second child to first child ( temp 4-component vector of float)
-0:273          'r009' ( temp 4-component vector of float)
-0:273          arc tangent ( temp 4-component vector of float)
-0:273            'inF0' ( in 4-component vector of float)
+0:271        move second child to first child ( temp 4-component vector of uint)
+0:271          'r006' ( temp 4-component vector of uint)
+0:271          floatBitsToUint ( temp 4-component vector of uint)
+0:271            'inF0' ( in 4-component vector of float)
+0:272      Sequence
+0:272        move second child to first child ( temp 4-component vector of float)
+0:272          'r007' ( temp 4-component vector of float)
+0:272          intBitsToFloat ( temp 4-component vector of float)
+0:272            'inU0' ( in 4-component vector of uint)
 0:274      Sequence
 0:274        move second child to first child ( temp 4-component vector of float)
-0:274          'r010' ( temp 4-component vector of float)
+0:274          'r009' ( temp 4-component vector of float)
 0:274          arc tangent ( temp 4-component vector of float)
 0:274            'inF0' ( in 4-component vector of float)
-0:274            'inF1' ( in 4-component vector of float)
 0:275      Sequence
 0:275        move second child to first child ( temp 4-component vector of float)
-0:275          'r011' ( temp 4-component vector of float)
-0:275          Ceiling ( temp 4-component vector of float)
+0:275          'r010' ( temp 4-component vector of float)
+0:275          arc tangent ( temp 4-component vector of float)
 0:275            'inF0' ( in 4-component vector of float)
+0:275            'inF1' ( in 4-component vector of float)
 0:276      Sequence
 0:276        move second child to first child ( temp 4-component vector of float)
-0:276          'r012' ( temp 4-component vector of float)
-0:276          clamp ( temp 4-component vector of float)
+0:276          'r011' ( temp 4-component vector of float)
+0:276          Ceiling ( temp 4-component vector of float)
 0:276            'inF0' ( in 4-component vector of float)
-0:276            'inF1' ( in 4-component vector of float)
-0:276            'inF2' ( in 4-component vector of float)
-0:277      Test condition and select ( temp void)
-0:277        Condition
-0:277        any ( temp bool)
-0:277          Compare Less Than ( temp 4-component vector of bool)
+0:277      Sequence
+0:277        move second child to first child ( temp 4-component vector of float)
+0:277          'r012' ( temp 4-component vector of float)
+0:277          clamp ( temp 4-component vector of float)
 0:277            'inF0' ( in 4-component vector of float)
-0:277            Constant:
-0:277              0.000000
-0:277              0.000000
-0:277              0.000000
-0:277              0.000000
-0:277        true case
-0:277        Branch: Kill
+0:277            'inF1' ( in 4-component vector of float)
+0:277            'inF2' ( in 4-component vector of float)
 0:278      Test condition and select ( temp void)
 0:278        Condition
 0:278        any ( temp bool)
 0:278          Compare Less Than ( temp 4-component vector of bool)
-0:278            'inU0' ( in 4-component vector of uint)
+0:278            'inF0' ( in 4-component vector of float)
 0:278            Constant:
 0:278              0.000000
 0:278              0.000000
@@ -1259,905 +1254,917 @@
 0:278              0.000000
 0:278        true case
 0:278        Branch: Kill
-0:279      Sequence
-0:279        move second child to first child ( temp 4-component vector of float)
-0:279          'r013' ( temp 4-component vector of float)
-0:279          cosine ( temp 4-component vector of float)
-0:279            'inF0' ( in 4-component vector of float)
+0:279      Test condition and select ( temp void)
+0:279        Condition
+0:279        any ( temp bool)
+0:279          Compare Less Than ( temp 4-component vector of bool)
+0:279            'inU0' ( in 4-component vector of uint)
+0:279            Constant:
+0:279              0.000000
+0:279              0.000000
+0:279              0.000000
+0:279              0.000000
+0:279        true case
+0:279        Branch: Kill
 0:280      Sequence
 0:280        move second child to first child ( temp 4-component vector of float)
-0:280          'r014' ( temp 4-component vector of float)
-0:280          hyp. cosine ( temp 4-component vector of float)
+0:280          'r013' ( temp 4-component vector of float)
+0:280          cosine ( temp 4-component vector of float)
 0:280            'inF0' ( in 4-component vector of float)
 0:281      Sequence
-0:281        move second child to first child ( temp 4-component vector of uint)
-0:281          'r015' ( temp 4-component vector of uint)
+0:281        move second child to first child ( temp 4-component vector of float)
+0:281          'r014' ( temp 4-component vector of float)
+0:281          hyp. cosine ( temp 4-component vector of float)
+0:281            'inF0' ( in 4-component vector of float)
+0:282      Sequence
+0:282        move second child to first child ( temp 4-component vector of uint)
+0:282          'r015' ( temp 4-component vector of uint)
 0:?           bitCount ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
 0:?               2 (const uint)
-0:282      Sequence
-0:282        move second child to first child ( temp 4-component vector of float)
-0:282          'r016' ( temp 4-component vector of float)
-0:282          dPdx ( temp 4-component vector of float)
-0:282            'inF0' ( in 4-component vector of float)
 0:283      Sequence
 0:283        move second child to first child ( temp 4-component vector of float)
-0:283          'r017' ( temp 4-component vector of float)
-0:283          dPdxCoarse ( temp 4-component vector of float)
+0:283          'r016' ( temp 4-component vector of float)
+0:283          dPdx ( temp 4-component vector of float)
 0:283            'inF0' ( in 4-component vector of float)
 0:284      Sequence
 0:284        move second child to first child ( temp 4-component vector of float)
-0:284          'r018' ( temp 4-component vector of float)
-0:284          dPdxFine ( temp 4-component vector of float)
+0:284          'r017' ( temp 4-component vector of float)
+0:284          dPdxCoarse ( temp 4-component vector of float)
 0:284            'inF0' ( in 4-component vector of float)
 0:285      Sequence
 0:285        move second child to first child ( temp 4-component vector of float)
-0:285          'r019' ( temp 4-component vector of float)
-0:285          dPdy ( temp 4-component vector of float)
+0:285          'r018' ( temp 4-component vector of float)
+0:285          dPdxFine ( temp 4-component vector of float)
 0:285            'inF0' ( in 4-component vector of float)
 0:286      Sequence
 0:286        move second child to first child ( temp 4-component vector of float)
-0:286          'r020' ( temp 4-component vector of float)
-0:286          dPdyCoarse ( temp 4-component vector of float)
+0:286          'r019' ( temp 4-component vector of float)
+0:286          dPdy ( temp 4-component vector of float)
 0:286            'inF0' ( in 4-component vector of float)
 0:287      Sequence
 0:287        move second child to first child ( temp 4-component vector of float)
-0:287          'r021' ( temp 4-component vector of float)
-0:287          dPdyFine ( temp 4-component vector of float)
+0:287          'r020' ( temp 4-component vector of float)
+0:287          dPdyCoarse ( temp 4-component vector of float)
 0:287            'inF0' ( in 4-component vector of float)
 0:288      Sequence
 0:288        move second child to first child ( temp 4-component vector of float)
-0:288          'r022' ( temp 4-component vector of float)
-0:288          degrees ( temp 4-component vector of float)
+0:288          'r021' ( temp 4-component vector of float)
+0:288          dPdyFine ( temp 4-component vector of float)
 0:288            'inF0' ( in 4-component vector of float)
 0:289      Sequence
-0:289        move second child to first child ( temp float)
-0:289          'r023' ( temp float)
-0:289          distance ( temp float)
+0:289        move second child to first child ( temp 4-component vector of float)
+0:289          'r022' ( temp 4-component vector of float)
+0:289          degrees ( temp 4-component vector of float)
 0:289            'inF0' ( in 4-component vector of float)
-0:289            'inF1' ( in 4-component vector of float)
 0:290      Sequence
 0:290        move second child to first child ( temp float)
-0:290          'r024' ( temp float)
-0:290          dot-product ( temp float)
+0:290          'r023' ( temp float)
+0:290          distance ( temp float)
 0:290            'inF0' ( in 4-component vector of float)
 0:290            'inF1' ( in 4-component vector of float)
 0:291      Sequence
-0:291        move second child to first child ( temp 4-component vector of float)
-0:291          'r025' ( temp 4-component vector of float)
-0:291          Construct vec4 ( temp 4-component vector of float)
-0:291            Constant:
-0:291              1.000000
-0:291            component-wise multiply ( temp float)
-0:291              direct index ( temp float)
-0:291                'inF0' ( in 4-component vector of float)
-0:291                Constant:
-0:291                  1 (const int)
-0:291              direct index ( temp float)
-0:291                'inF1' ( in 4-component vector of float)
-0:291                Constant:
-0:291                  1 (const int)
-0:291            direct index ( temp float)
-0:291              'inF0' ( in 4-component vector of float)
-0:291              Constant:
-0:291                2 (const int)
-0:291            direct index ( temp float)
-0:291              'inF1' ( in 4-component vector of float)
-0:291              Constant:
-0:291                3 (const int)
-0:295      Sequence
-0:295        move second child to first child ( temp 4-component vector of float)
-0:295          'r029' ( temp 4-component vector of float)
-0:295          exp ( temp 4-component vector of float)
-0:295            'inF0' ( in 4-component vector of float)
+0:291        move second child to first child ( temp float)
+0:291          'r024' ( temp float)
+0:291          dot-product ( temp float)
+0:291            'inF0' ( in 4-component vector of float)
+0:291            'inF1' ( in 4-component vector of float)
+0:292      Sequence
+0:292        move second child to first child ( temp 4-component vector of float)
+0:292          'r025' ( temp 4-component vector of float)
+0:292          Construct vec4 ( temp 4-component vector of float)
+0:292            Constant:
+0:292              1.000000
+0:292            component-wise multiply ( temp float)
+0:292              direct index ( temp float)
+0:292                'inF0' ( in 4-component vector of float)
+0:292                Constant:
+0:292                  1 (const int)
+0:292              direct index ( temp float)
+0:292                'inF1' ( in 4-component vector of float)
+0:292                Constant:
+0:292                  1 (const int)
+0:292            direct index ( temp float)
+0:292              'inF0' ( in 4-component vector of float)
+0:292              Constant:
+0:292                2 (const int)
+0:292            direct index ( temp float)
+0:292              'inF1' ( in 4-component vector of float)
+0:292              Constant:
+0:292                3 (const int)
 0:296      Sequence
 0:296        move second child to first child ( temp 4-component vector of float)
-0:296          'r030' ( temp 4-component vector of float)
-0:296          exp2 ( temp 4-component vector of float)
+0:296          'r029' ( temp 4-component vector of float)
+0:296          exp ( temp 4-component vector of float)
 0:296            'inF0' ( in 4-component vector of float)
 0:297      Sequence
 0:297        move second child to first child ( temp 4-component vector of float)
-0:297          'r031' ( temp 4-component vector of float)
-0:297          face-forward ( temp 4-component vector of float)
+0:297          'r030' ( temp 4-component vector of float)
+0:297          exp2 ( temp 4-component vector of float)
 0:297            'inF0' ( in 4-component vector of float)
-0:297            'inF1' ( in 4-component vector of float)
-0:297            'inF2' ( in 4-component vector of float)
 0:298      Sequence
-0:298        move second child to first child ( temp 4-component vector of uint)
-0:298          'r032' ( temp 4-component vector of uint)
+0:298        move second child to first child ( temp 4-component vector of float)
+0:298          'r031' ( temp 4-component vector of float)
+0:298          face-forward ( temp 4-component vector of float)
+0:298            'inF0' ( in 4-component vector of float)
+0:298            'inF1' ( in 4-component vector of float)
+0:298            'inF2' ( in 4-component vector of float)
+0:299      Sequence
+0:299        move second child to first child ( temp 4-component vector of uint)
+0:299          'r032' ( temp 4-component vector of uint)
 0:?           findMSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:299      Sequence
-0:299        move second child to first child ( temp 4-component vector of uint)
-0:299          'r033' ( temp 4-component vector of uint)
+0:300      Sequence
+0:300        move second child to first child ( temp 4-component vector of uint)
+0:300          'r033' ( temp 4-component vector of uint)
 0:?           findLSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:300      Sequence
-0:300        move second child to first child ( temp 4-component vector of float)
-0:300          'r034' ( temp 4-component vector of float)
-0:300          Floor ( temp 4-component vector of float)
-0:300            'inF0' ( in 4-component vector of float)
-0:302      Sequence
-0:302        move second child to first child ( temp 4-component vector of float)
-0:302          'r036' ( temp 4-component vector of float)
-0:302          mod ( temp 4-component vector of float)
-0:302            'inF0' ( in 4-component vector of float)
-0:302            'inF1' ( in 4-component vector of float)
+0:301      Sequence
+0:301        move second child to first child ( temp 4-component vector of float)
+0:301          'r034' ( temp 4-component vector of float)
+0:301          Floor ( temp 4-component vector of float)
+0:301            'inF0' ( in 4-component vector of float)
 0:303      Sequence
 0:303        move second child to first child ( temp 4-component vector of float)
-0:303          'r037' ( temp 4-component vector of float)
-0:303          Fraction ( temp 4-component vector of float)
+0:303          'r036' ( temp 4-component vector of float)
+0:303          mod ( temp 4-component vector of float)
 0:303            'inF0' ( in 4-component vector of float)
+0:303            'inF1' ( in 4-component vector of float)
 0:304      Sequence
 0:304        move second child to first child ( temp 4-component vector of float)
-0:304          'r039' ( temp 4-component vector of float)
-0:304          fwidth ( temp 4-component vector of float)
+0:304          'r037' ( temp 4-component vector of float)
+0:304          Fraction ( temp 4-component vector of float)
 0:304            'inF0' ( in 4-component vector of float)
 0:305      Sequence
-0:305        move second child to first child ( temp 4-component vector of bool)
-0:305          'r040' ( temp 4-component vector of bool)
-0:305          isinf ( temp 4-component vector of bool)
+0:305        move second child to first child ( temp 4-component vector of float)
+0:305          'r039' ( temp 4-component vector of float)
+0:305          fwidth ( temp 4-component vector of float)
 0:305            'inF0' ( in 4-component vector of float)
 0:306      Sequence
 0:306        move second child to first child ( temp 4-component vector of bool)
-0:306          'r041' ( temp 4-component vector of bool)
-0:306          isnan ( temp 4-component vector of bool)
+0:306          'r040' ( temp 4-component vector of bool)
+0:306          isinf ( temp 4-component vector of bool)
 0:306            'inF0' ( in 4-component vector of float)
 0:307      Sequence
-0:307        move second child to first child ( temp 4-component vector of float)
-0:307          'r042' ( temp 4-component vector of float)
-0:307          ldexp ( temp 4-component vector of float)
+0:307        move second child to first child ( temp 4-component vector of bool)
+0:307          'r041' ( temp 4-component vector of bool)
+0:307          isnan ( temp 4-component vector of bool)
 0:307            'inF0' ( in 4-component vector of float)
-0:307            'inF1' ( in 4-component vector of float)
 0:308      Sequence
 0:308        move second child to first child ( temp 4-component vector of float)
-0:308          'r039a' ( temp 4-component vector of float)
-0:308          mix ( temp 4-component vector of float)
+0:308          'r042' ( temp 4-component vector of float)
+0:308          ldexp ( temp 4-component vector of float)
 0:308            'inF0' ( in 4-component vector of float)
 0:308            'inF1' ( in 4-component vector of float)
-0:308            'inF2' ( in 4-component vector of float)
 0:309      Sequence
-0:309        move second child to first child ( temp float)
-0:309          'r043' ( temp float)
-0:309          length ( temp float)
+0:309        move second child to first child ( temp 4-component vector of float)
+0:309          'r039a' ( temp 4-component vector of float)
+0:309          mix ( temp 4-component vector of float)
 0:309            'inF0' ( in 4-component vector of float)
+0:309            'inF1' ( in 4-component vector of float)
+0:309            'inF2' ( in 4-component vector of float)
 0:310      Sequence
-0:310        move second child to first child ( temp 4-component vector of float)
-0:310          'r044' ( temp 4-component vector of float)
-0:310          log ( temp 4-component vector of float)
+0:310        move second child to first child ( temp float)
+0:310          'r043' ( temp float)
+0:310          length ( temp float)
 0:310            'inF0' ( in 4-component vector of float)
 0:311      Sequence
 0:311        move second child to first child ( temp 4-component vector of float)
-0:311          'r045' ( temp 4-component vector of float)
-0:311          vector-scale ( temp 4-component vector of float)
-0:311            log2 ( temp 4-component vector of float)
-0:311              'inF0' ( in 4-component vector of float)
-0:311            Constant:
-0:311              0.301030
+0:311          'r044' ( temp 4-component vector of float)
+0:311          log ( temp 4-component vector of float)
+0:311            'inF0' ( in 4-component vector of float)
 0:312      Sequence
 0:312        move second child to first child ( temp 4-component vector of float)
-0:312          'r046' ( temp 4-component vector of float)
-0:312          log2 ( temp 4-component vector of float)
-0:312            'inF0' ( in 4-component vector of float)
+0:312          'r045' ( temp 4-component vector of float)
+0:312          vector-scale ( temp 4-component vector of float)
+0:312            log2 ( temp 4-component vector of float)
+0:312              'inF0' ( in 4-component vector of float)
+0:312            Constant:
+0:312              0.301030
 0:313      Sequence
 0:313        move second child to first child ( temp 4-component vector of float)
-0:313          'r047' ( temp 4-component vector of float)
-0:313          max ( temp 4-component vector of float)
+0:313          'r046' ( temp 4-component vector of float)
+0:313          log2 ( temp 4-component vector of float)
 0:313            'inF0' ( in 4-component vector of float)
-0:313            'inF1' ( in 4-component vector of float)
 0:314      Sequence
 0:314        move second child to first child ( temp 4-component vector of float)
-0:314          'r048' ( temp 4-component vector of float)
-0:314          min ( temp 4-component vector of float)
+0:314          'r047' ( temp 4-component vector of float)
+0:314          max ( temp 4-component vector of float)
 0:314            'inF0' ( in 4-component vector of float)
 0:314            'inF1' ( in 4-component vector of float)
 0:315      Sequence
 0:315        move second child to first child ( temp 4-component vector of float)
-0:315          'r049' ( temp 4-component vector of float)
-0:315          normalize ( temp 4-component vector of float)
+0:315          'r048' ( temp 4-component vector of float)
+0:315          min ( temp 4-component vector of float)
 0:315            'inF0' ( in 4-component vector of float)
+0:315            'inF1' ( in 4-component vector of float)
 0:316      Sequence
 0:316        move second child to first child ( temp 4-component vector of float)
-0:316          'r050' ( temp 4-component vector of float)
-0:316          pow ( temp 4-component vector of float)
+0:316          'r049' ( temp 4-component vector of float)
+0:316          normalize ( temp 4-component vector of float)
 0:316            'inF0' ( in 4-component vector of float)
-0:316            'inF1' ( in 4-component vector of float)
 0:317      Sequence
 0:317        move second child to first child ( temp 4-component vector of float)
-0:317          'r051' ( temp 4-component vector of float)
-0:317          radians ( temp 4-component vector of float)
+0:317          'r050' ( temp 4-component vector of float)
+0:317          pow ( temp 4-component vector of float)
 0:317            'inF0' ( in 4-component vector of float)
+0:317            'inF1' ( in 4-component vector of float)
 0:318      Sequence
 0:318        move second child to first child ( temp 4-component vector of float)
-0:318          'r052' ( temp 4-component vector of float)
-0:318          divide ( temp 4-component vector of float)
-0:318            Constant:
-0:318              1.000000
+0:318          'r051' ( temp 4-component vector of float)
+0:318          radians ( temp 4-component vector of float)
 0:318            'inF0' ( in 4-component vector of float)
 0:319      Sequence
 0:319        move second child to first child ( temp 4-component vector of float)
-0:319          'r053' ( temp 4-component vector of float)
-0:319          reflect ( temp 4-component vector of float)
+0:319          'r052' ( temp 4-component vector of float)
+0:319          divide ( temp 4-component vector of float)
+0:319            Constant:
+0:319              1.000000
 0:319            'inF0' ( in 4-component vector of float)
-0:319            'inF1' ( in 4-component vector of float)
 0:320      Sequence
 0:320        move second child to first child ( temp 4-component vector of float)
-0:320          'r054' ( temp 4-component vector of float)
-0:320          refract ( temp 4-component vector of float)
+0:320          'r053' ( temp 4-component vector of float)
+0:320          reflect ( temp 4-component vector of float)
 0:320            'inF0' ( in 4-component vector of float)
 0:320            'inF1' ( in 4-component vector of float)
-0:320            Constant:
-0:320              2.000000
 0:321      Sequence
-0:321        move second child to first child ( temp 4-component vector of uint)
-0:321          'r055' ( temp 4-component vector of uint)
+0:321        move second child to first child ( temp 4-component vector of float)
+0:321          'r054' ( temp 4-component vector of float)
+0:321          refract ( temp 4-component vector of float)
+0:321            'inF0' ( in 4-component vector of float)
+0:321            'inF1' ( in 4-component vector of float)
+0:321            Constant:
+0:321              2.000000
+0:322      Sequence
+0:322        move second child to first child ( temp 4-component vector of uint)
+0:322          'r055' ( temp 4-component vector of uint)
 0:?           bitFieldReverse ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:322      Sequence
-0:322        move second child to first child ( temp 4-component vector of float)
-0:322          'r056' ( temp 4-component vector of float)
-0:322          roundEven ( temp 4-component vector of float)
-0:322            'inF0' ( in 4-component vector of float)
 0:323      Sequence
 0:323        move second child to first child ( temp 4-component vector of float)
-0:323          'r057' ( temp 4-component vector of float)
-0:323          inverse sqrt ( temp 4-component vector of float)
+0:323          'r056' ( temp 4-component vector of float)
+0:323          roundEven ( temp 4-component vector of float)
 0:323            'inF0' ( in 4-component vector of float)
 0:324      Sequence
 0:324        move second child to first child ( temp 4-component vector of float)
-0:324          'r058' ( temp 4-component vector of float)
-0:324          clamp ( temp 4-component vector of float)
+0:324          'r057' ( temp 4-component vector of float)
+0:324          inverse sqrt ( temp 4-component vector of float)
 0:324            'inF0' ( in 4-component vector of float)
-0:324            Constant:
-0:324              0.000000
-0:324            Constant:
-0:324              1.000000
 0:325      Sequence
 0:325        move second child to first child ( temp 4-component vector of float)
-0:325          'r059' ( temp 4-component vector of float)
-0:325          Sign ( temp 4-component vector of float)
+0:325          'r058' ( temp 4-component vector of float)
+0:325          clamp ( temp 4-component vector of float)
 0:325            'inF0' ( in 4-component vector of float)
+0:325            Constant:
+0:325              0.000000
+0:325            Constant:
+0:325              1.000000
 0:326      Sequence
 0:326        move second child to first child ( temp 4-component vector of float)
-0:326          'r060' ( temp 4-component vector of float)
-0:326          sine ( temp 4-component vector of float)
+0:326          'r059' ( temp 4-component vector of float)
+0:326          Sign ( temp 4-component vector of float)
 0:326            'inF0' ( in 4-component vector of float)
 0:327      Sequence
 0:327        move second child to first child ( temp 4-component vector of float)
-0:327          'inF1' ( in 4-component vector of float)
+0:327          'r060' ( temp 4-component vector of float)
 0:327          sine ( temp 4-component vector of float)
 0:327            'inF0' ( in 4-component vector of float)
-0:327        move second child to first child ( temp 4-component vector of float)
-0:327          'inF2' ( in 4-component vector of float)
-0:327          cosine ( temp 4-component vector of float)
-0:327            'inF0' ( in 4-component vector of float)
 0:328      Sequence
 0:328        move second child to first child ( temp 4-component vector of float)
-0:328          'r061' ( temp 4-component vector of float)
-0:328          hyp. sine ( temp 4-component vector of float)
+0:328          'inF1' ( in 4-component vector of float)
+0:328          sine ( temp 4-component vector of float)
+0:328            'inF0' ( in 4-component vector of float)
+0:328        move second child to first child ( temp 4-component vector of float)
+0:328          'inF2' ( in 4-component vector of float)
+0:328          cosine ( temp 4-component vector of float)
 0:328            'inF0' ( in 4-component vector of float)
 0:329      Sequence
 0:329        move second child to first child ( temp 4-component vector of float)
-0:329          'r062' ( temp 4-component vector of float)
-0:329          smoothstep ( temp 4-component vector of float)
+0:329          'r061' ( temp 4-component vector of float)
+0:329          hyp. sine ( temp 4-component vector of float)
 0:329            'inF0' ( in 4-component vector of float)
-0:329            'inF1' ( in 4-component vector of float)
-0:329            'inF2' ( in 4-component vector of float)
 0:330      Sequence
 0:330        move second child to first child ( temp 4-component vector of float)
-0:330          'r063' ( temp 4-component vector of float)
-0:330          sqrt ( temp 4-component vector of float)
+0:330          'r062' ( temp 4-component vector of float)
+0:330          smoothstep ( temp 4-component vector of float)
 0:330            'inF0' ( in 4-component vector of float)
+0:330            'inF1' ( in 4-component vector of float)
+0:330            'inF2' ( in 4-component vector of float)
 0:331      Sequence
 0:331        move second child to first child ( temp 4-component vector of float)
-0:331          'r064' ( temp 4-component vector of float)
-0:331          step ( temp 4-component vector of float)
+0:331          'r063' ( temp 4-component vector of float)
+0:331          sqrt ( temp 4-component vector of float)
 0:331            'inF0' ( in 4-component vector of float)
-0:331            'inF1' ( in 4-component vector of float)
 0:332      Sequence
 0:332        move second child to first child ( temp 4-component vector of float)
-0:332          'r065' ( temp 4-component vector of float)
-0:332          tangent ( temp 4-component vector of float)
+0:332          'r064' ( temp 4-component vector of float)
+0:332          step ( temp 4-component vector of float)
 0:332            'inF0' ( in 4-component vector of float)
+0:332            'inF1' ( in 4-component vector of float)
 0:333      Sequence
 0:333        move second child to first child ( temp 4-component vector of float)
-0:333          'r066' ( temp 4-component vector of float)
-0:333          hyp. tangent ( temp 4-component vector of float)
+0:333          'r065' ( temp 4-component vector of float)
+0:333          tangent ( temp 4-component vector of float)
 0:333            'inF0' ( in 4-component vector of float)
-0:335      Sequence
-0:335        move second child to first child ( temp 4-component vector of float)
-0:335          'r067' ( temp 4-component vector of float)
-0:335          trunc ( temp 4-component vector of float)
-0:335            'inF0' ( in 4-component vector of float)
-0:338      Branch: Return with expression
+0:334      Sequence
+0:334        move second child to first child ( temp 4-component vector of float)
+0:334          'r066' ( temp 4-component vector of float)
+0:334          hyp. tangent ( temp 4-component vector of float)
+0:334            'inF0' ( in 4-component vector of float)
+0:336      Sequence
+0:336        move second child to first child ( temp 4-component vector of float)
+0:336          'r067' ( temp 4-component vector of float)
+0:336          trunc ( temp 4-component vector of float)
+0:336            'inF0' ( in 4-component vector of float)
+0:339      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:401  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
-0:401    Function Parameters: 
-0:401      'inF0' ( in 2X2 matrix of float)
-0:401      'inF1' ( in 2X2 matrix of float)
-0:401      'inF2' ( in 2X2 matrix of float)
+0:402  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
+0:402    Function Parameters: 
+0:402      'inF0' ( in 2X2 matrix of float)
+0:402      'inF1' ( in 2X2 matrix of float)
+0:402      'inF2' ( in 2X2 matrix of float)
 0:?     Sequence
-0:403      Sequence
-0:403        move second child to first child ( temp bool)
-0:403          'r000' ( temp bool)
-0:403          all ( temp bool)
-0:403            Convert float to bool ( temp 2X2 matrix of bool)
-0:403              'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r001' ( temp 2X2 matrix of float)
-0:403          Absolute value ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      arc cosine ( temp 2X2 matrix of float)
-0:403        'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp bool)
-0:403          'r003' ( temp bool)
-0:403          any ( temp bool)
-0:403            Convert float to bool ( temp 2X2 matrix of bool)
-0:403              'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r004' ( temp 2X2 matrix of float)
-0:403          arc sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r005' ( temp 2X2 matrix of float)
-0:403          arc tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r006' ( temp 2X2 matrix of float)
-0:403          arc tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r007' ( temp 2X2 matrix of float)
-0:403          Ceiling ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Test condition and select ( temp void)
-0:403        Condition
-0:403        any ( temp bool)
-0:403          Compare Less Than ( temp 2X2 matrix of bool)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            Constant:
-0:403              0.000000
-0:403              0.000000
-0:403              0.000000
-0:403              0.000000
-0:403        true case
-0:403        Branch: Kill
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r008' ( temp 2X2 matrix of float)
-0:403          clamp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403            'inF2' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r009' ( temp 2X2 matrix of float)
-0:403          cosine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r010' ( temp 2X2 matrix of float)
-0:403          hyp. cosine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r011' ( temp 2X2 matrix of float)
-0:403          dPdx ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r012' ( temp 2X2 matrix of float)
-0:403          dPdxCoarse ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r013' ( temp 2X2 matrix of float)
-0:403          dPdxFine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r014' ( temp 2X2 matrix of float)
-0:403          dPdy ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r015' ( temp 2X2 matrix of float)
-0:403          dPdyCoarse ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r016' ( temp 2X2 matrix of float)
-0:403          dPdyFine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r017' ( temp 2X2 matrix of float)
-0:403          degrees ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp float)
-0:403          'r018' ( temp float)
-0:403          determinant ( temp float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r019' ( temp 2X2 matrix of float)
-0:403          exp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'R020' ( temp 2X2 matrix of float)
-0:403          exp2 ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r021' ( temp 2X2 matrix of float)
-0:403          Floor ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r022' ( temp 2X2 matrix of float)
-0:403          mod ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r023' ( temp 2X2 matrix of float)
-0:403          Fraction ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r025' ( temp 2X2 matrix of float)
-0:403          fwidth ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r026' ( temp 2X2 matrix of float)
-0:403          ldexp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r026a' ( temp 2X2 matrix of float)
-0:403          mix ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403            'inF2' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r027' ( temp 2X2 matrix of float)
-0:403          log ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r028' ( temp 2X2 matrix of float)
-0:403          matrix-scale ( temp 2X2 matrix of float)
-0:403            log2 ( temp 2X2 matrix of float)
-0:403              'inF0' ( in 2X2 matrix of float)
-0:403            Constant:
-0:403              0.301030
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r029' ( temp 2X2 matrix of float)
-0:403          log2 ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r030' ( temp 2X2 matrix of float)
-0:403          max ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r031' ( temp 2X2 matrix of float)
-0:403          min ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r032' ( temp 2X2 matrix of float)
-0:403          pow ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r033' ( temp 2X2 matrix of float)
-0:403          radians ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r034' ( temp 2X2 matrix of float)
-0:403          roundEven ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r035' ( temp 2X2 matrix of float)
-0:403          inverse sqrt ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r036' ( temp 2X2 matrix of float)
-0:403          clamp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            Constant:
-0:403              0.000000
-0:403            Constant:
-0:403              1.000000
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r037' ( temp 2X2 matrix of float)
-0:403          Sign ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r038' ( temp 2X2 matrix of float)
-0:403          sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'inF1' ( in 2X2 matrix of float)
-0:403          sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'inF2' ( in 2X2 matrix of float)
-0:403          cosine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r039' ( temp 2X2 matrix of float)
-0:403          hyp. sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r049' ( temp 2X2 matrix of float)
-0:403          smoothstep ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403            'inF2' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r041' ( temp 2X2 matrix of float)
-0:403          sqrt ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r042' ( temp 2X2 matrix of float)
-0:403          step ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r043' ( temp 2X2 matrix of float)
-0:403          tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r044' ( temp 2X2 matrix of float)
-0:403          hyp. tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      transpose ( temp 2X2 matrix of float)
-0:403        'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r046' ( temp 2X2 matrix of float)
-0:403          trunc ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:406      Branch: Return with expression
+0:404      Sequence
+0:404        move second child to first child ( temp bool)
+0:404          'r000' ( temp bool)
+0:404          all ( temp bool)
+0:404            Convert float to bool ( temp 2X2 matrix of bool)
+0:404              'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r001' ( temp 2X2 matrix of float)
+0:404          Absolute value ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      arc cosine ( temp 2X2 matrix of float)
+0:404        'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp bool)
+0:404          'r003' ( temp bool)
+0:404          any ( temp bool)
+0:404            Convert float to bool ( temp 2X2 matrix of bool)
+0:404              'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r004' ( temp 2X2 matrix of float)
+0:404          arc sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r005' ( temp 2X2 matrix of float)
+0:404          arc tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r006' ( temp 2X2 matrix of float)
+0:404          arc tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r007' ( temp 2X2 matrix of float)
+0:404          Ceiling ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Test condition and select ( temp void)
+0:404        Condition
+0:404        any ( temp bool)
+0:404          Compare Less Than ( temp 2X2 matrix of bool)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            Constant:
+0:404              0.000000
+0:404              0.000000
+0:404              0.000000
+0:404              0.000000
+0:404        true case
+0:404        Branch: Kill
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r008' ( temp 2X2 matrix of float)
+0:404          clamp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404            'inF2' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r009' ( temp 2X2 matrix of float)
+0:404          cosine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r010' ( temp 2X2 matrix of float)
+0:404          hyp. cosine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r011' ( temp 2X2 matrix of float)
+0:404          dPdx ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r012' ( temp 2X2 matrix of float)
+0:404          dPdxCoarse ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r013' ( temp 2X2 matrix of float)
+0:404          dPdxFine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r014' ( temp 2X2 matrix of float)
+0:404          dPdy ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r015' ( temp 2X2 matrix of float)
+0:404          dPdyCoarse ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r016' ( temp 2X2 matrix of float)
+0:404          dPdyFine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r017' ( temp 2X2 matrix of float)
+0:404          degrees ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp float)
+0:404          'r018' ( temp float)
+0:404          determinant ( temp float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r019' ( temp 2X2 matrix of float)
+0:404          exp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'R020' ( temp 2X2 matrix of float)
+0:404          exp2 ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r021' ( temp 2X2 matrix of float)
+0:404          Floor ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r022' ( temp 2X2 matrix of float)
+0:404          mod ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r023' ( temp 2X2 matrix of float)
+0:404          Fraction ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r025' ( temp 2X2 matrix of float)
+0:404          fwidth ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r026' ( temp 2X2 matrix of float)
+0:404          ldexp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r026a' ( temp 2X2 matrix of float)
+0:404          mix ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404            'inF2' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r027' ( temp 2X2 matrix of float)
+0:404          log ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r028' ( temp 2X2 matrix of float)
+0:404          matrix-scale ( temp 2X2 matrix of float)
+0:404            log2 ( temp 2X2 matrix of float)
+0:404              'inF0' ( in 2X2 matrix of float)
+0:404            Constant:
+0:404              0.301030
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r029' ( temp 2X2 matrix of float)
+0:404          log2 ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r030' ( temp 2X2 matrix of float)
+0:404          max ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r031' ( temp 2X2 matrix of float)
+0:404          min ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r032' ( temp 2X2 matrix of float)
+0:404          pow ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r033' ( temp 2X2 matrix of float)
+0:404          radians ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r034' ( temp 2X2 matrix of float)
+0:404          roundEven ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r035' ( temp 2X2 matrix of float)
+0:404          inverse sqrt ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r036' ( temp 2X2 matrix of float)
+0:404          clamp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            Constant:
+0:404              0.000000
+0:404            Constant:
+0:404              1.000000
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r037' ( temp 2X2 matrix of float)
+0:404          Sign ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r038' ( temp 2X2 matrix of float)
+0:404          sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'inF1' ( in 2X2 matrix of float)
+0:404          sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'inF2' ( in 2X2 matrix of float)
+0:404          cosine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r039' ( temp 2X2 matrix of float)
+0:404          hyp. sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r049' ( temp 2X2 matrix of float)
+0:404          smoothstep ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404            'inF2' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r041' ( temp 2X2 matrix of float)
+0:404          sqrt ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r042' ( temp 2X2 matrix of float)
+0:404          step ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r043' ( temp 2X2 matrix of float)
+0:404          tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r044' ( temp 2X2 matrix of float)
+0:404          hyp. tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      transpose ( temp 2X2 matrix of float)
+0:404        'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r046' ( temp 2X2 matrix of float)
+0:404          trunc ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:407      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:410  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
-0:410    Function Parameters: 
-0:410      'inF0' ( in 3X3 matrix of float)
-0:410      'inF1' ( in 3X3 matrix of float)
-0:410      'inF2' ( in 3X3 matrix of float)
+0:411  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
+0:411    Function Parameters: 
+0:411      'inF0' ( in 3X3 matrix of float)
+0:411      'inF1' ( in 3X3 matrix of float)
+0:411      'inF2' ( in 3X3 matrix of float)
 0:?     Sequence
-0:412      Sequence
-0:412        move second child to first child ( temp bool)
-0:412          'r000' ( temp bool)
-0:412          all ( temp bool)
-0:412            Convert float to bool ( temp 3X3 matrix of bool)
-0:412              'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r001' ( temp 3X3 matrix of float)
-0:412          Absolute value ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      arc cosine ( temp 3X3 matrix of float)
-0:412        'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp bool)
-0:412          'r003' ( temp bool)
-0:412          any ( temp bool)
-0:412            Convert float to bool ( temp 3X3 matrix of bool)
-0:412              'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r004' ( temp 3X3 matrix of float)
-0:412          arc sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r005' ( temp 3X3 matrix of float)
-0:412          arc tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r006' ( temp 3X3 matrix of float)
-0:412          arc tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r007' ( temp 3X3 matrix of float)
-0:412          Ceiling ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Test condition and select ( temp void)
-0:412        Condition
-0:412        any ( temp bool)
-0:412          Compare Less Than ( temp 3X3 matrix of bool)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            Constant:
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412        true case
-0:412        Branch: Kill
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r008' ( temp 3X3 matrix of float)
-0:412          clamp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412            'inF2' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r009' ( temp 3X3 matrix of float)
-0:412          cosine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r010' ( temp 3X3 matrix of float)
-0:412          hyp. cosine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r011' ( temp 3X3 matrix of float)
-0:412          dPdx ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r012' ( temp 3X3 matrix of float)
-0:412          dPdxCoarse ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r013' ( temp 3X3 matrix of float)
-0:412          dPdxFine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r014' ( temp 3X3 matrix of float)
-0:412          dPdy ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r015' ( temp 3X3 matrix of float)
-0:412          dPdyCoarse ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r016' ( temp 3X3 matrix of float)
-0:412          dPdyFine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r017' ( temp 3X3 matrix of float)
-0:412          degrees ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp float)
-0:412          'r018' ( temp float)
-0:412          determinant ( temp float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r019' ( temp 3X3 matrix of float)
-0:412          exp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'R020' ( temp 3X3 matrix of float)
-0:412          exp2 ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r021' ( temp 3X3 matrix of float)
-0:412          Floor ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r022' ( temp 3X3 matrix of float)
-0:412          mod ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r023' ( temp 3X3 matrix of float)
-0:412          Fraction ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r025' ( temp 3X3 matrix of float)
-0:412          fwidth ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r026' ( temp 3X3 matrix of float)
-0:412          ldexp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r026a' ( temp 3X3 matrix of float)
-0:412          mix ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412            'inF2' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r027' ( temp 3X3 matrix of float)
-0:412          log ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r028' ( temp 3X3 matrix of float)
-0:412          matrix-scale ( temp 3X3 matrix of float)
-0:412            log2 ( temp 3X3 matrix of float)
-0:412              'inF0' ( in 3X3 matrix of float)
-0:412            Constant:
-0:412              0.301030
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r029' ( temp 3X3 matrix of float)
-0:412          log2 ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r030' ( temp 3X3 matrix of float)
-0:412          max ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r031' ( temp 3X3 matrix of float)
-0:412          min ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r032' ( temp 3X3 matrix of float)
-0:412          pow ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r033' ( temp 3X3 matrix of float)
-0:412          radians ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r034' ( temp 3X3 matrix of float)
-0:412          roundEven ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r035' ( temp 3X3 matrix of float)
-0:412          inverse sqrt ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r036' ( temp 3X3 matrix of float)
-0:412          clamp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            Constant:
-0:412              0.000000
-0:412            Constant:
-0:412              1.000000
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r037' ( temp 3X3 matrix of float)
-0:412          Sign ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r038' ( temp 3X3 matrix of float)
-0:412          sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'inF1' ( in 3X3 matrix of float)
-0:412          sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'inF2' ( in 3X3 matrix of float)
-0:412          cosine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r039' ( temp 3X3 matrix of float)
-0:412          hyp. sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r049' ( temp 3X3 matrix of float)
-0:412          smoothstep ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412            'inF2' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r041' ( temp 3X3 matrix of float)
-0:412          sqrt ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r042' ( temp 3X3 matrix of float)
-0:412          step ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r043' ( temp 3X3 matrix of float)
-0:412          tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r044' ( temp 3X3 matrix of float)
-0:412          hyp. tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      transpose ( temp 3X3 matrix of float)
-0:412        'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r046' ( temp 3X3 matrix of float)
-0:412          trunc ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:415      Branch: Return with expression
+0:413      Sequence
+0:413        move second child to first child ( temp bool)
+0:413          'r000' ( temp bool)
+0:413          all ( temp bool)
+0:413            Convert float to bool ( temp 3X3 matrix of bool)
+0:413              'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r001' ( temp 3X3 matrix of float)
+0:413          Absolute value ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      arc cosine ( temp 3X3 matrix of float)
+0:413        'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp bool)
+0:413          'r003' ( temp bool)
+0:413          any ( temp bool)
+0:413            Convert float to bool ( temp 3X3 matrix of bool)
+0:413              'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r004' ( temp 3X3 matrix of float)
+0:413          arc sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r005' ( temp 3X3 matrix of float)
+0:413          arc tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r006' ( temp 3X3 matrix of float)
+0:413          arc tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r007' ( temp 3X3 matrix of float)
+0:413          Ceiling ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Test condition and select ( temp void)
+0:413        Condition
+0:413        any ( temp bool)
+0:413          Compare Less Than ( temp 3X3 matrix of bool)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            Constant:
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413        true case
+0:413        Branch: Kill
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r008' ( temp 3X3 matrix of float)
+0:413          clamp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413            'inF2' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r009' ( temp 3X3 matrix of float)
+0:413          cosine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r010' ( temp 3X3 matrix of float)
+0:413          hyp. cosine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r011' ( temp 3X3 matrix of float)
+0:413          dPdx ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r012' ( temp 3X3 matrix of float)
+0:413          dPdxCoarse ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r013' ( temp 3X3 matrix of float)
+0:413          dPdxFine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r014' ( temp 3X3 matrix of float)
+0:413          dPdy ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r015' ( temp 3X3 matrix of float)
+0:413          dPdyCoarse ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r016' ( temp 3X3 matrix of float)
+0:413          dPdyFine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r017' ( temp 3X3 matrix of float)
+0:413          degrees ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp float)
+0:413          'r018' ( temp float)
+0:413          determinant ( temp float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r019' ( temp 3X3 matrix of float)
+0:413          exp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'R020' ( temp 3X3 matrix of float)
+0:413          exp2 ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r021' ( temp 3X3 matrix of float)
+0:413          Floor ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r022' ( temp 3X3 matrix of float)
+0:413          mod ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r023' ( temp 3X3 matrix of float)
+0:413          Fraction ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r025' ( temp 3X3 matrix of float)
+0:413          fwidth ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r026' ( temp 3X3 matrix of float)
+0:413          ldexp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r026a' ( temp 3X3 matrix of float)
+0:413          mix ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413            'inF2' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r027' ( temp 3X3 matrix of float)
+0:413          log ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r028' ( temp 3X3 matrix of float)
+0:413          matrix-scale ( temp 3X3 matrix of float)
+0:413            log2 ( temp 3X3 matrix of float)
+0:413              'inF0' ( in 3X3 matrix of float)
+0:413            Constant:
+0:413              0.301030
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r029' ( temp 3X3 matrix of float)
+0:413          log2 ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r030' ( temp 3X3 matrix of float)
+0:413          max ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r031' ( temp 3X3 matrix of float)
+0:413          min ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r032' ( temp 3X3 matrix of float)
+0:413          pow ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r033' ( temp 3X3 matrix of float)
+0:413          radians ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r034' ( temp 3X3 matrix of float)
+0:413          roundEven ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r035' ( temp 3X3 matrix of float)
+0:413          inverse sqrt ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r036' ( temp 3X3 matrix of float)
+0:413          clamp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            Constant:
+0:413              0.000000
+0:413            Constant:
+0:413              1.000000
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r037' ( temp 3X3 matrix of float)
+0:413          Sign ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r038' ( temp 3X3 matrix of float)
+0:413          sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'inF1' ( in 3X3 matrix of float)
+0:413          sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'inF2' ( in 3X3 matrix of float)
+0:413          cosine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r039' ( temp 3X3 matrix of float)
+0:413          hyp. sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r049' ( temp 3X3 matrix of float)
+0:413          smoothstep ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413            'inF2' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r041' ( temp 3X3 matrix of float)
+0:413          sqrt ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r042' ( temp 3X3 matrix of float)
+0:413          step ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r043' ( temp 3X3 matrix of float)
+0:413          tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r044' ( temp 3X3 matrix of float)
+0:413          hyp. tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      transpose ( temp 3X3 matrix of float)
+0:413        'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r046' ( temp 3X3 matrix of float)
+0:413          trunc ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:416      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -2168,297 +2175,297 @@
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:419  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
-0:419    Function Parameters: 
-0:419      'inF0' ( in 4X4 matrix of float)
-0:419      'inF1' ( in 4X4 matrix of float)
-0:419      'inF2' ( in 4X4 matrix of float)
+0:420  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
+0:420    Function Parameters: 
+0:420      'inF0' ( in 4X4 matrix of float)
+0:420      'inF1' ( in 4X4 matrix of float)
+0:420      'inF2' ( in 4X4 matrix of float)
 0:?     Sequence
-0:421      Sequence
-0:421        move second child to first child ( temp bool)
-0:421          'r000' ( temp bool)
-0:421          all ( temp bool)
-0:421            Convert float to bool ( temp 4X4 matrix of bool)
-0:421              'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r001' ( temp 4X4 matrix of float)
-0:421          Absolute value ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      arc cosine ( temp 4X4 matrix of float)
-0:421        'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp bool)
-0:421          'r003' ( temp bool)
-0:421          any ( temp bool)
-0:421            Convert float to bool ( temp 4X4 matrix of bool)
-0:421              'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r004' ( temp 4X4 matrix of float)
-0:421          arc sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r005' ( temp 4X4 matrix of float)
-0:421          arc tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r006' ( temp 4X4 matrix of float)
-0:421          arc tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r007' ( temp 4X4 matrix of float)
-0:421          Ceiling ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Test condition and select ( temp void)
-0:421        Condition
-0:421        any ( temp bool)
-0:421          Compare Less Than ( temp 4X4 matrix of bool)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            Constant:
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421        true case
-0:421        Branch: Kill
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r008' ( temp 4X4 matrix of float)
-0:421          clamp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421            'inF2' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r009' ( temp 4X4 matrix of float)
-0:421          cosine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r010' ( temp 4X4 matrix of float)
-0:421          hyp. cosine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r011' ( temp 4X4 matrix of float)
-0:421          dPdx ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r012' ( temp 4X4 matrix of float)
-0:421          dPdxCoarse ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r013' ( temp 4X4 matrix of float)
-0:421          dPdxFine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r014' ( temp 4X4 matrix of float)
-0:421          dPdy ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r015' ( temp 4X4 matrix of float)
-0:421          dPdyCoarse ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r016' ( temp 4X4 matrix of float)
-0:421          dPdyFine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r017' ( temp 4X4 matrix of float)
-0:421          degrees ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp float)
-0:421          'r018' ( temp float)
-0:421          determinant ( temp float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r019' ( temp 4X4 matrix of float)
-0:421          exp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'R020' ( temp 4X4 matrix of float)
-0:421          exp2 ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r021' ( temp 4X4 matrix of float)
-0:421          Floor ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r022' ( temp 4X4 matrix of float)
-0:421          mod ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r023' ( temp 4X4 matrix of float)
-0:421          Fraction ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r025' ( temp 4X4 matrix of float)
-0:421          fwidth ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r026' ( temp 4X4 matrix of float)
-0:421          ldexp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r026a' ( temp 4X4 matrix of float)
-0:421          mix ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421            'inF2' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r027' ( temp 4X4 matrix of float)
-0:421          log ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r028' ( temp 4X4 matrix of float)
-0:421          matrix-scale ( temp 4X4 matrix of float)
-0:421            log2 ( temp 4X4 matrix of float)
-0:421              'inF0' ( in 4X4 matrix of float)
-0:421            Constant:
-0:421              0.301030
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r029' ( temp 4X4 matrix of float)
-0:421          log2 ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r030' ( temp 4X4 matrix of float)
-0:421          max ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r031' ( temp 4X4 matrix of float)
-0:421          min ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r032' ( temp 4X4 matrix of float)
-0:421          pow ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r033' ( temp 4X4 matrix of float)
-0:421          radians ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r034' ( temp 4X4 matrix of float)
-0:421          roundEven ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r035' ( temp 4X4 matrix of float)
-0:421          inverse sqrt ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r036' ( temp 4X4 matrix of float)
-0:421          clamp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            Constant:
-0:421              0.000000
-0:421            Constant:
-0:421              1.000000
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r037' ( temp 4X4 matrix of float)
-0:421          Sign ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r038' ( temp 4X4 matrix of float)
-0:421          sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'inF1' ( in 4X4 matrix of float)
-0:421          sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'inF2' ( in 4X4 matrix of float)
-0:421          cosine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r039' ( temp 4X4 matrix of float)
-0:421          hyp. sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r049' ( temp 4X4 matrix of float)
-0:421          smoothstep ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421            'inF2' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r041' ( temp 4X4 matrix of float)
-0:421          sqrt ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r042' ( temp 4X4 matrix of float)
-0:421          step ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r043' ( temp 4X4 matrix of float)
-0:421          tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r044' ( temp 4X4 matrix of float)
-0:421          hyp. tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      transpose ( temp 4X4 matrix of float)
-0:421        'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r046' ( temp 4X4 matrix of float)
-0:421          trunc ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:424      Branch: Return with expression
+0:422      Sequence
+0:422        move second child to first child ( temp bool)
+0:422          'r000' ( temp bool)
+0:422          all ( temp bool)
+0:422            Convert float to bool ( temp 4X4 matrix of bool)
+0:422              'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r001' ( temp 4X4 matrix of float)
+0:422          Absolute value ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      arc cosine ( temp 4X4 matrix of float)
+0:422        'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp bool)
+0:422          'r003' ( temp bool)
+0:422          any ( temp bool)
+0:422            Convert float to bool ( temp 4X4 matrix of bool)
+0:422              'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r004' ( temp 4X4 matrix of float)
+0:422          arc sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r005' ( temp 4X4 matrix of float)
+0:422          arc tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r006' ( temp 4X4 matrix of float)
+0:422          arc tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r007' ( temp 4X4 matrix of float)
+0:422          Ceiling ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Test condition and select ( temp void)
+0:422        Condition
+0:422        any ( temp bool)
+0:422          Compare Less Than ( temp 4X4 matrix of bool)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            Constant:
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422        true case
+0:422        Branch: Kill
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r008' ( temp 4X4 matrix of float)
+0:422          clamp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422            'inF2' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r009' ( temp 4X4 matrix of float)
+0:422          cosine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r010' ( temp 4X4 matrix of float)
+0:422          hyp. cosine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r011' ( temp 4X4 matrix of float)
+0:422          dPdx ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r012' ( temp 4X4 matrix of float)
+0:422          dPdxCoarse ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r013' ( temp 4X4 matrix of float)
+0:422          dPdxFine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r014' ( temp 4X4 matrix of float)
+0:422          dPdy ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r015' ( temp 4X4 matrix of float)
+0:422          dPdyCoarse ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r016' ( temp 4X4 matrix of float)
+0:422          dPdyFine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r017' ( temp 4X4 matrix of float)
+0:422          degrees ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp float)
+0:422          'r018' ( temp float)
+0:422          determinant ( temp float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r019' ( temp 4X4 matrix of float)
+0:422          exp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'R020' ( temp 4X4 matrix of float)
+0:422          exp2 ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r021' ( temp 4X4 matrix of float)
+0:422          Floor ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r022' ( temp 4X4 matrix of float)
+0:422          mod ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r023' ( temp 4X4 matrix of float)
+0:422          Fraction ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r025' ( temp 4X4 matrix of float)
+0:422          fwidth ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r026' ( temp 4X4 matrix of float)
+0:422          ldexp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r026a' ( temp 4X4 matrix of float)
+0:422          mix ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422            'inF2' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r027' ( temp 4X4 matrix of float)
+0:422          log ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r028' ( temp 4X4 matrix of float)
+0:422          matrix-scale ( temp 4X4 matrix of float)
+0:422            log2 ( temp 4X4 matrix of float)
+0:422              'inF0' ( in 4X4 matrix of float)
+0:422            Constant:
+0:422              0.301030
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r029' ( temp 4X4 matrix of float)
+0:422          log2 ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r030' ( temp 4X4 matrix of float)
+0:422          max ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r031' ( temp 4X4 matrix of float)
+0:422          min ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r032' ( temp 4X4 matrix of float)
+0:422          pow ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r033' ( temp 4X4 matrix of float)
+0:422          radians ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r034' ( temp 4X4 matrix of float)
+0:422          roundEven ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r035' ( temp 4X4 matrix of float)
+0:422          inverse sqrt ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r036' ( temp 4X4 matrix of float)
+0:422          clamp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            Constant:
+0:422              0.000000
+0:422            Constant:
+0:422              1.000000
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r037' ( temp 4X4 matrix of float)
+0:422          Sign ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r038' ( temp 4X4 matrix of float)
+0:422          sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'inF1' ( in 4X4 matrix of float)
+0:422          sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'inF2' ( in 4X4 matrix of float)
+0:422          cosine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r039' ( temp 4X4 matrix of float)
+0:422          hyp. sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r049' ( temp 4X4 matrix of float)
+0:422          smoothstep ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422            'inF2' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r041' ( temp 4X4 matrix of float)
+0:422          sqrt ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r042' ( temp 4X4 matrix of float)
+0:422          step ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r043' ( temp 4X4 matrix of float)
+0:422          tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r044' ( temp 4X4 matrix of float)
+0:422          hyp. tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      transpose ( temp 4X4 matrix of float)
+0:422        'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r046' ( temp 4X4 matrix of float)
+0:422          trunc ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:425      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -2476,334 +2483,334 @@
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:442  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
-0:442    Function Parameters: 
-0:442      'inF0' ( in float)
-0:442      'inF1' ( in float)
-0:442      'inFV0' ( in 2-component vector of float)
-0:442      'inFV1' ( in 2-component vector of float)
-0:442      'inFM0' ( in 2X2 matrix of float)
-0:442      'inFM1' ( in 2X2 matrix of float)
+0:443  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
+0:443    Function Parameters: 
+0:443      'inF0' ( in float)
+0:443      'inF1' ( in float)
+0:443      'inFV0' ( in 2-component vector of float)
+0:443      'inFV1' ( in 2-component vector of float)
+0:443      'inFM0' ( in 2X2 matrix of float)
+0:443      'inFM1' ( in 2X2 matrix of float)
 0:?     Sequence
-0:443      Sequence
-0:443        move second child to first child ( temp float)
-0:443          'r0' ( temp float)
-0:443          component-wise multiply ( temp float)
-0:443            'inF1' ( in float)
-0:443            'inF0' ( in float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r1' ( temp 2-component vector of float)
-0:443          vector-scale ( temp 2-component vector of float)
-0:443            'inF0' ( in float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r2' ( temp 2-component vector of float)
-0:443          vector-scale ( temp 2-component vector of float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443            'inF0' ( in float)
-0:443      Sequence
-0:443        move second child to first child ( temp float)
-0:443          'r3' ( temp float)
-0:443          dot-product ( temp float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443            'inFV1' ( in 2-component vector of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r4' ( temp 2-component vector of float)
-0:443          vector-times-matrix ( temp 2-component vector of float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r5' ( temp 2-component vector of float)
-0:443          matrix-times-vector ( temp 2-component vector of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2X2 matrix of float)
-0:443          'r6' ( temp 2X2 matrix of float)
-0:443          matrix-scale ( temp 2X2 matrix of float)
-0:443            'inF0' ( in float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2X2 matrix of float)
-0:443          'r7' ( temp 2X2 matrix of float)
-0:443          matrix-scale ( temp 2X2 matrix of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443            'inF0' ( in float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2X2 matrix of float)
-0:443          'r8' ( temp 2X2 matrix of float)
-0:443          matrix-multiply ( temp 2X2 matrix of float)
-0:443            'inFM1' ( in 2X2 matrix of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:449  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
-0:449    Function Parameters: 
-0:449      'inF0' ( in float)
-0:449      'inF1' ( in float)
-0:449      'inFV0' ( in 3-component vector of float)
-0:449      'inFV1' ( in 3-component vector of float)
-0:449      'inFM0' ( in 3X3 matrix of float)
-0:449      'inFM1' ( in 3X3 matrix of float)
+0:444      Sequence
+0:444        move second child to first child ( temp float)
+0:444          'r0' ( temp float)
+0:444          component-wise multiply ( temp float)
+0:444            'inF1' ( in float)
+0:444            'inF0' ( in float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r1' ( temp 2-component vector of float)
+0:444          vector-scale ( temp 2-component vector of float)
+0:444            'inF0' ( in float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r2' ( temp 2-component vector of float)
+0:444          vector-scale ( temp 2-component vector of float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444            'inF0' ( in float)
+0:444      Sequence
+0:444        move second child to first child ( temp float)
+0:444          'r3' ( temp float)
+0:444          dot-product ( temp float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444            'inFV1' ( in 2-component vector of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r4' ( temp 2-component vector of float)
+0:444          vector-times-matrix ( temp 2-component vector of float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r5' ( temp 2-component vector of float)
+0:444          matrix-times-vector ( temp 2-component vector of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2X2 matrix of float)
+0:444          'r6' ( temp 2X2 matrix of float)
+0:444          matrix-scale ( temp 2X2 matrix of float)
+0:444            'inF0' ( in float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2X2 matrix of float)
+0:444          'r7' ( temp 2X2 matrix of float)
+0:444          matrix-scale ( temp 2X2 matrix of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444            'inF0' ( in float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2X2 matrix of float)
+0:444          'r8' ( temp 2X2 matrix of float)
+0:444          matrix-multiply ( temp 2X2 matrix of float)
+0:444            'inFM1' ( in 2X2 matrix of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:450  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
+0:450    Function Parameters: 
+0:450      'inF0' ( in float)
+0:450      'inF1' ( in float)
+0:450      'inFV0' ( in 3-component vector of float)
+0:450      'inFV1' ( in 3-component vector of float)
+0:450      'inFM0' ( in 3X3 matrix of float)
+0:450      'inFM1' ( in 3X3 matrix of float)
 0:?     Sequence
-0:450      Sequence
-0:450        move second child to first child ( temp float)
-0:450          'r0' ( temp float)
-0:450          component-wise multiply ( temp float)
-0:450            'inF1' ( in float)
-0:450            'inF0' ( in float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r1' ( temp 3-component vector of float)
-0:450          vector-scale ( temp 3-component vector of float)
-0:450            'inF0' ( in float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r2' ( temp 3-component vector of float)
-0:450          vector-scale ( temp 3-component vector of float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450            'inF0' ( in float)
-0:450      Sequence
-0:450        move second child to first child ( temp float)
-0:450          'r3' ( temp float)
-0:450          dot-product ( temp float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450            'inFV1' ( in 3-component vector of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r4' ( temp 3-component vector of float)
-0:450          vector-times-matrix ( temp 3-component vector of float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r5' ( temp 3-component vector of float)
-0:450          matrix-times-vector ( temp 3-component vector of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3X3 matrix of float)
-0:450          'r6' ( temp 3X3 matrix of float)
-0:450          matrix-scale ( temp 3X3 matrix of float)
-0:450            'inF0' ( in float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3X3 matrix of float)
-0:450          'r7' ( temp 3X3 matrix of float)
-0:450          matrix-scale ( temp 3X3 matrix of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450            'inF0' ( in float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3X3 matrix of float)
-0:450          'r8' ( temp 3X3 matrix of float)
-0:450          matrix-multiply ( temp 3X3 matrix of float)
-0:450            'inFM1' ( in 3X3 matrix of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:456  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
-0:456    Function Parameters: 
-0:456      'inF0' ( in float)
-0:456      'inF1' ( in float)
-0:456      'inFV0' ( in 4-component vector of float)
-0:456      'inFV1' ( in 4-component vector of float)
-0:456      'inFM0' ( in 4X4 matrix of float)
-0:456      'inFM1' ( in 4X4 matrix of float)
+0:451      Sequence
+0:451        move second child to first child ( temp float)
+0:451          'r0' ( temp float)
+0:451          component-wise multiply ( temp float)
+0:451            'inF1' ( in float)
+0:451            'inF0' ( in float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r1' ( temp 3-component vector of float)
+0:451          vector-scale ( temp 3-component vector of float)
+0:451            'inF0' ( in float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r2' ( temp 3-component vector of float)
+0:451          vector-scale ( temp 3-component vector of float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451            'inF0' ( in float)
+0:451      Sequence
+0:451        move second child to first child ( temp float)
+0:451          'r3' ( temp float)
+0:451          dot-product ( temp float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451            'inFV1' ( in 3-component vector of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r4' ( temp 3-component vector of float)
+0:451          vector-times-matrix ( temp 3-component vector of float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r5' ( temp 3-component vector of float)
+0:451          matrix-times-vector ( temp 3-component vector of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3X3 matrix of float)
+0:451          'r6' ( temp 3X3 matrix of float)
+0:451          matrix-scale ( temp 3X3 matrix of float)
+0:451            'inF0' ( in float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3X3 matrix of float)
+0:451          'r7' ( temp 3X3 matrix of float)
+0:451          matrix-scale ( temp 3X3 matrix of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451            'inF0' ( in float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3X3 matrix of float)
+0:451          'r8' ( temp 3X3 matrix of float)
+0:451          matrix-multiply ( temp 3X3 matrix of float)
+0:451            'inFM1' ( in 3X3 matrix of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:457  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
+0:457    Function Parameters: 
+0:457      'inF0' ( in float)
+0:457      'inF1' ( in float)
+0:457      'inFV0' ( in 4-component vector of float)
+0:457      'inFV1' ( in 4-component vector of float)
+0:457      'inFM0' ( in 4X4 matrix of float)
+0:457      'inFM1' ( in 4X4 matrix of float)
 0:?     Sequence
-0:457      Sequence
-0:457        move second child to first child ( temp float)
-0:457          'r0' ( temp float)
-0:457          component-wise multiply ( temp float)
-0:457            'inF1' ( in float)
-0:457            'inF0' ( in float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r1' ( temp 4-component vector of float)
-0:457          vector-scale ( temp 4-component vector of float)
-0:457            'inF0' ( in float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r2' ( temp 4-component vector of float)
-0:457          vector-scale ( temp 4-component vector of float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457            'inF0' ( in float)
-0:457      Sequence
-0:457        move second child to first child ( temp float)
-0:457          'r3' ( temp float)
-0:457          dot-product ( temp float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457            'inFV1' ( in 4-component vector of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r4' ( temp 4-component vector of float)
-0:457          vector-times-matrix ( temp 4-component vector of float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r5' ( temp 4-component vector of float)
-0:457          matrix-times-vector ( temp 4-component vector of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4X4 matrix of float)
-0:457          'r6' ( temp 4X4 matrix of float)
-0:457          matrix-scale ( temp 4X4 matrix of float)
-0:457            'inF0' ( in float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4X4 matrix of float)
-0:457          'r7' ( temp 4X4 matrix of float)
-0:457          matrix-scale ( temp 4X4 matrix of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457            'inF0' ( in float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4X4 matrix of float)
-0:457          'r8' ( temp 4X4 matrix of float)
-0:457          matrix-multiply ( temp 4X4 matrix of float)
-0:457            'inFM1' ( in 4X4 matrix of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:466  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
-0:466    Function Parameters: 
-0:466      'inF0' ( in float)
-0:466      'inF1' ( in float)
-0:466      'inFV2' ( in 2-component vector of float)
-0:466      'inFV3' ( in 3-component vector of float)
-0:466      'inFM2x3' ( in 2X3 matrix of float)
-0:466      'inFM3x2' ( in 3X2 matrix of float)
-0:466      'inFM3x3' ( in 3X3 matrix of float)
-0:466      'inFM3x4' ( in 3X4 matrix of float)
-0:466      'inFM2x4' ( in 2X4 matrix of float)
+0:458      Sequence
+0:458        move second child to first child ( temp float)
+0:458          'r0' ( temp float)
+0:458          component-wise multiply ( temp float)
+0:458            'inF1' ( in float)
+0:458            'inF0' ( in float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r1' ( temp 4-component vector of float)
+0:458          vector-scale ( temp 4-component vector of float)
+0:458            'inF0' ( in float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r2' ( temp 4-component vector of float)
+0:458          vector-scale ( temp 4-component vector of float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458            'inF0' ( in float)
+0:458      Sequence
+0:458        move second child to first child ( temp float)
+0:458          'r3' ( temp float)
+0:458          dot-product ( temp float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458            'inFV1' ( in 4-component vector of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r4' ( temp 4-component vector of float)
+0:458          vector-times-matrix ( temp 4-component vector of float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r5' ( temp 4-component vector of float)
+0:458          matrix-times-vector ( temp 4-component vector of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4X4 matrix of float)
+0:458          'r6' ( temp 4X4 matrix of float)
+0:458          matrix-scale ( temp 4X4 matrix of float)
+0:458            'inF0' ( in float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4X4 matrix of float)
+0:458          'r7' ( temp 4X4 matrix of float)
+0:458          matrix-scale ( temp 4X4 matrix of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458            'inF0' ( in float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4X4 matrix of float)
+0:458          'r8' ( temp 4X4 matrix of float)
+0:458          matrix-multiply ( temp 4X4 matrix of float)
+0:458            'inFM1' ( in 4X4 matrix of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:467  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
+0:467    Function Parameters: 
+0:467      'inF0' ( in float)
+0:467      'inF1' ( in float)
+0:467      'inFV2' ( in 2-component vector of float)
+0:467      'inFV3' ( in 3-component vector of float)
+0:467      'inFM2x3' ( in 2X3 matrix of float)
+0:467      'inFM3x2' ( in 3X2 matrix of float)
+0:467      'inFM3x3' ( in 3X3 matrix of float)
+0:467      'inFM3x4' ( in 3X4 matrix of float)
+0:467      'inFM2x4' ( in 2X4 matrix of float)
 0:?     Sequence
-0:467      Sequence
-0:467        move second child to first child ( temp float)
-0:467          'r00' ( temp float)
-0:467          component-wise multiply ( temp float)
-0:467            'inF1' ( in float)
-0:467            'inF0' ( in float)
 0:468      Sequence
-0:468        move second child to first child ( temp 2-component vector of float)
-0:468          'r01' ( temp 2-component vector of float)
-0:468          vector-scale ( temp 2-component vector of float)
+0:468        move second child to first child ( temp float)
+0:468          'r00' ( temp float)
+0:468          component-wise multiply ( temp float)
+0:468            'inF1' ( in float)
 0:468            'inF0' ( in float)
-0:468            'inFV2' ( in 2-component vector of float)
 0:469      Sequence
-0:469        move second child to first child ( temp 3-component vector of float)
-0:469          'r02' ( temp 3-component vector of float)
-0:469          vector-scale ( temp 3-component vector of float)
+0:469        move second child to first child ( temp 2-component vector of float)
+0:469          'r01' ( temp 2-component vector of float)
+0:469          vector-scale ( temp 2-component vector of float)
 0:469            'inF0' ( in float)
-0:469            'inFV3' ( in 3-component vector of float)
+0:469            'inFV2' ( in 2-component vector of float)
 0:470      Sequence
-0:470        move second child to first child ( temp 2-component vector of float)
-0:470          'r03' ( temp 2-component vector of float)
-0:470          vector-scale ( temp 2-component vector of float)
-0:470            'inFV2' ( in 2-component vector of float)
+0:470        move second child to first child ( temp 3-component vector of float)
+0:470          'r02' ( temp 3-component vector of float)
+0:470          vector-scale ( temp 3-component vector of float)
 0:470            'inF0' ( in float)
+0:470            'inFV3' ( in 3-component vector of float)
 0:471      Sequence
-0:471        move second child to first child ( temp 3-component vector of float)
-0:471          'r04' ( temp 3-component vector of float)
-0:471          vector-scale ( temp 3-component vector of float)
-0:471            'inFV3' ( in 3-component vector of float)
+0:471        move second child to first child ( temp 2-component vector of float)
+0:471          'r03' ( temp 2-component vector of float)
+0:471          vector-scale ( temp 2-component vector of float)
+0:471            'inFV2' ( in 2-component vector of float)
 0:471            'inF0' ( in float)
 0:472      Sequence
-0:472        move second child to first child ( temp float)
-0:472          'r05' ( temp float)
-0:472          dot-product ( temp float)
-0:472            'inFV2' ( in 2-component vector of float)
-0:472            'inFV2' ( in 2-component vector of float)
+0:472        move second child to first child ( temp 3-component vector of float)
+0:472          'r04' ( temp 3-component vector of float)
+0:472          vector-scale ( temp 3-component vector of float)
+0:472            'inFV3' ( in 3-component vector of float)
+0:472            'inF0' ( in float)
 0:473      Sequence
 0:473        move second child to first child ( temp float)
-0:473          'r06' ( temp float)
+0:473          'r05' ( temp float)
 0:473          dot-product ( temp float)
-0:473            'inFV3' ( in 3-component vector of float)
-0:473            'inFV3' ( in 3-component vector of float)
+0:473            'inFV2' ( in 2-component vector of float)
+0:473            'inFV2' ( in 2-component vector of float)
 0:474      Sequence
-0:474        move second child to first child ( temp 3-component vector of float)
-0:474          'r07' ( temp 3-component vector of float)
-0:474          matrix-times-vector ( temp 3-component vector of float)
-0:474            'inFM2x3' ( in 2X3 matrix of float)
-0:474            'inFV2' ( in 2-component vector of float)
+0:474        move second child to first child ( temp float)
+0:474          'r06' ( temp float)
+0:474          dot-product ( temp float)
+0:474            'inFV3' ( in 3-component vector of float)
+0:474            'inFV3' ( in 3-component vector of float)
 0:475      Sequence
-0:475        move second child to first child ( temp 2-component vector of float)
-0:475          'r08' ( temp 2-component vector of float)
-0:475          matrix-times-vector ( temp 2-component vector of float)
-0:475            'inFM3x2' ( in 3X2 matrix of float)
-0:475            'inFV3' ( in 3-component vector of float)
+0:475        move second child to first child ( temp 3-component vector of float)
+0:475          'r07' ( temp 3-component vector of float)
+0:475          matrix-times-vector ( temp 3-component vector of float)
+0:475            'inFM2x3' ( in 2X3 matrix of float)
+0:475            'inFV2' ( in 2-component vector of float)
 0:476      Sequence
 0:476        move second child to first child ( temp 2-component vector of float)
-0:476          'r09' ( temp 2-component vector of float)
-0:476          vector-times-matrix ( temp 2-component vector of float)
+0:476          'r08' ( temp 2-component vector of float)
+0:476          matrix-times-vector ( temp 2-component vector of float)
+0:476            'inFM3x2' ( in 3X2 matrix of float)
 0:476            'inFV3' ( in 3-component vector of float)
-0:476            'inFM2x3' ( in 2X3 matrix of float)
 0:477      Sequence
-0:477        move second child to first child ( temp 3-component vector of float)
-0:477          'r10' ( temp 3-component vector of float)
-0:477          vector-times-matrix ( temp 3-component vector of float)
-0:477            'inFV2' ( in 2-component vector of float)
-0:477            'inFM3x2' ( in 3X2 matrix of float)
+0:477        move second child to first child ( temp 2-component vector of float)
+0:477          'r09' ( temp 2-component vector of float)
+0:477          vector-times-matrix ( temp 2-component vector of float)
+0:477            'inFV3' ( in 3-component vector of float)
+0:477            'inFM2x3' ( in 2X3 matrix of float)
 0:478      Sequence
-0:478        move second child to first child ( temp 2X3 matrix of float)
-0:478          'r11' ( temp 2X3 matrix of float)
-0:478          matrix-scale ( temp 2X3 matrix of float)
-0:478            'inF0' ( in float)
-0:478            'inFM2x3' ( in 2X3 matrix of float)
+0:478        move second child to first child ( temp 3-component vector of float)
+0:478          'r10' ( temp 3-component vector of float)
+0:478          vector-times-matrix ( temp 3-component vector of float)
+0:478            'inFV2' ( in 2-component vector of float)
+0:478            'inFM3x2' ( in 3X2 matrix of float)
 0:479      Sequence
-0:479        move second child to first child ( temp 3X2 matrix of float)
-0:479          'r12' ( temp 3X2 matrix of float)
-0:479          matrix-scale ( temp 3X2 matrix of float)
+0:479        move second child to first child ( temp 2X3 matrix of float)
+0:479          'r11' ( temp 2X3 matrix of float)
+0:479          matrix-scale ( temp 2X3 matrix of float)
 0:479            'inF0' ( in float)
-0:479            'inFM3x2' ( in 3X2 matrix of float)
+0:479            'inFM2x3' ( in 2X3 matrix of float)
 0:480      Sequence
-0:480        move second child to first child ( temp 2X2 matrix of float)
-0:480          'r13' ( temp 2X2 matrix of float)
-0:480          matrix-multiply ( temp 2X2 matrix of float)
+0:480        move second child to first child ( temp 3X2 matrix of float)
+0:480          'r12' ( temp 3X2 matrix of float)
+0:480          matrix-scale ( temp 3X2 matrix of float)
+0:480            'inF0' ( in float)
 0:480            'inFM3x2' ( in 3X2 matrix of float)
-0:480            'inFM2x3' ( in 2X3 matrix of float)
 0:481      Sequence
-0:481        move second child to first child ( temp 2X3 matrix of float)
-0:481          'r14' ( temp 2X3 matrix of float)
-0:481          matrix-multiply ( temp 2X3 matrix of float)
-0:481            'inFM3x3' ( in 3X3 matrix of float)
+0:481        move second child to first child ( temp 2X2 matrix of float)
+0:481          'r13' ( temp 2X2 matrix of float)
+0:481          matrix-multiply ( temp 2X2 matrix of float)
+0:481            'inFM3x2' ( in 3X2 matrix of float)
 0:481            'inFM2x3' ( in 2X3 matrix of float)
 0:482      Sequence
-0:482        move second child to first child ( temp 2X4 matrix of float)
-0:482          'r15' ( temp 2X4 matrix of float)
-0:482          matrix-multiply ( temp 2X4 matrix of float)
-0:482            'inFM3x4' ( in 3X4 matrix of float)
+0:482        move second child to first child ( temp 2X3 matrix of float)
+0:482          'r14' ( temp 2X3 matrix of float)
+0:482          matrix-multiply ( temp 2X3 matrix of float)
+0:482            'inFM3x3' ( in 3X3 matrix of float)
 0:482            'inFM2x3' ( in 2X3 matrix of float)
 0:483      Sequence
-0:483        move second child to first child ( temp 3X4 matrix of float)
-0:483          'r16' ( temp 3X4 matrix of float)
-0:483          matrix-multiply ( temp 3X4 matrix of float)
-0:483            'inFM2x4' ( in 2X4 matrix of float)
-0:483            'inFM3x2' ( in 3X2 matrix of float)
-0:489  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:489    Function Parameters: 
+0:483        move second child to first child ( temp 2X4 matrix of float)
+0:483          'r15' ( temp 2X4 matrix of float)
+0:483          matrix-multiply ( temp 2X4 matrix of float)
+0:483            'inFM3x4' ( in 3X4 matrix of float)
+0:483            'inFM2x3' ( in 2X3 matrix of float)
+0:484      Sequence
+0:484        move second child to first child ( temp 3X4 matrix of float)
+0:484          'r16' ( temp 3X4 matrix of float)
+0:484          matrix-multiply ( temp 3X4 matrix of float)
+0:484            'inFM2x4' ( in 2X4 matrix of float)
+0:484            'inFM3x2' ( in 3X2 matrix of float)
+0:490  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:490    Function Parameters: 
 0:?     Sequence
-0:491      move second child to first child ( temp 4-component vector of float)
-0:491        color: direct index for structure ( temp 4-component vector of float)
-0:491          'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:491          Constant:
-0:491            0 (const int)
-0:491        Constant:
-0:491          1.000000
-0:491          1.000000
-0:491          1.000000
-0:491          1.000000
-0:492      Branch: Return with expression
-0:492        'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:489  Function Definition: main( ( temp void)
-0:489    Function Parameters: 
+0:492      move second child to first child ( temp 4-component vector of float)
+0:492        color: direct index for structure ( temp 4-component vector of float)
+0:492          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:492          Constant:
+0:492            0 (const int)
+0:492        Constant:
+0:492          1.000000
+0:492          1.000000
+0:492          1.000000
+0:492          1.000000
+0:493      Branch: Return with expression
+0:493        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:490  Function Definition: main( ( temp void)
+0:490    Function Parameters: 
 0:?     Sequence
-0:489      Sequence
-0:489        move second child to first child ( temp 4-component vector of float)
+0:490      Sequence
+0:490        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:489          color: direct index for structure ( temp 4-component vector of float)
-0:489            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:489            Constant:
-0:489              0 (const int)
+0:490          color: direct index for structure ( temp 4-component vector of float)
+0:490            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:490            Constant:
+0:490              0 (const int)
 0:?   Linker Objects
 0:?     'gs_ua' ( shared uint)
 0:?     'gs_ub' ( shared uint)
@@ -3009,1073 +3016,1068 @@
 0:55            'inF1' ( in float)
 0:56      Sequence
 0:56        move second child to first child ( temp float)
-0:56          'r034' ( temp float)
-0:56          Fraction ( temp float)
+0:56          'r033i' ( temp float)
+0:56          mod ( temp float)
 0:56            'inF0' ( in float)
+0:56            Constant:
+0:56              2.000000
 0:57      Sequence
 0:57        move second child to first child ( temp float)
-0:57          'r036' ( temp float)
-0:57          fwidth ( temp float)
+0:57          'r034' ( temp float)
+0:57          Fraction ( temp float)
 0:57            'inF0' ( in float)
 0:58      Sequence
-0:58        move second child to first child ( temp bool)
-0:58          'r037' ( temp bool)
-0:58          isinf ( temp bool)
+0:58        move second child to first child ( temp float)
+0:58          'r036' ( temp float)
+0:58          fwidth ( temp float)
 0:58            'inF0' ( in float)
 0:59      Sequence
 0:59        move second child to first child ( temp bool)
-0:59          'r038' ( temp bool)
-0:59          isnan ( temp bool)
+0:59          'r037' ( temp bool)
+0:59          isinf ( temp bool)
 0:59            'inF0' ( in float)
 0:60      Sequence
-0:60        move second child to first child ( temp float)
-0:60          'r039' ( temp float)
-0:60          ldexp ( temp float)
+0:60        move second child to first child ( temp bool)
+0:60          'r038' ( temp bool)
+0:60          isnan ( temp bool)
 0:60            'inF0' ( in float)
-0:60            'inF1' ( in float)
 0:61      Sequence
 0:61        move second child to first child ( temp float)
-0:61          'r039a' ( temp float)
-0:61          mix ( temp float)
+0:61          'r039' ( temp float)
+0:61          ldexp ( temp float)
 0:61            'inF0' ( in float)
 0:61            'inF1' ( in float)
-0:61            'inF2' ( in float)
 0:62      Sequence
 0:62        move second child to first child ( temp float)
-0:62          'r040' ( temp float)
-0:62          log ( temp float)
+0:62          'r039a' ( temp float)
+0:62          mix ( temp float)
 0:62            'inF0' ( in float)
+0:62            'inF1' ( in float)
+0:62            'inF2' ( in float)
 0:63      Sequence
 0:63        move second child to first child ( temp float)
-0:63          'r041' ( temp float)
-0:63          component-wise multiply ( temp float)
-0:63            log2 ( temp float)
-0:63              'inF0' ( in float)
-0:63            Constant:
-0:63              0.301030
+0:63          'r040' ( temp float)
+0:63          log ( temp float)
+0:63            'inF0' ( in float)
 0:64      Sequence
 0:64        move second child to first child ( temp float)
-0:64          'r042' ( temp float)
-0:64          log2 ( temp float)
-0:64            'inF0' ( in float)
+0:64          'r041' ( temp float)
+0:64          component-wise multiply ( temp float)
+0:64            log2 ( temp float)
+0:64              'inF0' ( in float)
+0:64            Constant:
+0:64              0.301030
 0:65      Sequence
 0:65        move second child to first child ( temp float)
-0:65          'r043' ( temp float)
-0:65          max ( temp float)
+0:65          'r042' ( temp float)
+0:65          log2 ( temp float)
 0:65            'inF0' ( in float)
-0:65            'inF1' ( in float)
 0:66      Sequence
 0:66        move second child to first child ( temp float)
-0:66          'r044' ( temp float)
-0:66          min ( temp float)
+0:66          'r043' ( temp float)
+0:66          max ( temp float)
 0:66            'inF0' ( in float)
 0:66            'inF1' ( in float)
 0:67      Sequence
 0:67        move second child to first child ( temp float)
-0:67          'r045' ( temp float)
-0:67          pow ( temp float)
+0:67          'r044' ( temp float)
+0:67          min ( temp float)
 0:67            'inF0' ( in float)
 0:67            'inF1' ( in float)
 0:68      Sequence
 0:68        move second child to first child ( temp float)
-0:68          'r046' ( temp float)
-0:68          radians ( temp float)
+0:68          'r045' ( temp float)
+0:68          pow ( temp float)
 0:68            'inF0' ( in float)
+0:68            'inF1' ( in float)
 0:69      Sequence
 0:69        move second child to first child ( temp float)
-0:69          'r047' ( temp float)
-0:69          divide ( temp float)
-0:69            Constant:
-0:69              1.000000
+0:69          'r046' ( temp float)
+0:69          radians ( temp float)
 0:69            'inF0' ( in float)
 0:70      Sequence
-0:70        move second child to first child ( temp uint)
-0:70          'r048' ( temp uint)
-0:70          Convert int to uint ( temp uint)
-0:70            bitFieldReverse ( temp int)
-0:70              Constant:
-0:70                2 (const int)
+0:70        move second child to first child ( temp float)
+0:70          'r047' ( temp float)
+0:70          divide ( temp float)
+0:70            Constant:
+0:70              1.000000
+0:70            'inF0' ( in float)
 0:71      Sequence
-0:71        move second child to first child ( temp float)
-0:71          'r049' ( temp float)
-0:71          roundEven ( temp float)
-0:71            'inF0' ( in float)
+0:71        move second child to first child ( temp uint)
+0:71          'r048' ( temp uint)
+0:71          Convert int to uint ( temp uint)
+0:71            bitFieldReverse ( temp int)
+0:71              Constant:
+0:71                2 (const int)
 0:72      Sequence
 0:72        move second child to first child ( temp float)
-0:72          'r050' ( temp float)
-0:72          inverse sqrt ( temp float)
+0:72          'r049' ( temp float)
+0:72          roundEven ( temp float)
 0:72            'inF0' ( in float)
 0:73      Sequence
 0:73        move second child to first child ( temp float)
-0:73          'r051' ( temp float)
-0:73          clamp ( temp float)
+0:73          'r050' ( temp float)
+0:73          inverse sqrt ( temp float)
 0:73            'inF0' ( in float)
-0:73            Constant:
-0:73              0.000000
-0:73            Constant:
-0:73              1.000000
 0:74      Sequence
 0:74        move second child to first child ( temp float)
-0:74          'r052' ( temp float)
-0:74          Sign ( temp float)
+0:74          'r051' ( temp float)
+0:74          clamp ( temp float)
 0:74            'inF0' ( in float)
+0:74            Constant:
+0:74              0.000000
+0:74            Constant:
+0:74              1.000000
 0:75      Sequence
 0:75        move second child to first child ( temp float)
-0:75          'r053' ( temp float)
-0:75          sine ( temp float)
+0:75          'r052' ( temp float)
+0:75          Sign ( temp float)
 0:75            'inF0' ( in float)
 0:76      Sequence
 0:76        move second child to first child ( temp float)
-0:76          'inF1' ( in float)
+0:76          'r053' ( temp float)
 0:76          sine ( temp float)
 0:76            'inF0' ( in float)
-0:76        move second child to first child ( temp float)
-0:76          'inF2' ( in float)
-0:76          cosine ( temp float)
-0:76            'inF0' ( in float)
 0:77      Sequence
 0:77        move second child to first child ( temp float)
-0:77          'r055' ( temp float)
-0:77          hyp. sine ( temp float)
+0:77          'inF1' ( in float)
+0:77          sine ( temp float)
+0:77            'inF0' ( in float)
+0:77        move second child to first child ( temp float)
+0:77          'inF2' ( in float)
+0:77          cosine ( temp float)
 0:77            'inF0' ( in float)
 0:78      Sequence
 0:78        move second child to first child ( temp float)
-0:78          'r056' ( temp float)
-0:78          smoothstep ( temp float)
+0:78          'r055' ( temp float)
+0:78          hyp. sine ( temp float)
 0:78            'inF0' ( in float)
-0:78            'inF1' ( in float)
-0:78            'inF2' ( in float)
 0:79      Sequence
 0:79        move second child to first child ( temp float)
-0:79          'r057' ( temp float)
-0:79          sqrt ( temp float)
+0:79          'r056' ( temp float)
+0:79          smoothstep ( temp float)
 0:79            'inF0' ( in float)
+0:79            'inF1' ( in float)
+0:79            'inF2' ( in float)
 0:80      Sequence
 0:80        move second child to first child ( temp float)
-0:80          'r058' ( temp float)
-0:80          step ( temp float)
+0:80          'r057' ( temp float)
+0:80          sqrt ( temp float)
 0:80            'inF0' ( in float)
-0:80            'inF1' ( in float)
 0:81      Sequence
 0:81        move second child to first child ( temp float)
-0:81          'r059' ( temp float)
-0:81          tangent ( temp float)
+0:81          'r058' ( temp float)
+0:81          step ( temp float)
 0:81            'inF0' ( in float)
+0:81            'inF1' ( in float)
 0:82      Sequence
 0:82        move second child to first child ( temp float)
-0:82          'r060' ( temp float)
-0:82          hyp. tangent ( temp float)
+0:82          'r059' ( temp float)
+0:82          tangent ( temp float)
 0:82            'inF0' ( in float)
-0:84      Sequence
-0:84        move second child to first child ( temp float)
-0:84          'r061' ( temp float)
-0:84          trunc ( temp float)
-0:84            'inF0' ( in float)
-0:86      Branch: Return with expression
-0:86        Constant:
-0:86          0.000000
-0:90  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
-0:90    Function Parameters: 
-0:90      'inF0' ( in 1-component vector of float)
-0:90      'inF1' ( in 1-component vector of float)
-0:90      'inF2' ( in 1-component vector of float)
+0:83      Sequence
+0:83        move second child to first child ( temp float)
+0:83          'r060' ( temp float)
+0:83          hyp. tangent ( temp float)
+0:83            'inF0' ( in float)
+0:85      Sequence
+0:85        move second child to first child ( temp float)
+0:85          'r061' ( temp float)
+0:85          trunc ( temp float)
+0:85            'inF0' ( in float)
+0:87      Branch: Return with expression
+0:87        Constant:
+0:87          0.000000
+0:91  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
+0:91    Function Parameters: 
+0:91      'inF0' ( in 1-component vector of float)
+0:91      'inF1' ( in 1-component vector of float)
+0:91      'inF2' ( in 1-component vector of float)
 0:?     Sequence
-0:92      Branch: Return with expression
-0:92        Constant:
-0:92          0.000000
-0:96  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
-0:96    Function Parameters: 
-0:96      'inF0' ( in 2-component vector of float)
-0:96      'inF1' ( in 2-component vector of float)
-0:96      'inF2' ( in 2-component vector of float)
-0:96      'inU0' ( in 2-component vector of uint)
-0:96      'inU1' ( in 2-component vector of uint)
+0:93      Branch: Return with expression
+0:93        Constant:
+0:93          0.000000
+0:97  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
+0:97    Function Parameters: 
+0:97      'inF0' ( in 2-component vector of float)
+0:97      'inF1' ( in 2-component vector of float)
+0:97      'inF2' ( in 2-component vector of float)
+0:97      'inU0' ( in 2-component vector of uint)
+0:97      'inU1' ( in 2-component vector of uint)
 0:?     Sequence
-0:99      Sequence
-0:99        move second child to first child ( temp bool)
-0:99          'r000' ( temp bool)
-0:99          all ( temp bool)
-0:99            Convert float to bool ( temp 2-component vector of bool)
-0:99              'inF0' ( in 2-component vector of float)
 0:100      Sequence
-0:100        move second child to first child ( temp 2-component vector of float)
-0:100          'r001' ( temp 2-component vector of float)
-0:100          Absolute value ( temp 2-component vector of float)
-0:100            'inF0' ( in 2-component vector of float)
+0:100        move second child to first child ( temp bool)
+0:100          'r000' ( temp bool)
+0:100          all ( temp bool)
+0:100            Convert float to bool ( temp 2-component vector of bool)
+0:100              'inF0' ( in 2-component vector of float)
 0:101      Sequence
 0:101        move second child to first child ( temp 2-component vector of float)
-0:101          'r002' ( temp 2-component vector of float)
-0:101          arc cosine ( temp 2-component vector of float)
+0:101          'r001' ( temp 2-component vector of float)
+0:101          Absolute value ( temp 2-component vector of float)
 0:101            'inF0' ( in 2-component vector of float)
 0:102      Sequence
-0:102        move second child to first child ( temp bool)
-0:102          'r003' ( temp bool)
-0:102          any ( temp bool)
-0:102            Convert float to bool ( temp 2-component vector of bool)
-0:102              'inF0' ( in 2-component vector of float)
+0:102        move second child to first child ( temp 2-component vector of float)
+0:102          'r002' ( temp 2-component vector of float)
+0:102          arc cosine ( temp 2-component vector of float)
+0:102            'inF0' ( in 2-component vector of float)
 0:103      Sequence
-0:103        move second child to first child ( temp 2-component vector of float)
-0:103          'r004' ( temp 2-component vector of float)
-0:103          arc sine ( temp 2-component vector of float)
-0:103            'inF0' ( in 2-component vector of float)
+0:103        move second child to first child ( temp bool)
+0:103          'r003' ( temp bool)
+0:103          any ( temp bool)
+0:103            Convert float to bool ( temp 2-component vector of bool)
+0:103              'inF0' ( in 2-component vector of float)
 0:104      Sequence
-0:104        move second child to first child ( temp 2-component vector of int)
-0:104          'r005' ( temp 2-component vector of int)
-0:104          floatBitsToInt ( temp 2-component vector of int)
+0:104        move second child to first child ( temp 2-component vector of float)
+0:104          'r004' ( temp 2-component vector of float)
+0:104          arc sine ( temp 2-component vector of float)
 0:104            'inF0' ( in 2-component vector of float)
 0:105      Sequence
-0:105        move second child to first child ( temp 2-component vector of uint)
-0:105          'r006' ( temp 2-component vector of uint)
-0:105          floatBitsToUint ( temp 2-component vector of uint)
+0:105        move second child to first child ( temp 2-component vector of int)
+0:105          'r005' ( temp 2-component vector of int)
+0:105          floatBitsToInt ( temp 2-component vector of int)
 0:105            'inF0' ( in 2-component vector of float)
 0:106      Sequence
-0:106        move second child to first child ( temp 2-component vector of float)
-0:106          'r007' ( temp 2-component vector of float)
-0:106          intBitsToFloat ( temp 2-component vector of float)
-0:106            'inU0' ( in 2-component vector of uint)
-0:108      Sequence
-0:108        move second child to first child ( temp 2-component vector of float)
-0:108          'r009' ( temp 2-component vector of float)
-0:108          arc tangent ( temp 2-component vector of float)
-0:108            'inF0' ( in 2-component vector of float)
+0:106        move second child to first child ( temp 2-component vector of uint)
+0:106          'r006' ( temp 2-component vector of uint)
+0:106          floatBitsToUint ( temp 2-component vector of uint)
+0:106            'inF0' ( in 2-component vector of float)
+0:107      Sequence
+0:107        move second child to first child ( temp 2-component vector of float)
+0:107          'r007' ( temp 2-component vector of float)
+0:107          intBitsToFloat ( temp 2-component vector of float)
+0:107            'inU0' ( in 2-component vector of uint)
 0:109      Sequence
 0:109        move second child to first child ( temp 2-component vector of float)
-0:109          'r010' ( temp 2-component vector of float)
+0:109          'r009' ( temp 2-component vector of float)
 0:109          arc tangent ( temp 2-component vector of float)
 0:109            'inF0' ( in 2-component vector of float)
-0:109            'inF1' ( in 2-component vector of float)
 0:110      Sequence
 0:110        move second child to first child ( temp 2-component vector of float)
-0:110          'r011' ( temp 2-component vector of float)
-0:110          Ceiling ( temp 2-component vector of float)
+0:110          'r010' ( temp 2-component vector of float)
+0:110          arc tangent ( temp 2-component vector of float)
 0:110            'inF0' ( in 2-component vector of float)
+0:110            'inF1' ( in 2-component vector of float)
 0:111      Sequence
 0:111        move second child to first child ( temp 2-component vector of float)
-0:111          'r012' ( temp 2-component vector of float)
-0:111          clamp ( temp 2-component vector of float)
+0:111          'r011' ( temp 2-component vector of float)
+0:111          Ceiling ( temp 2-component vector of float)
 0:111            'inF0' ( in 2-component vector of float)
-0:111            'inF1' ( in 2-component vector of float)
-0:111            'inF2' ( in 2-component vector of float)
-0:112      Test condition and select ( temp void)
-0:112        Condition
-0:112        any ( temp bool)
-0:112          Compare Less Than ( temp 2-component vector of bool)
+0:112      Sequence
+0:112        move second child to first child ( temp 2-component vector of float)
+0:112          'r012' ( temp 2-component vector of float)
+0:112          clamp ( temp 2-component vector of float)
 0:112            'inF0' ( in 2-component vector of float)
-0:112            Constant:
-0:112              0.000000
-0:112              0.000000
-0:112        true case
-0:112        Branch: Kill
+0:112            'inF1' ( in 2-component vector of float)
+0:112            'inF2' ( in 2-component vector of float)
 0:113      Test condition and select ( temp void)
 0:113        Condition
 0:113        any ( temp bool)
 0:113          Compare Less Than ( temp 2-component vector of bool)
-0:113            'inU0' ( in 2-component vector of uint)
+0:113            'inF0' ( in 2-component vector of float)
 0:113            Constant:
 0:113              0.000000
 0:113              0.000000
 0:113        true case
 0:113        Branch: Kill
-0:114      Sequence
-0:114        move second child to first child ( temp 2-component vector of float)
-0:114          'r013' ( temp 2-component vector of float)
-0:114          cosine ( temp 2-component vector of float)
-0:114            'inF0' ( in 2-component vector of float)
+0:114      Test condition and select ( temp void)
+0:114        Condition
+0:114        any ( temp bool)
+0:114          Compare Less Than ( temp 2-component vector of bool)
+0:114            'inU0' ( in 2-component vector of uint)
+0:114            Constant:
+0:114              0.000000
+0:114              0.000000
+0:114        true case
+0:114        Branch: Kill
 0:115      Sequence
 0:115        move second child to first child ( temp 2-component vector of float)
-0:115          'r015' ( temp 2-component vector of float)
-0:115          hyp. cosine ( temp 2-component vector of float)
+0:115          'r013' ( temp 2-component vector of float)
+0:115          cosine ( temp 2-component vector of float)
 0:115            'inF0' ( in 2-component vector of float)
 0:116      Sequence
-0:116        move second child to first child ( temp 2-component vector of int)
-0:116          'r016' ( temp 2-component vector of int)
+0:116        move second child to first child ( temp 2-component vector of float)
+0:116          'r015' ( temp 2-component vector of float)
+0:116          hyp. cosine ( temp 2-component vector of float)
+0:116            'inF0' ( in 2-component vector of float)
+0:117      Sequence
+0:117        move second child to first child ( temp 2-component vector of int)
+0:117          'r016' ( temp 2-component vector of int)
 0:?           bitCount ( temp 2-component vector of int)
 0:?             Constant:
 0:?               7 (const int)
 0:?               3 (const int)
-0:117      Sequence
-0:117        move second child to first child ( temp 2-component vector of float)
-0:117          'r017' ( temp 2-component vector of float)
-0:117          dPdx ( temp 2-component vector of float)
-0:117            'inF0' ( in 2-component vector of float)
 0:118      Sequence
 0:118        move second child to first child ( temp 2-component vector of float)
-0:118          'r018' ( temp 2-component vector of float)
-0:118          dPdxCoarse ( temp 2-component vector of float)
+0:118          'r017' ( temp 2-component vector of float)
+0:118          dPdx ( temp 2-component vector of float)
 0:118            'inF0' ( in 2-component vector of float)
 0:119      Sequence
 0:119        move second child to first child ( temp 2-component vector of float)
-0:119          'r019' ( temp 2-component vector of float)
-0:119          dPdxFine ( temp 2-component vector of float)
+0:119          'r018' ( temp 2-component vector of float)
+0:119          dPdxCoarse ( temp 2-component vector of float)
 0:119            'inF0' ( in 2-component vector of float)
 0:120      Sequence
 0:120        move second child to first child ( temp 2-component vector of float)
-0:120          'r020' ( temp 2-component vector of float)
-0:120          dPdy ( temp 2-component vector of float)
+0:120          'r019' ( temp 2-component vector of float)
+0:120          dPdxFine ( temp 2-component vector of float)
 0:120            'inF0' ( in 2-component vector of float)
 0:121      Sequence
 0:121        move second child to first child ( temp 2-component vector of float)
-0:121          'r021' ( temp 2-component vector of float)
-0:121          dPdyCoarse ( temp 2-component vector of float)
+0:121          'r020' ( temp 2-component vector of float)
+0:121          dPdy ( temp 2-component vector of float)
 0:121            'inF0' ( in 2-component vector of float)
 0:122      Sequence
 0:122        move second child to first child ( temp 2-component vector of float)
-0:122          'r022' ( temp 2-component vector of float)
-0:122          dPdyFine ( temp 2-component vector of float)
+0:122          'r021' ( temp 2-component vector of float)
+0:122          dPdyCoarse ( temp 2-component vector of float)
 0:122            'inF0' ( in 2-component vector of float)
 0:123      Sequence
 0:123        move second child to first child ( temp 2-component vector of float)
-0:123          'r023' ( temp 2-component vector of float)
-0:123          degrees ( temp 2-component vector of float)
+0:123          'r022' ( temp 2-component vector of float)
+0:123          dPdyFine ( temp 2-component vector of float)
 0:123            'inF0' ( in 2-component vector of float)
-0:127      Sequence
-0:127        move second child to first child ( temp float)
-0:127          'r026' ( temp float)
-0:127          distance ( temp float)
-0:127            'inF0' ( in 2-component vector of float)
-0:127            'inF1' ( in 2-component vector of float)
+0:124      Sequence
+0:124        move second child to first child ( temp 2-component vector of float)
+0:124          'r023' ( temp 2-component vector of float)
+0:124          degrees ( temp 2-component vector of float)
+0:124            'inF0' ( in 2-component vector of float)
 0:128      Sequence
 0:128        move second child to first child ( temp float)
-0:128          'r027' ( temp float)
-0:128          dot-product ( temp float)
+0:128          'r026' ( temp float)
+0:128          distance ( temp float)
 0:128            'inF0' ( in 2-component vector of float)
 0:128            'inF1' ( in 2-component vector of float)
-0:132      Sequence
-0:132        move second child to first child ( temp 2-component vector of float)
-0:132          'r028' ( temp 2-component vector of float)
-0:132          exp ( temp 2-component vector of float)
-0:132            'inF0' ( in 2-component vector of float)
+0:129      Sequence
+0:129        move second child to first child ( temp float)
+0:129          'r027' ( temp float)
+0:129          dot-product ( temp float)
+0:129            'inF0' ( in 2-component vector of float)
+0:129            'inF1' ( in 2-component vector of float)
 0:133      Sequence
 0:133        move second child to first child ( temp 2-component vector of float)
-0:133          'r029' ( temp 2-component vector of float)
-0:133          exp2 ( temp 2-component vector of float)
+0:133          'r028' ( temp 2-component vector of float)
+0:133          exp ( temp 2-component vector of float)
 0:133            'inF0' ( in 2-component vector of float)
 0:134      Sequence
 0:134        move second child to first child ( temp 2-component vector of float)
-0:134          'r030' ( temp 2-component vector of float)
-0:134          face-forward ( temp 2-component vector of float)
+0:134          'r029' ( temp 2-component vector of float)
+0:134          exp2 ( temp 2-component vector of float)
 0:134            'inF0' ( in 2-component vector of float)
-0:134            'inF1' ( in 2-component vector of float)
-0:134            'inF2' ( in 2-component vector of float)
 0:135      Sequence
-0:135        move second child to first child ( temp 2-component vector of uint)
-0:135          'r031' ( temp 2-component vector of uint)
+0:135        move second child to first child ( temp 2-component vector of float)
+0:135          'r030' ( temp 2-component vector of float)
+0:135          face-forward ( temp 2-component vector of float)
+0:135            'inF0' ( in 2-component vector of float)
+0:135            'inF1' ( in 2-component vector of float)
+0:135            'inF2' ( in 2-component vector of float)
+0:136      Sequence
+0:136        move second child to first child ( temp 2-component vector of uint)
+0:136          'r031' ( temp 2-component vector of uint)
 0:?           findMSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:136      Sequence
-0:136        move second child to first child ( temp 2-component vector of uint)
-0:136          'r032' ( temp 2-component vector of uint)
+0:137      Sequence
+0:137        move second child to first child ( temp 2-component vector of uint)
+0:137          'r032' ( temp 2-component vector of uint)
 0:?           findLSB ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
-0:137      Sequence
-0:137        move second child to first child ( temp 2-component vector of float)
-0:137          'r033' ( temp 2-component vector of float)
-0:137          Floor ( temp 2-component vector of float)
-0:137            'inF0' ( in 2-component vector of float)
-0:139      Sequence
-0:139        move second child to first child ( temp 2-component vector of float)
-0:139          'r035' ( temp 2-component vector of float)
-0:139          mod ( temp 2-component vector of float)
-0:139            'inF0' ( in 2-component vector of float)
-0:139            'inF1' ( in 2-component vector of float)
+0:138      Sequence
+0:138        move second child to first child ( temp 2-component vector of float)
+0:138          'r033' ( temp 2-component vector of float)
+0:138          Floor ( temp 2-component vector of float)
+0:138            'inF0' ( in 2-component vector of float)
 0:140      Sequence
 0:140        move second child to first child ( temp 2-component vector of float)
-0:140          'r036' ( temp 2-component vector of float)
-0:140          Fraction ( temp 2-component vector of float)
+0:140          'r035' ( temp 2-component vector of float)
+0:140          mod ( temp 2-component vector of float)
 0:140            'inF0' ( in 2-component vector of float)
+0:140            'inF1' ( in 2-component vector of float)
 0:141      Sequence
 0:141        move second child to first child ( temp 2-component vector of float)
-0:141          'r038' ( temp 2-component vector of float)
-0:141          fwidth ( temp 2-component vector of float)
+0:141          'r036' ( temp 2-component vector of float)
+0:141          Fraction ( temp 2-component vector of float)
 0:141            'inF0' ( in 2-component vector of float)
 0:142      Sequence
-0:142        move second child to first child ( temp 2-component vector of bool)
-0:142          'r039' ( temp 2-component vector of bool)
-0:142          isinf ( temp 2-component vector of bool)
+0:142        move second child to first child ( temp 2-component vector of float)
+0:142          'r038' ( temp 2-component vector of float)
+0:142          fwidth ( temp 2-component vector of float)
 0:142            'inF0' ( in 2-component vector of float)
 0:143      Sequence
 0:143        move second child to first child ( temp 2-component vector of bool)
-0:143          'r040' ( temp 2-component vector of bool)
-0:143          isnan ( temp 2-component vector of bool)
+0:143          'r039' ( temp 2-component vector of bool)
+0:143          isinf ( temp 2-component vector of bool)
 0:143            'inF0' ( in 2-component vector of float)
 0:144      Sequence
-0:144        move second child to first child ( temp 2-component vector of float)
-0:144          'r041' ( temp 2-component vector of float)
-0:144          ldexp ( temp 2-component vector of float)
+0:144        move second child to first child ( temp 2-component vector of bool)
+0:144          'r040' ( temp 2-component vector of bool)
+0:144          isnan ( temp 2-component vector of bool)
 0:144            'inF0' ( in 2-component vector of float)
-0:144            'inF1' ( in 2-component vector of float)
 0:145      Sequence
 0:145        move second child to first child ( temp 2-component vector of float)
-0:145          'r039a' ( temp 2-component vector of float)
-0:145          mix ( temp 2-component vector of float)
+0:145          'r041' ( temp 2-component vector of float)
+0:145          ldexp ( temp 2-component vector of float)
 0:145            'inF0' ( in 2-component vector of float)
 0:145            'inF1' ( in 2-component vector of float)
-0:145            'inF2' ( in 2-component vector of float)
 0:146      Sequence
-0:146        move second child to first child ( temp float)
-0:146          'r042' ( temp float)
-0:146          length ( temp float)
+0:146        move second child to first child ( temp 2-component vector of float)
+0:146          'r039a' ( temp 2-component vector of float)
+0:146          mix ( temp 2-component vector of float)
 0:146            'inF0' ( in 2-component vector of float)
+0:146            'inF1' ( in 2-component vector of float)
+0:146            'inF2' ( in 2-component vector of float)
 0:147      Sequence
-0:147        move second child to first child ( temp 2-component vector of float)
-0:147          'r043' ( temp 2-component vector of float)
-0:147          log ( temp 2-component vector of float)
+0:147        move second child to first child ( temp float)
+0:147          'r042' ( temp float)
+0:147          length ( temp float)
 0:147            'inF0' ( in 2-component vector of float)
 0:148      Sequence
 0:148        move second child to first child ( temp 2-component vector of float)
-0:148          'r044' ( temp 2-component vector of float)
-0:148          vector-scale ( temp 2-component vector of float)
-0:148            log2 ( temp 2-component vector of float)
-0:148              'inF0' ( in 2-component vector of float)
-0:148            Constant:
-0:148              0.301030
+0:148          'r043' ( temp 2-component vector of float)
+0:148          log ( temp 2-component vector of float)
+0:148            'inF0' ( in 2-component vector of float)
 0:149      Sequence
 0:149        move second child to first child ( temp 2-component vector of float)
-0:149          'r045' ( temp 2-component vector of float)
-0:149          log2 ( temp 2-component vector of float)
-0:149            'inF0' ( in 2-component vector of float)
+0:149          'r044' ( temp 2-component vector of float)
+0:149          vector-scale ( temp 2-component vector of float)
+0:149            log2 ( temp 2-component vector of float)
+0:149              'inF0' ( in 2-component vector of float)
+0:149            Constant:
+0:149              0.301030
 0:150      Sequence
 0:150        move second child to first child ( temp 2-component vector of float)
-0:150          'r046' ( temp 2-component vector of float)
-0:150          max ( temp 2-component vector of float)
+0:150          'r045' ( temp 2-component vector of float)
+0:150          log2 ( temp 2-component vector of float)
 0:150            'inF0' ( in 2-component vector of float)
-0:150            'inF1' ( in 2-component vector of float)
 0:151      Sequence
 0:151        move second child to first child ( temp 2-component vector of float)
-0:151          'r047' ( temp 2-component vector of float)
-0:151          min ( temp 2-component vector of float)
+0:151          'r046' ( temp 2-component vector of float)
+0:151          max ( temp 2-component vector of float)
 0:151            'inF0' ( in 2-component vector of float)
 0:151            'inF1' ( in 2-component vector of float)
 0:152      Sequence
 0:152        move second child to first child ( temp 2-component vector of float)
-0:152          'r048' ( temp 2-component vector of float)
-0:152          normalize ( temp 2-component vector of float)
+0:152          'r047' ( temp 2-component vector of float)
+0:152          min ( temp 2-component vector of float)
 0:152            'inF0' ( in 2-component vector of float)
+0:152            'inF1' ( in 2-component vector of float)
 0:153      Sequence
 0:153        move second child to first child ( temp 2-component vector of float)
-0:153          'r049' ( temp 2-component vector of float)
-0:153          pow ( temp 2-component vector of float)
+0:153          'r048' ( temp 2-component vector of float)
+0:153          normalize ( temp 2-component vector of float)
 0:153            'inF0' ( in 2-component vector of float)
-0:153            'inF1' ( in 2-component vector of float)
 0:154      Sequence
 0:154        move second child to first child ( temp 2-component vector of float)
-0:154          'r050' ( temp 2-component vector of float)
-0:154          radians ( temp 2-component vector of float)
+0:154          'r049' ( temp 2-component vector of float)
+0:154          pow ( temp 2-component vector of float)
 0:154            'inF0' ( in 2-component vector of float)
+0:154            'inF1' ( in 2-component vector of float)
 0:155      Sequence
 0:155        move second child to first child ( temp 2-component vector of float)
-0:155          'r051' ( temp 2-component vector of float)
-0:155          divide ( temp 2-component vector of float)
-0:155            Constant:
-0:155              1.000000
+0:155          'r050' ( temp 2-component vector of float)
+0:155          radians ( temp 2-component vector of float)
 0:155            'inF0' ( in 2-component vector of float)
 0:156      Sequence
 0:156        move second child to first child ( temp 2-component vector of float)
-0:156          'r052' ( temp 2-component vector of float)
-0:156          reflect ( temp 2-component vector of float)
+0:156          'r051' ( temp 2-component vector of float)
+0:156          divide ( temp 2-component vector of float)
+0:156            Constant:
+0:156              1.000000
 0:156            'inF0' ( in 2-component vector of float)
-0:156            'inF1' ( in 2-component vector of float)
 0:157      Sequence
 0:157        move second child to first child ( temp 2-component vector of float)
-0:157          'r053' ( temp 2-component vector of float)
-0:157          refract ( temp 2-component vector of float)
+0:157          'r052' ( temp 2-component vector of float)
+0:157          reflect ( temp 2-component vector of float)
 0:157            'inF0' ( in 2-component vector of float)
 0:157            'inF1' ( in 2-component vector of float)
-0:157            Constant:
-0:157              2.000000
 0:158      Sequence
-0:158        move second child to first child ( temp 2-component vector of uint)
-0:158          'r054' ( temp 2-component vector of uint)
+0:158        move second child to first child ( temp 2-component vector of float)
+0:158          'r053' ( temp 2-component vector of float)
+0:158          refract ( temp 2-component vector of float)
+0:158            'inF0' ( in 2-component vector of float)
+0:158            'inF1' ( in 2-component vector of float)
+0:158            Constant:
+0:158              2.000000
+0:159      Sequence
+0:159        move second child to first child ( temp 2-component vector of uint)
+0:159          'r054' ( temp 2-component vector of uint)
 0:?           bitFieldReverse ( temp 2-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
-0:159      Sequence
-0:159        move second child to first child ( temp 2-component vector of float)
-0:159          'r055' ( temp 2-component vector of float)
-0:159          roundEven ( temp 2-component vector of float)
-0:159            'inF0' ( in 2-component vector of float)
 0:160      Sequence
 0:160        move second child to first child ( temp 2-component vector of float)
-0:160          'r056' ( temp 2-component vector of float)
-0:160          inverse sqrt ( temp 2-component vector of float)
+0:160          'r055' ( temp 2-component vector of float)
+0:160          roundEven ( temp 2-component vector of float)
 0:160            'inF0' ( in 2-component vector of float)
 0:161      Sequence
 0:161        move second child to first child ( temp 2-component vector of float)
-0:161          'r057' ( temp 2-component vector of float)
-0:161          clamp ( temp 2-component vector of float)
+0:161          'r056' ( temp 2-component vector of float)
+0:161          inverse sqrt ( temp 2-component vector of float)
 0:161            'inF0' ( in 2-component vector of float)
-0:161            Constant:
-0:161              0.000000
-0:161            Constant:
-0:161              1.000000
 0:162      Sequence
 0:162        move second child to first child ( temp 2-component vector of float)
-0:162          'r058' ( temp 2-component vector of float)
-0:162          Sign ( temp 2-component vector of float)
+0:162          'r057' ( temp 2-component vector of float)
+0:162          clamp ( temp 2-component vector of float)
 0:162            'inF0' ( in 2-component vector of float)
+0:162            Constant:
+0:162              0.000000
+0:162            Constant:
+0:162              1.000000
 0:163      Sequence
 0:163        move second child to first child ( temp 2-component vector of float)
-0:163          'r059' ( temp 2-component vector of float)
-0:163          sine ( temp 2-component vector of float)
+0:163          'r058' ( temp 2-component vector of float)
+0:163          Sign ( temp 2-component vector of float)
 0:163            'inF0' ( in 2-component vector of float)
 0:164      Sequence
 0:164        move second child to first child ( temp 2-component vector of float)
-0:164          'inF1' ( in 2-component vector of float)
+0:164          'r059' ( temp 2-component vector of float)
 0:164          sine ( temp 2-component vector of float)
 0:164            'inF0' ( in 2-component vector of float)
-0:164        move second child to first child ( temp 2-component vector of float)
-0:164          'inF2' ( in 2-component vector of float)
-0:164          cosine ( temp 2-component vector of float)
-0:164            'inF0' ( in 2-component vector of float)
 0:165      Sequence
 0:165        move second child to first child ( temp 2-component vector of float)
-0:165          'r060' ( temp 2-component vector of float)
-0:165          hyp. sine ( temp 2-component vector of float)
+0:165          'inF1' ( in 2-component vector of float)
+0:165          sine ( temp 2-component vector of float)
+0:165            'inF0' ( in 2-component vector of float)
+0:165        move second child to first child ( temp 2-component vector of float)
+0:165          'inF2' ( in 2-component vector of float)
+0:165          cosine ( temp 2-component vector of float)
 0:165            'inF0' ( in 2-component vector of float)
 0:166      Sequence
 0:166        move second child to first child ( temp 2-component vector of float)
-0:166          'r061' ( temp 2-component vector of float)
-0:166          smoothstep ( temp 2-component vector of float)
+0:166          'r060' ( temp 2-component vector of float)
+0:166          hyp. sine ( temp 2-component vector of float)
 0:166            'inF0' ( in 2-component vector of float)
-0:166            'inF1' ( in 2-component vector of float)
-0:166            'inF2' ( in 2-component vector of float)
 0:167      Sequence
 0:167        move second child to first child ( temp 2-component vector of float)
-0:167          'r062' ( temp 2-component vector of float)
-0:167          sqrt ( temp 2-component vector of float)
+0:167          'r061' ( temp 2-component vector of float)
+0:167          smoothstep ( temp 2-component vector of float)
 0:167            'inF0' ( in 2-component vector of float)
+0:167            'inF1' ( in 2-component vector of float)
+0:167            'inF2' ( in 2-component vector of float)
 0:168      Sequence
 0:168        move second child to first child ( temp 2-component vector of float)
-0:168          'r063' ( temp 2-component vector of float)
-0:168          step ( temp 2-component vector of float)
+0:168          'r062' ( temp 2-component vector of float)
+0:168          sqrt ( temp 2-component vector of float)
 0:168            'inF0' ( in 2-component vector of float)
-0:168            'inF1' ( in 2-component vector of float)
 0:169      Sequence
 0:169        move second child to first child ( temp 2-component vector of float)
-0:169          'r064' ( temp 2-component vector of float)
-0:169          tangent ( temp 2-component vector of float)
+0:169          'r063' ( temp 2-component vector of float)
+0:169          step ( temp 2-component vector of float)
 0:169            'inF0' ( in 2-component vector of float)
+0:169            'inF1' ( in 2-component vector of float)
 0:170      Sequence
 0:170        move second child to first child ( temp 2-component vector of float)
-0:170          'r065' ( temp 2-component vector of float)
-0:170          hyp. tangent ( temp 2-component vector of float)
+0:170          'r064' ( temp 2-component vector of float)
+0:170          tangent ( temp 2-component vector of float)
 0:170            'inF0' ( in 2-component vector of float)
-0:172      Sequence
-0:172        move second child to first child ( temp 2-component vector of float)
-0:172          'r066' ( temp 2-component vector of float)
-0:172          trunc ( temp 2-component vector of float)
-0:172            'inF0' ( in 2-component vector of float)
-0:175      Branch: Return with expression
+0:171      Sequence
+0:171        move second child to first child ( temp 2-component vector of float)
+0:171          'r065' ( temp 2-component vector of float)
+0:171          hyp. tangent ( temp 2-component vector of float)
+0:171            'inF0' ( in 2-component vector of float)
+0:173      Sequence
+0:173        move second child to first child ( temp 2-component vector of float)
+0:173          'r066' ( temp 2-component vector of float)
+0:173          trunc ( temp 2-component vector of float)
+0:173            'inF0' ( in 2-component vector of float)
+0:176      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:179  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
-0:179    Function Parameters: 
-0:179      'inF0' ( in 3-component vector of float)
-0:179      'inF1' ( in 3-component vector of float)
-0:179      'inF2' ( in 3-component vector of float)
-0:179      'inU0' ( in 3-component vector of uint)
-0:179      'inU1' ( in 3-component vector of uint)
+0:180  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
+0:180    Function Parameters: 
+0:180      'inF0' ( in 3-component vector of float)
+0:180      'inF1' ( in 3-component vector of float)
+0:180      'inF2' ( in 3-component vector of float)
+0:180      'inU0' ( in 3-component vector of uint)
+0:180      'inU1' ( in 3-component vector of uint)
 0:?     Sequence
-0:182      Sequence
-0:182        move second child to first child ( temp bool)
-0:182          'r000' ( temp bool)
-0:182          all ( temp bool)
-0:182            Convert float to bool ( temp 3-component vector of bool)
-0:182              'inF0' ( in 3-component vector of float)
 0:183      Sequence
-0:183        move second child to first child ( temp 3-component vector of float)
-0:183          'r001' ( temp 3-component vector of float)
-0:183          Absolute value ( temp 3-component vector of float)
-0:183            'inF0' ( in 3-component vector of float)
+0:183        move second child to first child ( temp bool)
+0:183          'r000' ( temp bool)
+0:183          all ( temp bool)
+0:183            Convert float to bool ( temp 3-component vector of bool)
+0:183              'inF0' ( in 3-component vector of float)
 0:184      Sequence
 0:184        move second child to first child ( temp 3-component vector of float)
-0:184          'r002' ( temp 3-component vector of float)
-0:184          arc cosine ( temp 3-component vector of float)
+0:184          'r001' ( temp 3-component vector of float)
+0:184          Absolute value ( temp 3-component vector of float)
 0:184            'inF0' ( in 3-component vector of float)
 0:185      Sequence
-0:185        move second child to first child ( temp bool)
-0:185          'r003' ( temp bool)
-0:185          any ( temp bool)
-0:185            Convert float to bool ( temp 3-component vector of bool)
-0:185              'inF0' ( in 3-component vector of float)
+0:185        move second child to first child ( temp 3-component vector of float)
+0:185          'r002' ( temp 3-component vector of float)
+0:185          arc cosine ( temp 3-component vector of float)
+0:185            'inF0' ( in 3-component vector of float)
 0:186      Sequence
-0:186        move second child to first child ( temp 3-component vector of float)
-0:186          'r004' ( temp 3-component vector of float)
-0:186          arc sine ( temp 3-component vector of float)
-0:186            'inF0' ( in 3-component vector of float)
+0:186        move second child to first child ( temp bool)
+0:186          'r003' ( temp bool)
+0:186          any ( temp bool)
+0:186            Convert float to bool ( temp 3-component vector of bool)
+0:186              'inF0' ( in 3-component vector of float)
 0:187      Sequence
-0:187        move second child to first child ( temp 3-component vector of int)
-0:187          'r005' ( temp 3-component vector of int)
-0:187          floatBitsToInt ( temp 3-component vector of int)
+0:187        move second child to first child ( temp 3-component vector of float)
+0:187          'r004' ( temp 3-component vector of float)
+0:187          arc sine ( temp 3-component vector of float)
 0:187            'inF0' ( in 3-component vector of float)
 0:188      Sequence
-0:188        move second child to first child ( temp 3-component vector of uint)
-0:188          'r006' ( temp 3-component vector of uint)
-0:188          floatBitsToUint ( temp 3-component vector of uint)
+0:188        move second child to first child ( temp 3-component vector of int)
+0:188          'r005' ( temp 3-component vector of int)
+0:188          floatBitsToInt ( temp 3-component vector of int)
 0:188            'inF0' ( in 3-component vector of float)
 0:189      Sequence
-0:189        move second child to first child ( temp 3-component vector of float)
-0:189          'r007' ( temp 3-component vector of float)
-0:189          intBitsToFloat ( temp 3-component vector of float)
-0:189            'inU0' ( in 3-component vector of uint)
-0:191      Sequence
-0:191        move second child to first child ( temp 3-component vector of float)
-0:191          'r009' ( temp 3-component vector of float)
-0:191          arc tangent ( temp 3-component vector of float)
-0:191            'inF0' ( in 3-component vector of float)
+0:189        move second child to first child ( temp 3-component vector of uint)
+0:189          'r006' ( temp 3-component vector of uint)
+0:189          floatBitsToUint ( temp 3-component vector of uint)
+0:189            'inF0' ( in 3-component vector of float)
+0:190      Sequence
+0:190        move second child to first child ( temp 3-component vector of float)
+0:190          'r007' ( temp 3-component vector of float)
+0:190          intBitsToFloat ( temp 3-component vector of float)
+0:190            'inU0' ( in 3-component vector of uint)
 0:192      Sequence
 0:192        move second child to first child ( temp 3-component vector of float)
-0:192          'r010' ( temp 3-component vector of float)
+0:192          'r009' ( temp 3-component vector of float)
 0:192          arc tangent ( temp 3-component vector of float)
 0:192            'inF0' ( in 3-component vector of float)
-0:192            'inF1' ( in 3-component vector of float)
 0:193      Sequence
 0:193        move second child to first child ( temp 3-component vector of float)
-0:193          'r011' ( temp 3-component vector of float)
-0:193          Ceiling ( temp 3-component vector of float)
+0:193          'r010' ( temp 3-component vector of float)
+0:193          arc tangent ( temp 3-component vector of float)
 0:193            'inF0' ( in 3-component vector of float)
+0:193            'inF1' ( in 3-component vector of float)
 0:194      Sequence
 0:194        move second child to first child ( temp 3-component vector of float)
-0:194          'r012' ( temp 3-component vector of float)
-0:194          clamp ( temp 3-component vector of float)
+0:194          'r011' ( temp 3-component vector of float)
+0:194          Ceiling ( temp 3-component vector of float)
 0:194            'inF0' ( in 3-component vector of float)
-0:194            'inF1' ( in 3-component vector of float)
-0:194            'inF2' ( in 3-component vector of float)
-0:195      Test condition and select ( temp void)
-0:195        Condition
-0:195        any ( temp bool)
-0:195          Compare Less Than ( temp 3-component vector of bool)
+0:195      Sequence
+0:195        move second child to first child ( temp 3-component vector of float)
+0:195          'r012' ( temp 3-component vector of float)
+0:195          clamp ( temp 3-component vector of float)
 0:195            'inF0' ( in 3-component vector of float)
-0:195            Constant:
-0:195              0.000000
-0:195              0.000000
-0:195              0.000000
-0:195        true case
-0:195        Branch: Kill
+0:195            'inF1' ( in 3-component vector of float)
+0:195            'inF2' ( in 3-component vector of float)
 0:196      Test condition and select ( temp void)
 0:196        Condition
 0:196        any ( temp bool)
 0:196          Compare Less Than ( temp 3-component vector of bool)
-0:196            'inU0' ( in 3-component vector of uint)
+0:196            'inF0' ( in 3-component vector of float)
 0:196            Constant:
 0:196              0.000000
 0:196              0.000000
 0:196              0.000000
 0:196        true case
 0:196        Branch: Kill
-0:197      Sequence
-0:197        move second child to first child ( temp 3-component vector of float)
-0:197          'r013' ( temp 3-component vector of float)
-0:197          cosine ( temp 3-component vector of float)
-0:197            'inF0' ( in 3-component vector of float)
+0:197      Test condition and select ( temp void)
+0:197        Condition
+0:197        any ( temp bool)
+0:197          Compare Less Than ( temp 3-component vector of bool)
+0:197            'inU0' ( in 3-component vector of uint)
+0:197            Constant:
+0:197              0.000000
+0:197              0.000000
+0:197              0.000000
+0:197        true case
+0:197        Branch: Kill
 0:198      Sequence
 0:198        move second child to first child ( temp 3-component vector of float)
-0:198          'r014' ( temp 3-component vector of float)
-0:198          hyp. cosine ( temp 3-component vector of float)
+0:198          'r013' ( temp 3-component vector of float)
+0:198          cosine ( temp 3-component vector of float)
 0:198            'inF0' ( in 3-component vector of float)
 0:199      Sequence
-0:199        move second child to first child ( temp 3-component vector of uint)
-0:199          'r015' ( temp 3-component vector of uint)
+0:199        move second child to first child ( temp 3-component vector of float)
+0:199          'r014' ( temp 3-component vector of float)
+0:199          hyp. cosine ( temp 3-component vector of float)
+0:199            'inF0' ( in 3-component vector of float)
+0:200      Sequence
+0:200        move second child to first child ( temp 3-component vector of uint)
+0:200          'r015' ( temp 3-component vector of uint)
 0:?           bitCount ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
-0:200      Sequence
-0:200        move second child to first child ( temp 3-component vector of float)
-0:200          'r016' ( temp 3-component vector of float)
-0:200          cross-product ( temp 3-component vector of float)
-0:200            'inF0' ( in 3-component vector of float)
-0:200            'inF1' ( in 3-component vector of float)
 0:201      Sequence
 0:201        move second child to first child ( temp 3-component vector of float)
-0:201          'r017' ( temp 3-component vector of float)
-0:201          dPdx ( temp 3-component vector of float)
+0:201          'r016' ( temp 3-component vector of float)
+0:201          cross-product ( temp 3-component vector of float)
 0:201            'inF0' ( in 3-component vector of float)
+0:201            'inF1' ( in 3-component vector of float)
 0:202      Sequence
 0:202        move second child to first child ( temp 3-component vector of float)
-0:202          'r018' ( temp 3-component vector of float)
-0:202          dPdxCoarse ( temp 3-component vector of float)
+0:202          'r017' ( temp 3-component vector of float)
+0:202          dPdx ( temp 3-component vector of float)
 0:202            'inF0' ( in 3-component vector of float)
 0:203      Sequence
 0:203        move second child to first child ( temp 3-component vector of float)
-0:203          'r019' ( temp 3-component vector of float)
-0:203          dPdxFine ( temp 3-component vector of float)
+0:203          'r018' ( temp 3-component vector of float)
+0:203          dPdxCoarse ( temp 3-component vector of float)
 0:203            'inF0' ( in 3-component vector of float)
 0:204      Sequence
 0:204        move second child to first child ( temp 3-component vector of float)
-0:204          'r020' ( temp 3-component vector of float)
-0:204          dPdy ( temp 3-component vector of float)
+0:204          'r019' ( temp 3-component vector of float)
+0:204          dPdxFine ( temp 3-component vector of float)
 0:204            'inF0' ( in 3-component vector of float)
 0:205      Sequence
 0:205        move second child to first child ( temp 3-component vector of float)
-0:205          'r021' ( temp 3-component vector of float)
-0:205          dPdyCoarse ( temp 3-component vector of float)
+0:205          'r020' ( temp 3-component vector of float)
+0:205          dPdy ( temp 3-component vector of float)
 0:205            'inF0' ( in 3-component vector of float)
 0:206      Sequence
 0:206        move second child to first child ( temp 3-component vector of float)
-0:206          'r022' ( temp 3-component vector of float)
-0:206          dPdyFine ( temp 3-component vector of float)
+0:206          'r021' ( temp 3-component vector of float)
+0:206          dPdyCoarse ( temp 3-component vector of float)
 0:206            'inF0' ( in 3-component vector of float)
 0:207      Sequence
 0:207        move second child to first child ( temp 3-component vector of float)
-0:207          'r023' ( temp 3-component vector of float)
-0:207          degrees ( temp 3-component vector of float)
+0:207          'r022' ( temp 3-component vector of float)
+0:207          dPdyFine ( temp 3-component vector of float)
 0:207            'inF0' ( in 3-component vector of float)
 0:208      Sequence
-0:208        move second child to first child ( temp float)
-0:208          'r024' ( temp float)
-0:208          distance ( temp float)
+0:208        move second child to first child ( temp 3-component vector of float)
+0:208          'r023' ( temp 3-component vector of float)
+0:208          degrees ( temp 3-component vector of float)
 0:208            'inF0' ( in 3-component vector of float)
-0:208            'inF1' ( in 3-component vector of float)
 0:209      Sequence
 0:209        move second child to first child ( temp float)
-0:209          'r025' ( temp float)
-0:209          dot-product ( temp float)
+0:209          'r024' ( temp float)
+0:209          distance ( temp float)
 0:209            'inF0' ( in 3-component vector of float)
 0:209            'inF1' ( in 3-component vector of float)
-0:213      Sequence
-0:213        move second child to first child ( temp 3-component vector of float)
-0:213          'r029' ( temp 3-component vector of float)
-0:213          exp ( temp 3-component vector of float)
-0:213            'inF0' ( in 3-component vector of float)
+0:210      Sequence
+0:210        move second child to first child ( temp float)
+0:210          'r025' ( temp float)
+0:210          dot-product ( temp float)
+0:210            'inF0' ( in 3-component vector of float)
+0:210            'inF1' ( in 3-component vector of float)
 0:214      Sequence
 0:214        move second child to first child ( temp 3-component vector of float)
-0:214          'r030' ( temp 3-component vector of float)
-0:214          exp2 ( temp 3-component vector of float)
+0:214          'r029' ( temp 3-component vector of float)
+0:214          exp ( temp 3-component vector of float)
 0:214            'inF0' ( in 3-component vector of float)
 0:215      Sequence
 0:215        move second child to first child ( temp 3-component vector of float)
-0:215          'r031' ( temp 3-component vector of float)
-0:215          face-forward ( temp 3-component vector of float)
+0:215          'r030' ( temp 3-component vector of float)
+0:215          exp2 ( temp 3-component vector of float)
 0:215            'inF0' ( in 3-component vector of float)
-0:215            'inF1' ( in 3-component vector of float)
-0:215            'inF2' ( in 3-component vector of float)
 0:216      Sequence
-0:216        move second child to first child ( temp 3-component vector of uint)
-0:216          'r032' ( temp 3-component vector of uint)
+0:216        move second child to first child ( temp 3-component vector of float)
+0:216          'r031' ( temp 3-component vector of float)
+0:216          face-forward ( temp 3-component vector of float)
+0:216            'inF0' ( in 3-component vector of float)
+0:216            'inF1' ( in 3-component vector of float)
+0:216            'inF2' ( in 3-component vector of float)
+0:217      Sequence
+0:217        move second child to first child ( temp 3-component vector of uint)
+0:217          'r032' ( temp 3-component vector of uint)
 0:?           findMSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:217      Sequence
-0:217        move second child to first child ( temp 3-component vector of uint)
-0:217          'r033' ( temp 3-component vector of uint)
+0:218      Sequence
+0:218        move second child to first child ( temp 3-component vector of uint)
+0:218          'r033' ( temp 3-component vector of uint)
 0:?           findLSB ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:218      Sequence
-0:218        move second child to first child ( temp 3-component vector of float)
-0:218          'r034' ( temp 3-component vector of float)
-0:218          Floor ( temp 3-component vector of float)
-0:218            'inF0' ( in 3-component vector of float)
-0:220      Sequence
-0:220        move second child to first child ( temp 3-component vector of float)
-0:220          'r036' ( temp 3-component vector of float)
-0:220          mod ( temp 3-component vector of float)
-0:220            'inF0' ( in 3-component vector of float)
-0:220            'inF1' ( in 3-component vector of float)
+0:219      Sequence
+0:219        move second child to first child ( temp 3-component vector of float)
+0:219          'r034' ( temp 3-component vector of float)
+0:219          Floor ( temp 3-component vector of float)
+0:219            'inF0' ( in 3-component vector of float)
 0:221      Sequence
 0:221        move second child to first child ( temp 3-component vector of float)
-0:221          'r037' ( temp 3-component vector of float)
-0:221          Fraction ( temp 3-component vector of float)
+0:221          'r036' ( temp 3-component vector of float)
+0:221          mod ( temp 3-component vector of float)
 0:221            'inF0' ( in 3-component vector of float)
+0:221            'inF1' ( in 3-component vector of float)
 0:222      Sequence
 0:222        move second child to first child ( temp 3-component vector of float)
-0:222          'r039' ( temp 3-component vector of float)
-0:222          fwidth ( temp 3-component vector of float)
+0:222          'r037' ( temp 3-component vector of float)
+0:222          Fraction ( temp 3-component vector of float)
 0:222            'inF0' ( in 3-component vector of float)
 0:223      Sequence
-0:223        move second child to first child ( temp 3-component vector of bool)
-0:223          'r040' ( temp 3-component vector of bool)
-0:223          isinf ( temp 3-component vector of bool)
+0:223        move second child to first child ( temp 3-component vector of float)
+0:223          'r039' ( temp 3-component vector of float)
+0:223          fwidth ( temp 3-component vector of float)
 0:223            'inF0' ( in 3-component vector of float)
 0:224      Sequence
 0:224        move second child to first child ( temp 3-component vector of bool)
-0:224          'r041' ( temp 3-component vector of bool)
-0:224          isnan ( temp 3-component vector of bool)
+0:224          'r040' ( temp 3-component vector of bool)
+0:224          isinf ( temp 3-component vector of bool)
 0:224            'inF0' ( in 3-component vector of float)
 0:225      Sequence
-0:225        move second child to first child ( temp 3-component vector of float)
-0:225          'r042' ( temp 3-component vector of float)
-0:225          ldexp ( temp 3-component vector of float)
+0:225        move second child to first child ( temp 3-component vector of bool)
+0:225          'r041' ( temp 3-component vector of bool)
+0:225          isnan ( temp 3-component vector of bool)
 0:225            'inF0' ( in 3-component vector of float)
-0:225            'inF1' ( in 3-component vector of float)
 0:226      Sequence
 0:226        move second child to first child ( temp 3-component vector of float)
-0:226          'r039a' ( temp 3-component vector of float)
-0:226          mix ( temp 3-component vector of float)
+0:226          'r042' ( temp 3-component vector of float)
+0:226          ldexp ( temp 3-component vector of float)
 0:226            'inF0' ( in 3-component vector of float)
 0:226            'inF1' ( in 3-component vector of float)
-0:226            'inF2' ( in 3-component vector of float)
 0:227      Sequence
 0:227        move second child to first child ( temp 3-component vector of float)
-0:227          'r039b' ( temp 3-component vector of float)
+0:227          'r039a' ( temp 3-component vector of float)
 0:227          mix ( temp 3-component vector of float)
 0:227            'inF0' ( in 3-component vector of float)
 0:227            'inF1' ( in 3-component vector of float)
-0:227            Constant:
-0:227              0.300000
+0:227            'inF2' ( in 3-component vector of float)
 0:228      Sequence
-0:228        move second child to first child ( temp float)
-0:228          'r043' ( temp float)
-0:228          length ( temp float)
+0:228        move second child to first child ( temp 3-component vector of float)
+0:228          'r039b' ( temp 3-component vector of float)
+0:228          mix ( temp 3-component vector of float)
 0:228            'inF0' ( in 3-component vector of float)
+0:228            'inF1' ( in 3-component vector of float)
+0:228            Constant:
+0:228              0.300000
 0:229      Sequence
-0:229        move second child to first child ( temp 3-component vector of float)
-0:229          'r044' ( temp 3-component vector of float)
-0:229          log ( temp 3-component vector of float)
+0:229        move second child to first child ( temp float)
+0:229          'r043' ( temp float)
+0:229          length ( temp float)
 0:229            'inF0' ( in 3-component vector of float)
 0:230      Sequence
 0:230        move second child to first child ( temp 3-component vector of float)
-0:230          'r045' ( temp 3-component vector of float)
-0:230          vector-scale ( temp 3-component vector of float)
-0:230            log2 ( temp 3-component vector of float)
-0:230              'inF0' ( in 3-component vector of float)
-0:230            Constant:
-0:230              0.301030
+0:230          'r044' ( temp 3-component vector of float)
+0:230          log ( temp 3-component vector of float)
+0:230            'inF0' ( in 3-component vector of float)
 0:231      Sequence
 0:231        move second child to first child ( temp 3-component vector of float)
-0:231          'r046' ( temp 3-component vector of float)
-0:231          log2 ( temp 3-component vector of float)
-0:231            'inF0' ( in 3-component vector of float)
+0:231          'r045' ( temp 3-component vector of float)
+0:231          vector-scale ( temp 3-component vector of float)
+0:231            log2 ( temp 3-component vector of float)
+0:231              'inF0' ( in 3-component vector of float)
+0:231            Constant:
+0:231              0.301030
 0:232      Sequence
 0:232        move second child to first child ( temp 3-component vector of float)
-0:232          'r047' ( temp 3-component vector of float)
-0:232          max ( temp 3-component vector of float)
+0:232          'r046' ( temp 3-component vector of float)
+0:232          log2 ( temp 3-component vector of float)
 0:232            'inF0' ( in 3-component vector of float)
-0:232            'inF1' ( in 3-component vector of float)
 0:233      Sequence
 0:233        move second child to first child ( temp 3-component vector of float)
-0:233          'r048' ( temp 3-component vector of float)
-0:233          min ( temp 3-component vector of float)
+0:233          'r047' ( temp 3-component vector of float)
+0:233          max ( temp 3-component vector of float)
 0:233            'inF0' ( in 3-component vector of float)
 0:233            'inF1' ( in 3-component vector of float)
 0:234      Sequence
 0:234        move second child to first child ( temp 3-component vector of float)
-0:234          'r049' ( temp 3-component vector of float)
-0:234          normalize ( temp 3-component vector of float)
+0:234          'r048' ( temp 3-component vector of float)
+0:234          min ( temp 3-component vector of float)
 0:234            'inF0' ( in 3-component vector of float)
+0:234            'inF1' ( in 3-component vector of float)
 0:235      Sequence
 0:235        move second child to first child ( temp 3-component vector of float)
-0:235          'r050' ( temp 3-component vector of float)
-0:235          pow ( temp 3-component vector of float)
+0:235          'r049' ( temp 3-component vector of float)
+0:235          normalize ( temp 3-component vector of float)
 0:235            'inF0' ( in 3-component vector of float)
-0:235            'inF1' ( in 3-component vector of float)
 0:236      Sequence
 0:236        move second child to first child ( temp 3-component vector of float)
-0:236          'r051' ( temp 3-component vector of float)
-0:236          radians ( temp 3-component vector of float)
+0:236          'r050' ( temp 3-component vector of float)
+0:236          pow ( temp 3-component vector of float)
 0:236            'inF0' ( in 3-component vector of float)
+0:236            'inF1' ( in 3-component vector of float)
 0:237      Sequence
 0:237        move second child to first child ( temp 3-component vector of float)
-0:237          'r052' ( temp 3-component vector of float)
-0:237          divide ( temp 3-component vector of float)
-0:237            Constant:
-0:237              1.000000
+0:237          'r051' ( temp 3-component vector of float)
+0:237          radians ( temp 3-component vector of float)
 0:237            'inF0' ( in 3-component vector of float)
 0:238      Sequence
 0:238        move second child to first child ( temp 3-component vector of float)
-0:238          'r053' ( temp 3-component vector of float)
-0:238          reflect ( temp 3-component vector of float)
+0:238          'r052' ( temp 3-component vector of float)
+0:238          divide ( temp 3-component vector of float)
+0:238            Constant:
+0:238              1.000000
 0:238            'inF0' ( in 3-component vector of float)
-0:238            'inF1' ( in 3-component vector of float)
 0:239      Sequence
 0:239        move second child to first child ( temp 3-component vector of float)
-0:239          'r054' ( temp 3-component vector of float)
-0:239          refract ( temp 3-component vector of float)
+0:239          'r053' ( temp 3-component vector of float)
+0:239          reflect ( temp 3-component vector of float)
 0:239            'inF0' ( in 3-component vector of float)
 0:239            'inF1' ( in 3-component vector of float)
-0:239            Constant:
-0:239              2.000000
 0:240      Sequence
-0:240        move second child to first child ( temp 3-component vector of uint)
-0:240          'r055' ( temp 3-component vector of uint)
+0:240        move second child to first child ( temp 3-component vector of float)
+0:240          'r054' ( temp 3-component vector of float)
+0:240          refract ( temp 3-component vector of float)
+0:240            'inF0' ( in 3-component vector of float)
+0:240            'inF1' ( in 3-component vector of float)
+0:240            Constant:
+0:240              2.000000
+0:241      Sequence
+0:241        move second child to first child ( temp 3-component vector of uint)
+0:241          'r055' ( temp 3-component vector of uint)
 0:?           bitFieldReverse ( temp 3-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
-0:241      Sequence
-0:241        move second child to first child ( temp 3-component vector of float)
-0:241          'r056' ( temp 3-component vector of float)
-0:241          roundEven ( temp 3-component vector of float)
-0:241            'inF0' ( in 3-component vector of float)
 0:242      Sequence
 0:242        move second child to first child ( temp 3-component vector of float)
-0:242          'r057' ( temp 3-component vector of float)
-0:242          inverse sqrt ( temp 3-component vector of float)
+0:242          'r056' ( temp 3-component vector of float)
+0:242          roundEven ( temp 3-component vector of float)
 0:242            'inF0' ( in 3-component vector of float)
 0:243      Sequence
 0:243        move second child to first child ( temp 3-component vector of float)
-0:243          'r058' ( temp 3-component vector of float)
-0:243          clamp ( temp 3-component vector of float)
+0:243          'r057' ( temp 3-component vector of float)
+0:243          inverse sqrt ( temp 3-component vector of float)
 0:243            'inF0' ( in 3-component vector of float)
-0:243            Constant:
-0:243              0.000000
-0:243            Constant:
-0:243              1.000000
 0:244      Sequence
 0:244        move second child to first child ( temp 3-component vector of float)
-0:244          'r059' ( temp 3-component vector of float)
-0:244          Sign ( temp 3-component vector of float)
+0:244          'r058' ( temp 3-component vector of float)
+0:244          clamp ( temp 3-component vector of float)
 0:244            'inF0' ( in 3-component vector of float)
+0:244            Constant:
+0:244              0.000000
+0:244            Constant:
+0:244              1.000000
 0:245      Sequence
 0:245        move second child to first child ( temp 3-component vector of float)
-0:245          'r060' ( temp 3-component vector of float)
-0:245          sine ( temp 3-component vector of float)
+0:245          'r059' ( temp 3-component vector of float)
+0:245          Sign ( temp 3-component vector of float)
 0:245            'inF0' ( in 3-component vector of float)
 0:246      Sequence
 0:246        move second child to first child ( temp 3-component vector of float)
-0:246          'inF1' ( in 3-component vector of float)
+0:246          'r060' ( temp 3-component vector of float)
 0:246          sine ( temp 3-component vector of float)
 0:246            'inF0' ( in 3-component vector of float)
-0:246        move second child to first child ( temp 3-component vector of float)
-0:246          'inF2' ( in 3-component vector of float)
-0:246          cosine ( temp 3-component vector of float)
-0:246            'inF0' ( in 3-component vector of float)
 0:247      Sequence
 0:247        move second child to first child ( temp 3-component vector of float)
-0:247          'r061' ( temp 3-component vector of float)
-0:247          hyp. sine ( temp 3-component vector of float)
+0:247          'inF1' ( in 3-component vector of float)
+0:247          sine ( temp 3-component vector of float)
+0:247            'inF0' ( in 3-component vector of float)
+0:247        move second child to first child ( temp 3-component vector of float)
+0:247          'inF2' ( in 3-component vector of float)
+0:247          cosine ( temp 3-component vector of float)
 0:247            'inF0' ( in 3-component vector of float)
 0:248      Sequence
 0:248        move second child to first child ( temp 3-component vector of float)
-0:248          'r062' ( temp 3-component vector of float)
-0:248          smoothstep ( temp 3-component vector of float)
+0:248          'r061' ( temp 3-component vector of float)
+0:248          hyp. sine ( temp 3-component vector of float)
 0:248            'inF0' ( in 3-component vector of float)
-0:248            'inF1' ( in 3-component vector of float)
-0:248            'inF2' ( in 3-component vector of float)
 0:249      Sequence
 0:249        move second child to first child ( temp 3-component vector of float)
-0:249          'r063' ( temp 3-component vector of float)
-0:249          sqrt ( temp 3-component vector of float)
+0:249          'r062' ( temp 3-component vector of float)
+0:249          smoothstep ( temp 3-component vector of float)
 0:249            'inF0' ( in 3-component vector of float)
+0:249            'inF1' ( in 3-component vector of float)
+0:249            'inF2' ( in 3-component vector of float)
 0:250      Sequence
 0:250        move second child to first child ( temp 3-component vector of float)
-0:250          'r064' ( temp 3-component vector of float)
-0:250          step ( temp 3-component vector of float)
+0:250          'r063' ( temp 3-component vector of float)
+0:250          sqrt ( temp 3-component vector of float)
 0:250            'inF0' ( in 3-component vector of float)
-0:250            'inF1' ( in 3-component vector of float)
 0:251      Sequence
 0:251        move second child to first child ( temp 3-component vector of float)
-0:251          'r065' ( temp 3-component vector of float)
-0:251          tangent ( temp 3-component vector of float)
+0:251          'r064' ( temp 3-component vector of float)
+0:251          step ( temp 3-component vector of float)
 0:251            'inF0' ( in 3-component vector of float)
+0:251            'inF1' ( in 3-component vector of float)
 0:252      Sequence
 0:252        move second child to first child ( temp 3-component vector of float)
-0:252          'r066' ( temp 3-component vector of float)
-0:252          hyp. tangent ( temp 3-component vector of float)
+0:252          'r065' ( temp 3-component vector of float)
+0:252          tangent ( temp 3-component vector of float)
 0:252            'inF0' ( in 3-component vector of float)
-0:254      Sequence
-0:254        move second child to first child ( temp 3-component vector of float)
-0:254          'r067' ( temp 3-component vector of float)
-0:254          trunc ( temp 3-component vector of float)
-0:254            'inF0' ( in 3-component vector of float)
-0:257      Branch: Return with expression
+0:253      Sequence
+0:253        move second child to first child ( temp 3-component vector of float)
+0:253          'r066' ( temp 3-component vector of float)
+0:253          hyp. tangent ( temp 3-component vector of float)
+0:253            'inF0' ( in 3-component vector of float)
+0:255      Sequence
+0:255        move second child to first child ( temp 3-component vector of float)
+0:255          'r067' ( temp 3-component vector of float)
+0:255          trunc ( temp 3-component vector of float)
+0:255            'inF0' ( in 3-component vector of float)
+0:258      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:261  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
-0:261    Function Parameters: 
-0:261      'inF0' ( in 4-component vector of float)
-0:261      'inF1' ( in 4-component vector of float)
-0:261      'inF2' ( in 4-component vector of float)
-0:261      'inU0' ( in 4-component vector of uint)
-0:261      'inU1' ( in 4-component vector of uint)
+0:262  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:262    Function Parameters: 
+0:262      'inF0' ( in 4-component vector of float)
+0:262      'inF1' ( in 4-component vector of float)
+0:262      'inF2' ( in 4-component vector of float)
+0:262      'inU0' ( in 4-component vector of uint)
+0:262      'inU1' ( in 4-component vector of uint)
 0:?     Sequence
-0:264      Sequence
-0:264        move second child to first child ( temp bool)
-0:264          'r000' ( temp bool)
-0:264          all ( temp bool)
-0:264            Convert float to bool ( temp 4-component vector of bool)
-0:264              'inF0' ( in 4-component vector of float)
 0:265      Sequence
-0:265        move second child to first child ( temp 4-component vector of float)
-0:265          'r001' ( temp 4-component vector of float)
-0:265          Absolute value ( temp 4-component vector of float)
-0:265            'inF0' ( in 4-component vector of float)
+0:265        move second child to first child ( temp bool)
+0:265          'r000' ( temp bool)
+0:265          all ( temp bool)
+0:265            Convert float to bool ( temp 4-component vector of bool)
+0:265              'inF0' ( in 4-component vector of float)
 0:266      Sequence
 0:266        move second child to first child ( temp 4-component vector of float)
-0:266          'r002' ( temp 4-component vector of float)
-0:266          arc cosine ( temp 4-component vector of float)
+0:266          'r001' ( temp 4-component vector of float)
+0:266          Absolute value ( temp 4-component vector of float)
 0:266            'inF0' ( in 4-component vector of float)
 0:267      Sequence
-0:267        move second child to first child ( temp bool)
-0:267          'r003' ( temp bool)
-0:267          any ( temp bool)
-0:267            Convert float to bool ( temp 4-component vector of bool)
-0:267              'inF0' ( in 4-component vector of float)
+0:267        move second child to first child ( temp 4-component vector of float)
+0:267          'r002' ( temp 4-component vector of float)
+0:267          arc cosine ( temp 4-component vector of float)
+0:267            'inF0' ( in 4-component vector of float)
 0:268      Sequence
-0:268        move second child to first child ( temp 4-component vector of float)
-0:268          'r004' ( temp 4-component vector of float)
-0:268          arc sine ( temp 4-component vector of float)
-0:268            'inF0' ( in 4-component vector of float)
+0:268        move second child to first child ( temp bool)
+0:268          'r003' ( temp bool)
+0:268          any ( temp bool)
+0:268            Convert float to bool ( temp 4-component vector of bool)
+0:268              'inF0' ( in 4-component vector of float)
 0:269      Sequence
-0:269        move second child to first child ( temp 4-component vector of int)
-0:269          'r005' ( temp 4-component vector of int)
-0:269          floatBitsToInt ( temp 4-component vector of int)
+0:269        move second child to first child ( temp 4-component vector of float)
+0:269          'r004' ( temp 4-component vector of float)
+0:269          arc sine ( temp 4-component vector of float)
 0:269            'inF0' ( in 4-component vector of float)
 0:270      Sequence
-0:270        move second child to first child ( temp 4-component vector of uint)
-0:270          'r006' ( temp 4-component vector of uint)
-0:270          floatBitsToUint ( temp 4-component vector of uint)
+0:270        move second child to first child ( temp 4-component vector of int)
+0:270          'r005' ( temp 4-component vector of int)
+0:270          floatBitsToInt ( temp 4-component vector of int)
 0:270            'inF0' ( in 4-component vector of float)
 0:271      Sequence
-0:271        move second child to first child ( temp 4-component vector of float)
-0:271          'r007' ( temp 4-component vector of float)
-0:271          intBitsToFloat ( temp 4-component vector of float)
-0:271            'inU0' ( in 4-component vector of uint)
-0:273      Sequence
-0:273        move second child to first child ( temp 4-component vector of float)
-0:273          'r009' ( temp 4-component vector of float)
-0:273          arc tangent ( temp 4-component vector of float)
-0:273            'inF0' ( in 4-component vector of float)
+0:271        move second child to first child ( temp 4-component vector of uint)
+0:271          'r006' ( temp 4-component vector of uint)
+0:271          floatBitsToUint ( temp 4-component vector of uint)
+0:271            'inF0' ( in 4-component vector of float)
+0:272      Sequence
+0:272        move second child to first child ( temp 4-component vector of float)
+0:272          'r007' ( temp 4-component vector of float)
+0:272          intBitsToFloat ( temp 4-component vector of float)
+0:272            'inU0' ( in 4-component vector of uint)
 0:274      Sequence
 0:274        move second child to first child ( temp 4-component vector of float)
-0:274          'r010' ( temp 4-component vector of float)
+0:274          'r009' ( temp 4-component vector of float)
 0:274          arc tangent ( temp 4-component vector of float)
 0:274            'inF0' ( in 4-component vector of float)
-0:274            'inF1' ( in 4-component vector of float)
 0:275      Sequence
 0:275        move second child to first child ( temp 4-component vector of float)
-0:275          'r011' ( temp 4-component vector of float)
-0:275          Ceiling ( temp 4-component vector of float)
+0:275          'r010' ( temp 4-component vector of float)
+0:275          arc tangent ( temp 4-component vector of float)
 0:275            'inF0' ( in 4-component vector of float)
+0:275            'inF1' ( in 4-component vector of float)
 0:276      Sequence
 0:276        move second child to first child ( temp 4-component vector of float)
-0:276          'r012' ( temp 4-component vector of float)
-0:276          clamp ( temp 4-component vector of float)
+0:276          'r011' ( temp 4-component vector of float)
+0:276          Ceiling ( temp 4-component vector of float)
 0:276            'inF0' ( in 4-component vector of float)
-0:276            'inF1' ( in 4-component vector of float)
-0:276            'inF2' ( in 4-component vector of float)
-0:277      Test condition and select ( temp void)
-0:277        Condition
-0:277        any ( temp bool)
-0:277          Compare Less Than ( temp 4-component vector of bool)
+0:277      Sequence
+0:277        move second child to first child ( temp 4-component vector of float)
+0:277          'r012' ( temp 4-component vector of float)
+0:277          clamp ( temp 4-component vector of float)
 0:277            'inF0' ( in 4-component vector of float)
-0:277            Constant:
-0:277              0.000000
-0:277              0.000000
-0:277              0.000000
-0:277              0.000000
-0:277        true case
-0:277        Branch: Kill
+0:277            'inF1' ( in 4-component vector of float)
+0:277            'inF2' ( in 4-component vector of float)
 0:278      Test condition and select ( temp void)
 0:278        Condition
 0:278        any ( temp bool)
 0:278          Compare Less Than ( temp 4-component vector of bool)
-0:278            'inU0' ( in 4-component vector of uint)
+0:278            'inF0' ( in 4-component vector of float)
 0:278            Constant:
 0:278              0.000000
 0:278              0.000000
@@ -4083,905 +4085,917 @@
 0:278              0.000000
 0:278        true case
 0:278        Branch: Kill
-0:279      Sequence
-0:279        move second child to first child ( temp 4-component vector of float)
-0:279          'r013' ( temp 4-component vector of float)
-0:279          cosine ( temp 4-component vector of float)
-0:279            'inF0' ( in 4-component vector of float)
+0:279      Test condition and select ( temp void)
+0:279        Condition
+0:279        any ( temp bool)
+0:279          Compare Less Than ( temp 4-component vector of bool)
+0:279            'inU0' ( in 4-component vector of uint)
+0:279            Constant:
+0:279              0.000000
+0:279              0.000000
+0:279              0.000000
+0:279              0.000000
+0:279        true case
+0:279        Branch: Kill
 0:280      Sequence
 0:280        move second child to first child ( temp 4-component vector of float)
-0:280          'r014' ( temp 4-component vector of float)
-0:280          hyp. cosine ( temp 4-component vector of float)
+0:280          'r013' ( temp 4-component vector of float)
+0:280          cosine ( temp 4-component vector of float)
 0:280            'inF0' ( in 4-component vector of float)
 0:281      Sequence
-0:281        move second child to first child ( temp 4-component vector of uint)
-0:281          'r015' ( temp 4-component vector of uint)
+0:281        move second child to first child ( temp 4-component vector of float)
+0:281          'r014' ( temp 4-component vector of float)
+0:281          hyp. cosine ( temp 4-component vector of float)
+0:281            'inF0' ( in 4-component vector of float)
+0:282      Sequence
+0:282        move second child to first child ( temp 4-component vector of uint)
+0:282          'r015' ( temp 4-component vector of uint)
 0:?           bitCount ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               3 (const uint)
 0:?               5 (const uint)
 0:?               2 (const uint)
-0:282      Sequence
-0:282        move second child to first child ( temp 4-component vector of float)
-0:282          'r016' ( temp 4-component vector of float)
-0:282          dPdx ( temp 4-component vector of float)
-0:282            'inF0' ( in 4-component vector of float)
 0:283      Sequence
 0:283        move second child to first child ( temp 4-component vector of float)
-0:283          'r017' ( temp 4-component vector of float)
-0:283          dPdxCoarse ( temp 4-component vector of float)
+0:283          'r016' ( temp 4-component vector of float)
+0:283          dPdx ( temp 4-component vector of float)
 0:283            'inF0' ( in 4-component vector of float)
 0:284      Sequence
 0:284        move second child to first child ( temp 4-component vector of float)
-0:284          'r018' ( temp 4-component vector of float)
-0:284          dPdxFine ( temp 4-component vector of float)
+0:284          'r017' ( temp 4-component vector of float)
+0:284          dPdxCoarse ( temp 4-component vector of float)
 0:284            'inF0' ( in 4-component vector of float)
 0:285      Sequence
 0:285        move second child to first child ( temp 4-component vector of float)
-0:285          'r019' ( temp 4-component vector of float)
-0:285          dPdy ( temp 4-component vector of float)
+0:285          'r018' ( temp 4-component vector of float)
+0:285          dPdxFine ( temp 4-component vector of float)
 0:285            'inF0' ( in 4-component vector of float)
 0:286      Sequence
 0:286        move second child to first child ( temp 4-component vector of float)
-0:286          'r020' ( temp 4-component vector of float)
-0:286          dPdyCoarse ( temp 4-component vector of float)
+0:286          'r019' ( temp 4-component vector of float)
+0:286          dPdy ( temp 4-component vector of float)
 0:286            'inF0' ( in 4-component vector of float)
 0:287      Sequence
 0:287        move second child to first child ( temp 4-component vector of float)
-0:287          'r021' ( temp 4-component vector of float)
-0:287          dPdyFine ( temp 4-component vector of float)
+0:287          'r020' ( temp 4-component vector of float)
+0:287          dPdyCoarse ( temp 4-component vector of float)
 0:287            'inF0' ( in 4-component vector of float)
 0:288      Sequence
 0:288        move second child to first child ( temp 4-component vector of float)
-0:288          'r022' ( temp 4-component vector of float)
-0:288          degrees ( temp 4-component vector of float)
+0:288          'r021' ( temp 4-component vector of float)
+0:288          dPdyFine ( temp 4-component vector of float)
 0:288            'inF0' ( in 4-component vector of float)
 0:289      Sequence
-0:289        move second child to first child ( temp float)
-0:289          'r023' ( temp float)
-0:289          distance ( temp float)
+0:289        move second child to first child ( temp 4-component vector of float)
+0:289          'r022' ( temp 4-component vector of float)
+0:289          degrees ( temp 4-component vector of float)
 0:289            'inF0' ( in 4-component vector of float)
-0:289            'inF1' ( in 4-component vector of float)
 0:290      Sequence
 0:290        move second child to first child ( temp float)
-0:290          'r024' ( temp float)
-0:290          dot-product ( temp float)
+0:290          'r023' ( temp float)
+0:290          distance ( temp float)
 0:290            'inF0' ( in 4-component vector of float)
 0:290            'inF1' ( in 4-component vector of float)
 0:291      Sequence
-0:291        move second child to first child ( temp 4-component vector of float)
-0:291          'r025' ( temp 4-component vector of float)
-0:291          Construct vec4 ( temp 4-component vector of float)
-0:291            Constant:
-0:291              1.000000
-0:291            component-wise multiply ( temp float)
-0:291              direct index ( temp float)
-0:291                'inF0' ( in 4-component vector of float)
-0:291                Constant:
-0:291                  1 (const int)
-0:291              direct index ( temp float)
-0:291                'inF1' ( in 4-component vector of float)
-0:291                Constant:
-0:291                  1 (const int)
-0:291            direct index ( temp float)
-0:291              'inF0' ( in 4-component vector of float)
-0:291              Constant:
-0:291                2 (const int)
-0:291            direct index ( temp float)
-0:291              'inF1' ( in 4-component vector of float)
-0:291              Constant:
-0:291                3 (const int)
-0:295      Sequence
-0:295        move second child to first child ( temp 4-component vector of float)
-0:295          'r029' ( temp 4-component vector of float)
-0:295          exp ( temp 4-component vector of float)
-0:295            'inF0' ( in 4-component vector of float)
+0:291        move second child to first child ( temp float)
+0:291          'r024' ( temp float)
+0:291          dot-product ( temp float)
+0:291            'inF0' ( in 4-component vector of float)
+0:291            'inF1' ( in 4-component vector of float)
+0:292      Sequence
+0:292        move second child to first child ( temp 4-component vector of float)
+0:292          'r025' ( temp 4-component vector of float)
+0:292          Construct vec4 ( temp 4-component vector of float)
+0:292            Constant:
+0:292              1.000000
+0:292            component-wise multiply ( temp float)
+0:292              direct index ( temp float)
+0:292                'inF0' ( in 4-component vector of float)
+0:292                Constant:
+0:292                  1 (const int)
+0:292              direct index ( temp float)
+0:292                'inF1' ( in 4-component vector of float)
+0:292                Constant:
+0:292                  1 (const int)
+0:292            direct index ( temp float)
+0:292              'inF0' ( in 4-component vector of float)
+0:292              Constant:
+0:292                2 (const int)
+0:292            direct index ( temp float)
+0:292              'inF1' ( in 4-component vector of float)
+0:292              Constant:
+0:292                3 (const int)
 0:296      Sequence
 0:296        move second child to first child ( temp 4-component vector of float)
-0:296          'r030' ( temp 4-component vector of float)
-0:296          exp2 ( temp 4-component vector of float)
+0:296          'r029' ( temp 4-component vector of float)
+0:296          exp ( temp 4-component vector of float)
 0:296            'inF0' ( in 4-component vector of float)
 0:297      Sequence
 0:297        move second child to first child ( temp 4-component vector of float)
-0:297          'r031' ( temp 4-component vector of float)
-0:297          face-forward ( temp 4-component vector of float)
+0:297          'r030' ( temp 4-component vector of float)
+0:297          exp2 ( temp 4-component vector of float)
 0:297            'inF0' ( in 4-component vector of float)
-0:297            'inF1' ( in 4-component vector of float)
-0:297            'inF2' ( in 4-component vector of float)
 0:298      Sequence
-0:298        move second child to first child ( temp 4-component vector of uint)
-0:298          'r032' ( temp 4-component vector of uint)
+0:298        move second child to first child ( temp 4-component vector of float)
+0:298          'r031' ( temp 4-component vector of float)
+0:298          face-forward ( temp 4-component vector of float)
+0:298            'inF0' ( in 4-component vector of float)
+0:298            'inF1' ( in 4-component vector of float)
+0:298            'inF2' ( in 4-component vector of float)
+0:299      Sequence
+0:299        move second child to first child ( temp 4-component vector of uint)
+0:299          'r032' ( temp 4-component vector of uint)
 0:?           findMSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:299      Sequence
-0:299        move second child to first child ( temp 4-component vector of uint)
-0:299          'r033' ( temp 4-component vector of uint)
+0:300      Sequence
+0:300        move second child to first child ( temp 4-component vector of uint)
+0:300          'r033' ( temp 4-component vector of uint)
 0:?           findLSB ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               7 (const uint)
 0:?               8 (const uint)
 0:?               9 (const uint)
 0:?               10 (const uint)
-0:300      Sequence
-0:300        move second child to first child ( temp 4-component vector of float)
-0:300          'r034' ( temp 4-component vector of float)
-0:300          Floor ( temp 4-component vector of float)
-0:300            'inF0' ( in 4-component vector of float)
-0:302      Sequence
-0:302        move second child to first child ( temp 4-component vector of float)
-0:302          'r036' ( temp 4-component vector of float)
-0:302          mod ( temp 4-component vector of float)
-0:302            'inF0' ( in 4-component vector of float)
-0:302            'inF1' ( in 4-component vector of float)
+0:301      Sequence
+0:301        move second child to first child ( temp 4-component vector of float)
+0:301          'r034' ( temp 4-component vector of float)
+0:301          Floor ( temp 4-component vector of float)
+0:301            'inF0' ( in 4-component vector of float)
 0:303      Sequence
 0:303        move second child to first child ( temp 4-component vector of float)
-0:303          'r037' ( temp 4-component vector of float)
-0:303          Fraction ( temp 4-component vector of float)
+0:303          'r036' ( temp 4-component vector of float)
+0:303          mod ( temp 4-component vector of float)
 0:303            'inF0' ( in 4-component vector of float)
+0:303            'inF1' ( in 4-component vector of float)
 0:304      Sequence
 0:304        move second child to first child ( temp 4-component vector of float)
-0:304          'r039' ( temp 4-component vector of float)
-0:304          fwidth ( temp 4-component vector of float)
+0:304          'r037' ( temp 4-component vector of float)
+0:304          Fraction ( temp 4-component vector of float)
 0:304            'inF0' ( in 4-component vector of float)
 0:305      Sequence
-0:305        move second child to first child ( temp 4-component vector of bool)
-0:305          'r040' ( temp 4-component vector of bool)
-0:305          isinf ( temp 4-component vector of bool)
+0:305        move second child to first child ( temp 4-component vector of float)
+0:305          'r039' ( temp 4-component vector of float)
+0:305          fwidth ( temp 4-component vector of float)
 0:305            'inF0' ( in 4-component vector of float)
 0:306      Sequence
 0:306        move second child to first child ( temp 4-component vector of bool)
-0:306          'r041' ( temp 4-component vector of bool)
-0:306          isnan ( temp 4-component vector of bool)
+0:306          'r040' ( temp 4-component vector of bool)
+0:306          isinf ( temp 4-component vector of bool)
 0:306            'inF0' ( in 4-component vector of float)
 0:307      Sequence
-0:307        move second child to first child ( temp 4-component vector of float)
-0:307          'r042' ( temp 4-component vector of float)
-0:307          ldexp ( temp 4-component vector of float)
+0:307        move second child to first child ( temp 4-component vector of bool)
+0:307          'r041' ( temp 4-component vector of bool)
+0:307          isnan ( temp 4-component vector of bool)
 0:307            'inF0' ( in 4-component vector of float)
-0:307            'inF1' ( in 4-component vector of float)
 0:308      Sequence
 0:308        move second child to first child ( temp 4-component vector of float)
-0:308          'r039a' ( temp 4-component vector of float)
-0:308          mix ( temp 4-component vector of float)
+0:308          'r042' ( temp 4-component vector of float)
+0:308          ldexp ( temp 4-component vector of float)
 0:308            'inF0' ( in 4-component vector of float)
 0:308            'inF1' ( in 4-component vector of float)
-0:308            'inF2' ( in 4-component vector of float)
 0:309      Sequence
-0:309        move second child to first child ( temp float)
-0:309          'r043' ( temp float)
-0:309          length ( temp float)
+0:309        move second child to first child ( temp 4-component vector of float)
+0:309          'r039a' ( temp 4-component vector of float)
+0:309          mix ( temp 4-component vector of float)
 0:309            'inF0' ( in 4-component vector of float)
+0:309            'inF1' ( in 4-component vector of float)
+0:309            'inF2' ( in 4-component vector of float)
 0:310      Sequence
-0:310        move second child to first child ( temp 4-component vector of float)
-0:310          'r044' ( temp 4-component vector of float)
-0:310          log ( temp 4-component vector of float)
+0:310        move second child to first child ( temp float)
+0:310          'r043' ( temp float)
+0:310          length ( temp float)
 0:310            'inF0' ( in 4-component vector of float)
 0:311      Sequence
 0:311        move second child to first child ( temp 4-component vector of float)
-0:311          'r045' ( temp 4-component vector of float)
-0:311          vector-scale ( temp 4-component vector of float)
-0:311            log2 ( temp 4-component vector of float)
-0:311              'inF0' ( in 4-component vector of float)
-0:311            Constant:
-0:311              0.301030
+0:311          'r044' ( temp 4-component vector of float)
+0:311          log ( temp 4-component vector of float)
+0:311            'inF0' ( in 4-component vector of float)
 0:312      Sequence
 0:312        move second child to first child ( temp 4-component vector of float)
-0:312          'r046' ( temp 4-component vector of float)
-0:312          log2 ( temp 4-component vector of float)
-0:312            'inF0' ( in 4-component vector of float)
+0:312          'r045' ( temp 4-component vector of float)
+0:312          vector-scale ( temp 4-component vector of float)
+0:312            log2 ( temp 4-component vector of float)
+0:312              'inF0' ( in 4-component vector of float)
+0:312            Constant:
+0:312              0.301030
 0:313      Sequence
 0:313        move second child to first child ( temp 4-component vector of float)
-0:313          'r047' ( temp 4-component vector of float)
-0:313          max ( temp 4-component vector of float)
+0:313          'r046' ( temp 4-component vector of float)
+0:313          log2 ( temp 4-component vector of float)
 0:313            'inF0' ( in 4-component vector of float)
-0:313            'inF1' ( in 4-component vector of float)
 0:314      Sequence
 0:314        move second child to first child ( temp 4-component vector of float)
-0:314          'r048' ( temp 4-component vector of float)
-0:314          min ( temp 4-component vector of float)
+0:314          'r047' ( temp 4-component vector of float)
+0:314          max ( temp 4-component vector of float)
 0:314            'inF0' ( in 4-component vector of float)
 0:314            'inF1' ( in 4-component vector of float)
 0:315      Sequence
 0:315        move second child to first child ( temp 4-component vector of float)
-0:315          'r049' ( temp 4-component vector of float)
-0:315          normalize ( temp 4-component vector of float)
+0:315          'r048' ( temp 4-component vector of float)
+0:315          min ( temp 4-component vector of float)
 0:315            'inF0' ( in 4-component vector of float)
+0:315            'inF1' ( in 4-component vector of float)
 0:316      Sequence
 0:316        move second child to first child ( temp 4-component vector of float)
-0:316          'r050' ( temp 4-component vector of float)
-0:316          pow ( temp 4-component vector of float)
+0:316          'r049' ( temp 4-component vector of float)
+0:316          normalize ( temp 4-component vector of float)
 0:316            'inF0' ( in 4-component vector of float)
-0:316            'inF1' ( in 4-component vector of float)
 0:317      Sequence
 0:317        move second child to first child ( temp 4-component vector of float)
-0:317          'r051' ( temp 4-component vector of float)
-0:317          radians ( temp 4-component vector of float)
+0:317          'r050' ( temp 4-component vector of float)
+0:317          pow ( temp 4-component vector of float)
 0:317            'inF0' ( in 4-component vector of float)
+0:317            'inF1' ( in 4-component vector of float)
 0:318      Sequence
 0:318        move second child to first child ( temp 4-component vector of float)
-0:318          'r052' ( temp 4-component vector of float)
-0:318          divide ( temp 4-component vector of float)
-0:318            Constant:
-0:318              1.000000
+0:318          'r051' ( temp 4-component vector of float)
+0:318          radians ( temp 4-component vector of float)
 0:318            'inF0' ( in 4-component vector of float)
 0:319      Sequence
 0:319        move second child to first child ( temp 4-component vector of float)
-0:319          'r053' ( temp 4-component vector of float)
-0:319          reflect ( temp 4-component vector of float)
+0:319          'r052' ( temp 4-component vector of float)
+0:319          divide ( temp 4-component vector of float)
+0:319            Constant:
+0:319              1.000000
 0:319            'inF0' ( in 4-component vector of float)
-0:319            'inF1' ( in 4-component vector of float)
 0:320      Sequence
 0:320        move second child to first child ( temp 4-component vector of float)
-0:320          'r054' ( temp 4-component vector of float)
-0:320          refract ( temp 4-component vector of float)
+0:320          'r053' ( temp 4-component vector of float)
+0:320          reflect ( temp 4-component vector of float)
 0:320            'inF0' ( in 4-component vector of float)
 0:320            'inF1' ( in 4-component vector of float)
-0:320            Constant:
-0:320              2.000000
 0:321      Sequence
-0:321        move second child to first child ( temp 4-component vector of uint)
-0:321          'r055' ( temp 4-component vector of uint)
+0:321        move second child to first child ( temp 4-component vector of float)
+0:321          'r054' ( temp 4-component vector of float)
+0:321          refract ( temp 4-component vector of float)
+0:321            'inF0' ( in 4-component vector of float)
+0:321            'inF1' ( in 4-component vector of float)
+0:321            Constant:
+0:321              2.000000
+0:322      Sequence
+0:322        move second child to first child ( temp 4-component vector of uint)
+0:322          'r055' ( temp 4-component vector of uint)
 0:?           bitFieldReverse ( temp 4-component vector of uint)
 0:?             Constant:
 0:?               1 (const uint)
 0:?               2 (const uint)
 0:?               3 (const uint)
 0:?               4 (const uint)
-0:322      Sequence
-0:322        move second child to first child ( temp 4-component vector of float)
-0:322          'r056' ( temp 4-component vector of float)
-0:322          roundEven ( temp 4-component vector of float)
-0:322            'inF0' ( in 4-component vector of float)
 0:323      Sequence
 0:323        move second child to first child ( temp 4-component vector of float)
-0:323          'r057' ( temp 4-component vector of float)
-0:323          inverse sqrt ( temp 4-component vector of float)
+0:323          'r056' ( temp 4-component vector of float)
+0:323          roundEven ( temp 4-component vector of float)
 0:323            'inF0' ( in 4-component vector of float)
 0:324      Sequence
 0:324        move second child to first child ( temp 4-component vector of float)
-0:324          'r058' ( temp 4-component vector of float)
-0:324          clamp ( temp 4-component vector of float)
+0:324          'r057' ( temp 4-component vector of float)
+0:324          inverse sqrt ( temp 4-component vector of float)
 0:324            'inF0' ( in 4-component vector of float)
-0:324            Constant:
-0:324              0.000000
-0:324            Constant:
-0:324              1.000000
 0:325      Sequence
 0:325        move second child to first child ( temp 4-component vector of float)
-0:325          'r059' ( temp 4-component vector of float)
-0:325          Sign ( temp 4-component vector of float)
+0:325          'r058' ( temp 4-component vector of float)
+0:325          clamp ( temp 4-component vector of float)
 0:325            'inF0' ( in 4-component vector of float)
+0:325            Constant:
+0:325              0.000000
+0:325            Constant:
+0:325              1.000000
 0:326      Sequence
 0:326        move second child to first child ( temp 4-component vector of float)
-0:326          'r060' ( temp 4-component vector of float)
-0:326          sine ( temp 4-component vector of float)
+0:326          'r059' ( temp 4-component vector of float)
+0:326          Sign ( temp 4-component vector of float)
 0:326            'inF0' ( in 4-component vector of float)
 0:327      Sequence
 0:327        move second child to first child ( temp 4-component vector of float)
-0:327          'inF1' ( in 4-component vector of float)
+0:327          'r060' ( temp 4-component vector of float)
 0:327          sine ( temp 4-component vector of float)
 0:327            'inF0' ( in 4-component vector of float)
-0:327        move second child to first child ( temp 4-component vector of float)
-0:327          'inF2' ( in 4-component vector of float)
-0:327          cosine ( temp 4-component vector of float)
-0:327            'inF0' ( in 4-component vector of float)
 0:328      Sequence
 0:328        move second child to first child ( temp 4-component vector of float)
-0:328          'r061' ( temp 4-component vector of float)
-0:328          hyp. sine ( temp 4-component vector of float)
+0:328          'inF1' ( in 4-component vector of float)
+0:328          sine ( temp 4-component vector of float)
+0:328            'inF0' ( in 4-component vector of float)
+0:328        move second child to first child ( temp 4-component vector of float)
+0:328          'inF2' ( in 4-component vector of float)
+0:328          cosine ( temp 4-component vector of float)
 0:328            'inF0' ( in 4-component vector of float)
 0:329      Sequence
 0:329        move second child to first child ( temp 4-component vector of float)
-0:329          'r062' ( temp 4-component vector of float)
-0:329          smoothstep ( temp 4-component vector of float)
+0:329          'r061' ( temp 4-component vector of float)
+0:329          hyp. sine ( temp 4-component vector of float)
 0:329            'inF0' ( in 4-component vector of float)
-0:329            'inF1' ( in 4-component vector of float)
-0:329            'inF2' ( in 4-component vector of float)
 0:330      Sequence
 0:330        move second child to first child ( temp 4-component vector of float)
-0:330          'r063' ( temp 4-component vector of float)
-0:330          sqrt ( temp 4-component vector of float)
+0:330          'r062' ( temp 4-component vector of float)
+0:330          smoothstep ( temp 4-component vector of float)
 0:330            'inF0' ( in 4-component vector of float)
+0:330            'inF1' ( in 4-component vector of float)
+0:330            'inF2' ( in 4-component vector of float)
 0:331      Sequence
 0:331        move second child to first child ( temp 4-component vector of float)
-0:331          'r064' ( temp 4-component vector of float)
-0:331          step ( temp 4-component vector of float)
+0:331          'r063' ( temp 4-component vector of float)
+0:331          sqrt ( temp 4-component vector of float)
 0:331            'inF0' ( in 4-component vector of float)
-0:331            'inF1' ( in 4-component vector of float)
 0:332      Sequence
 0:332        move second child to first child ( temp 4-component vector of float)
-0:332          'r065' ( temp 4-component vector of float)
-0:332          tangent ( temp 4-component vector of float)
+0:332          'r064' ( temp 4-component vector of float)
+0:332          step ( temp 4-component vector of float)
 0:332            'inF0' ( in 4-component vector of float)
+0:332            'inF1' ( in 4-component vector of float)
 0:333      Sequence
 0:333        move second child to first child ( temp 4-component vector of float)
-0:333          'r066' ( temp 4-component vector of float)
-0:333          hyp. tangent ( temp 4-component vector of float)
+0:333          'r065' ( temp 4-component vector of float)
+0:333          tangent ( temp 4-component vector of float)
 0:333            'inF0' ( in 4-component vector of float)
-0:335      Sequence
-0:335        move second child to first child ( temp 4-component vector of float)
-0:335          'r067' ( temp 4-component vector of float)
-0:335          trunc ( temp 4-component vector of float)
-0:335            'inF0' ( in 4-component vector of float)
-0:338      Branch: Return with expression
+0:334      Sequence
+0:334        move second child to first child ( temp 4-component vector of float)
+0:334          'r066' ( temp 4-component vector of float)
+0:334          hyp. tangent ( temp 4-component vector of float)
+0:334            'inF0' ( in 4-component vector of float)
+0:336      Sequence
+0:336        move second child to first child ( temp 4-component vector of float)
+0:336          'r067' ( temp 4-component vector of float)
+0:336          trunc ( temp 4-component vector of float)
+0:336            'inF0' ( in 4-component vector of float)
+0:339      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:401  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
-0:401    Function Parameters: 
-0:401      'inF0' ( in 2X2 matrix of float)
-0:401      'inF1' ( in 2X2 matrix of float)
-0:401      'inF2' ( in 2X2 matrix of float)
+0:402  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float)
+0:402    Function Parameters: 
+0:402      'inF0' ( in 2X2 matrix of float)
+0:402      'inF1' ( in 2X2 matrix of float)
+0:402      'inF2' ( in 2X2 matrix of float)
 0:?     Sequence
-0:403      Sequence
-0:403        move second child to first child ( temp bool)
-0:403          'r000' ( temp bool)
-0:403          all ( temp bool)
-0:403            Convert float to bool ( temp 2X2 matrix of bool)
-0:403              'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r001' ( temp 2X2 matrix of float)
-0:403          Absolute value ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      arc cosine ( temp 2X2 matrix of float)
-0:403        'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp bool)
-0:403          'r003' ( temp bool)
-0:403          any ( temp bool)
-0:403            Convert float to bool ( temp 2X2 matrix of bool)
-0:403              'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r004' ( temp 2X2 matrix of float)
-0:403          arc sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r005' ( temp 2X2 matrix of float)
-0:403          arc tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r006' ( temp 2X2 matrix of float)
-0:403          arc tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r007' ( temp 2X2 matrix of float)
-0:403          Ceiling ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Test condition and select ( temp void)
-0:403        Condition
-0:403        any ( temp bool)
-0:403          Compare Less Than ( temp 2X2 matrix of bool)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            Constant:
-0:403              0.000000
-0:403              0.000000
-0:403              0.000000
-0:403              0.000000
-0:403        true case
-0:403        Branch: Kill
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r008' ( temp 2X2 matrix of float)
-0:403          clamp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403            'inF2' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r009' ( temp 2X2 matrix of float)
-0:403          cosine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r010' ( temp 2X2 matrix of float)
-0:403          hyp. cosine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r011' ( temp 2X2 matrix of float)
-0:403          dPdx ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r012' ( temp 2X2 matrix of float)
-0:403          dPdxCoarse ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r013' ( temp 2X2 matrix of float)
-0:403          dPdxFine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r014' ( temp 2X2 matrix of float)
-0:403          dPdy ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r015' ( temp 2X2 matrix of float)
-0:403          dPdyCoarse ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r016' ( temp 2X2 matrix of float)
-0:403          dPdyFine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r017' ( temp 2X2 matrix of float)
-0:403          degrees ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp float)
-0:403          'r018' ( temp float)
-0:403          determinant ( temp float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r019' ( temp 2X2 matrix of float)
-0:403          exp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'R020' ( temp 2X2 matrix of float)
-0:403          exp2 ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r021' ( temp 2X2 matrix of float)
-0:403          Floor ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r022' ( temp 2X2 matrix of float)
-0:403          mod ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r023' ( temp 2X2 matrix of float)
-0:403          Fraction ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r025' ( temp 2X2 matrix of float)
-0:403          fwidth ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r026' ( temp 2X2 matrix of float)
-0:403          ldexp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r026a' ( temp 2X2 matrix of float)
-0:403          mix ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403            'inF2' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r027' ( temp 2X2 matrix of float)
-0:403          log ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r028' ( temp 2X2 matrix of float)
-0:403          matrix-scale ( temp 2X2 matrix of float)
-0:403            log2 ( temp 2X2 matrix of float)
-0:403              'inF0' ( in 2X2 matrix of float)
-0:403            Constant:
-0:403              0.301030
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r029' ( temp 2X2 matrix of float)
-0:403          log2 ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r030' ( temp 2X2 matrix of float)
-0:403          max ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r031' ( temp 2X2 matrix of float)
-0:403          min ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r032' ( temp 2X2 matrix of float)
-0:403          pow ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r033' ( temp 2X2 matrix of float)
-0:403          radians ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r034' ( temp 2X2 matrix of float)
-0:403          roundEven ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r035' ( temp 2X2 matrix of float)
-0:403          inverse sqrt ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r036' ( temp 2X2 matrix of float)
-0:403          clamp ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            Constant:
-0:403              0.000000
-0:403            Constant:
-0:403              1.000000
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r037' ( temp 2X2 matrix of float)
-0:403          Sign ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r038' ( temp 2X2 matrix of float)
-0:403          sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'inF1' ( in 2X2 matrix of float)
-0:403          sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'inF2' ( in 2X2 matrix of float)
-0:403          cosine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r039' ( temp 2X2 matrix of float)
-0:403          hyp. sine ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r049' ( temp 2X2 matrix of float)
-0:403          smoothstep ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403            'inF2' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r041' ( temp 2X2 matrix of float)
-0:403          sqrt ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r042' ( temp 2X2 matrix of float)
-0:403          step ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403            'inF1' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r043' ( temp 2X2 matrix of float)
-0:403          tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r044' ( temp 2X2 matrix of float)
-0:403          hyp. tangent ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:403      transpose ( temp 2X2 matrix of float)
-0:403        'inF0' ( in 2X2 matrix of float)
-0:403      Sequence
-0:403        move second child to first child ( temp 2X2 matrix of float)
-0:403          'r046' ( temp 2X2 matrix of float)
-0:403          trunc ( temp 2X2 matrix of float)
-0:403            'inF0' ( in 2X2 matrix of float)
-0:406      Branch: Return with expression
+0:404      Sequence
+0:404        move second child to first child ( temp bool)
+0:404          'r000' ( temp bool)
+0:404          all ( temp bool)
+0:404            Convert float to bool ( temp 2X2 matrix of bool)
+0:404              'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r001' ( temp 2X2 matrix of float)
+0:404          Absolute value ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      arc cosine ( temp 2X2 matrix of float)
+0:404        'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp bool)
+0:404          'r003' ( temp bool)
+0:404          any ( temp bool)
+0:404            Convert float to bool ( temp 2X2 matrix of bool)
+0:404              'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r004' ( temp 2X2 matrix of float)
+0:404          arc sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r005' ( temp 2X2 matrix of float)
+0:404          arc tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r006' ( temp 2X2 matrix of float)
+0:404          arc tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r007' ( temp 2X2 matrix of float)
+0:404          Ceiling ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Test condition and select ( temp void)
+0:404        Condition
+0:404        any ( temp bool)
+0:404          Compare Less Than ( temp 2X2 matrix of bool)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            Constant:
+0:404              0.000000
+0:404              0.000000
+0:404              0.000000
+0:404              0.000000
+0:404        true case
+0:404        Branch: Kill
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r008' ( temp 2X2 matrix of float)
+0:404          clamp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404            'inF2' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r009' ( temp 2X2 matrix of float)
+0:404          cosine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r010' ( temp 2X2 matrix of float)
+0:404          hyp. cosine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r011' ( temp 2X2 matrix of float)
+0:404          dPdx ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r012' ( temp 2X2 matrix of float)
+0:404          dPdxCoarse ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r013' ( temp 2X2 matrix of float)
+0:404          dPdxFine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r014' ( temp 2X2 matrix of float)
+0:404          dPdy ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r015' ( temp 2X2 matrix of float)
+0:404          dPdyCoarse ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r016' ( temp 2X2 matrix of float)
+0:404          dPdyFine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r017' ( temp 2X2 matrix of float)
+0:404          degrees ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp float)
+0:404          'r018' ( temp float)
+0:404          determinant ( temp float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r019' ( temp 2X2 matrix of float)
+0:404          exp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'R020' ( temp 2X2 matrix of float)
+0:404          exp2 ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r021' ( temp 2X2 matrix of float)
+0:404          Floor ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r022' ( temp 2X2 matrix of float)
+0:404          mod ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r023' ( temp 2X2 matrix of float)
+0:404          Fraction ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r025' ( temp 2X2 matrix of float)
+0:404          fwidth ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r026' ( temp 2X2 matrix of float)
+0:404          ldexp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r026a' ( temp 2X2 matrix of float)
+0:404          mix ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404            'inF2' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r027' ( temp 2X2 matrix of float)
+0:404          log ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r028' ( temp 2X2 matrix of float)
+0:404          matrix-scale ( temp 2X2 matrix of float)
+0:404            log2 ( temp 2X2 matrix of float)
+0:404              'inF0' ( in 2X2 matrix of float)
+0:404            Constant:
+0:404              0.301030
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r029' ( temp 2X2 matrix of float)
+0:404          log2 ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r030' ( temp 2X2 matrix of float)
+0:404          max ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r031' ( temp 2X2 matrix of float)
+0:404          min ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r032' ( temp 2X2 matrix of float)
+0:404          pow ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r033' ( temp 2X2 matrix of float)
+0:404          radians ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r034' ( temp 2X2 matrix of float)
+0:404          roundEven ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r035' ( temp 2X2 matrix of float)
+0:404          inverse sqrt ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r036' ( temp 2X2 matrix of float)
+0:404          clamp ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            Constant:
+0:404              0.000000
+0:404            Constant:
+0:404              1.000000
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r037' ( temp 2X2 matrix of float)
+0:404          Sign ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r038' ( temp 2X2 matrix of float)
+0:404          sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'inF1' ( in 2X2 matrix of float)
+0:404          sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'inF2' ( in 2X2 matrix of float)
+0:404          cosine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r039' ( temp 2X2 matrix of float)
+0:404          hyp. sine ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r049' ( temp 2X2 matrix of float)
+0:404          smoothstep ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404            'inF2' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r041' ( temp 2X2 matrix of float)
+0:404          sqrt ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r042' ( temp 2X2 matrix of float)
+0:404          step ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404            'inF1' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r043' ( temp 2X2 matrix of float)
+0:404          tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r044' ( temp 2X2 matrix of float)
+0:404          hyp. tangent ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:404      transpose ( temp 2X2 matrix of float)
+0:404        'inF0' ( in 2X2 matrix of float)
+0:404      Sequence
+0:404        move second child to first child ( temp 2X2 matrix of float)
+0:404          'r046' ( temp 2X2 matrix of float)
+0:404          trunc ( temp 2X2 matrix of float)
+0:404            'inF0' ( in 2X2 matrix of float)
+0:407      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:410  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
-0:410    Function Parameters: 
-0:410      'inF0' ( in 3X3 matrix of float)
-0:410      'inF1' ( in 3X3 matrix of float)
-0:410      'inF2' ( in 3X3 matrix of float)
+0:411  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float)
+0:411    Function Parameters: 
+0:411      'inF0' ( in 3X3 matrix of float)
+0:411      'inF1' ( in 3X3 matrix of float)
+0:411      'inF2' ( in 3X3 matrix of float)
 0:?     Sequence
-0:412      Sequence
-0:412        move second child to first child ( temp bool)
-0:412          'r000' ( temp bool)
-0:412          all ( temp bool)
-0:412            Convert float to bool ( temp 3X3 matrix of bool)
-0:412              'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r001' ( temp 3X3 matrix of float)
-0:412          Absolute value ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      arc cosine ( temp 3X3 matrix of float)
-0:412        'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp bool)
-0:412          'r003' ( temp bool)
-0:412          any ( temp bool)
-0:412            Convert float to bool ( temp 3X3 matrix of bool)
-0:412              'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r004' ( temp 3X3 matrix of float)
-0:412          arc sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r005' ( temp 3X3 matrix of float)
-0:412          arc tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r006' ( temp 3X3 matrix of float)
-0:412          arc tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r007' ( temp 3X3 matrix of float)
-0:412          Ceiling ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Test condition and select ( temp void)
-0:412        Condition
-0:412        any ( temp bool)
-0:412          Compare Less Than ( temp 3X3 matrix of bool)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            Constant:
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412              0.000000
-0:412        true case
-0:412        Branch: Kill
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r008' ( temp 3X3 matrix of float)
-0:412          clamp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412            'inF2' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r009' ( temp 3X3 matrix of float)
-0:412          cosine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r010' ( temp 3X3 matrix of float)
-0:412          hyp. cosine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r011' ( temp 3X3 matrix of float)
-0:412          dPdx ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r012' ( temp 3X3 matrix of float)
-0:412          dPdxCoarse ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r013' ( temp 3X3 matrix of float)
-0:412          dPdxFine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r014' ( temp 3X3 matrix of float)
-0:412          dPdy ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r015' ( temp 3X3 matrix of float)
-0:412          dPdyCoarse ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r016' ( temp 3X3 matrix of float)
-0:412          dPdyFine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r017' ( temp 3X3 matrix of float)
-0:412          degrees ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp float)
-0:412          'r018' ( temp float)
-0:412          determinant ( temp float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r019' ( temp 3X3 matrix of float)
-0:412          exp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'R020' ( temp 3X3 matrix of float)
-0:412          exp2 ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r021' ( temp 3X3 matrix of float)
-0:412          Floor ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r022' ( temp 3X3 matrix of float)
-0:412          mod ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r023' ( temp 3X3 matrix of float)
-0:412          Fraction ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r025' ( temp 3X3 matrix of float)
-0:412          fwidth ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r026' ( temp 3X3 matrix of float)
-0:412          ldexp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r026a' ( temp 3X3 matrix of float)
-0:412          mix ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412            'inF2' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r027' ( temp 3X3 matrix of float)
-0:412          log ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r028' ( temp 3X3 matrix of float)
-0:412          matrix-scale ( temp 3X3 matrix of float)
-0:412            log2 ( temp 3X3 matrix of float)
-0:412              'inF0' ( in 3X3 matrix of float)
-0:412            Constant:
-0:412              0.301030
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r029' ( temp 3X3 matrix of float)
-0:412          log2 ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r030' ( temp 3X3 matrix of float)
-0:412          max ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r031' ( temp 3X3 matrix of float)
-0:412          min ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r032' ( temp 3X3 matrix of float)
-0:412          pow ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r033' ( temp 3X3 matrix of float)
-0:412          radians ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r034' ( temp 3X3 matrix of float)
-0:412          roundEven ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r035' ( temp 3X3 matrix of float)
-0:412          inverse sqrt ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r036' ( temp 3X3 matrix of float)
-0:412          clamp ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            Constant:
-0:412              0.000000
-0:412            Constant:
-0:412              1.000000
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r037' ( temp 3X3 matrix of float)
-0:412          Sign ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r038' ( temp 3X3 matrix of float)
-0:412          sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'inF1' ( in 3X3 matrix of float)
-0:412          sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'inF2' ( in 3X3 matrix of float)
-0:412          cosine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r039' ( temp 3X3 matrix of float)
-0:412          hyp. sine ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r049' ( temp 3X3 matrix of float)
-0:412          smoothstep ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412            'inF2' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r041' ( temp 3X3 matrix of float)
-0:412          sqrt ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r042' ( temp 3X3 matrix of float)
-0:412          step ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412            'inF1' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r043' ( temp 3X3 matrix of float)
-0:412          tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r044' ( temp 3X3 matrix of float)
-0:412          hyp. tangent ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:412      transpose ( temp 3X3 matrix of float)
-0:412        'inF0' ( in 3X3 matrix of float)
-0:412      Sequence
-0:412        move second child to first child ( temp 3X3 matrix of float)
-0:412          'r046' ( temp 3X3 matrix of float)
-0:412          trunc ( temp 3X3 matrix of float)
-0:412            'inF0' ( in 3X3 matrix of float)
-0:415      Branch: Return with expression
+0:413      Sequence
+0:413        move second child to first child ( temp bool)
+0:413          'r000' ( temp bool)
+0:413          all ( temp bool)
+0:413            Convert float to bool ( temp 3X3 matrix of bool)
+0:413              'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r001' ( temp 3X3 matrix of float)
+0:413          Absolute value ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      arc cosine ( temp 3X3 matrix of float)
+0:413        'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp bool)
+0:413          'r003' ( temp bool)
+0:413          any ( temp bool)
+0:413            Convert float to bool ( temp 3X3 matrix of bool)
+0:413              'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r004' ( temp 3X3 matrix of float)
+0:413          arc sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r005' ( temp 3X3 matrix of float)
+0:413          arc tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r006' ( temp 3X3 matrix of float)
+0:413          arc tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r007' ( temp 3X3 matrix of float)
+0:413          Ceiling ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Test condition and select ( temp void)
+0:413        Condition
+0:413        any ( temp bool)
+0:413          Compare Less Than ( temp 3X3 matrix of bool)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            Constant:
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413              0.000000
+0:413        true case
+0:413        Branch: Kill
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r008' ( temp 3X3 matrix of float)
+0:413          clamp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413            'inF2' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r009' ( temp 3X3 matrix of float)
+0:413          cosine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r010' ( temp 3X3 matrix of float)
+0:413          hyp. cosine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r011' ( temp 3X3 matrix of float)
+0:413          dPdx ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r012' ( temp 3X3 matrix of float)
+0:413          dPdxCoarse ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r013' ( temp 3X3 matrix of float)
+0:413          dPdxFine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r014' ( temp 3X3 matrix of float)
+0:413          dPdy ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r015' ( temp 3X3 matrix of float)
+0:413          dPdyCoarse ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r016' ( temp 3X3 matrix of float)
+0:413          dPdyFine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r017' ( temp 3X3 matrix of float)
+0:413          degrees ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp float)
+0:413          'r018' ( temp float)
+0:413          determinant ( temp float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r019' ( temp 3X3 matrix of float)
+0:413          exp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'R020' ( temp 3X3 matrix of float)
+0:413          exp2 ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r021' ( temp 3X3 matrix of float)
+0:413          Floor ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r022' ( temp 3X3 matrix of float)
+0:413          mod ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r023' ( temp 3X3 matrix of float)
+0:413          Fraction ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r025' ( temp 3X3 matrix of float)
+0:413          fwidth ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r026' ( temp 3X3 matrix of float)
+0:413          ldexp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r026a' ( temp 3X3 matrix of float)
+0:413          mix ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413            'inF2' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r027' ( temp 3X3 matrix of float)
+0:413          log ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r028' ( temp 3X3 matrix of float)
+0:413          matrix-scale ( temp 3X3 matrix of float)
+0:413            log2 ( temp 3X3 matrix of float)
+0:413              'inF0' ( in 3X3 matrix of float)
+0:413            Constant:
+0:413              0.301030
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r029' ( temp 3X3 matrix of float)
+0:413          log2 ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r030' ( temp 3X3 matrix of float)
+0:413          max ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r031' ( temp 3X3 matrix of float)
+0:413          min ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r032' ( temp 3X3 matrix of float)
+0:413          pow ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r033' ( temp 3X3 matrix of float)
+0:413          radians ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r034' ( temp 3X3 matrix of float)
+0:413          roundEven ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r035' ( temp 3X3 matrix of float)
+0:413          inverse sqrt ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r036' ( temp 3X3 matrix of float)
+0:413          clamp ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            Constant:
+0:413              0.000000
+0:413            Constant:
+0:413              1.000000
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r037' ( temp 3X3 matrix of float)
+0:413          Sign ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r038' ( temp 3X3 matrix of float)
+0:413          sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'inF1' ( in 3X3 matrix of float)
+0:413          sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'inF2' ( in 3X3 matrix of float)
+0:413          cosine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r039' ( temp 3X3 matrix of float)
+0:413          hyp. sine ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r049' ( temp 3X3 matrix of float)
+0:413          smoothstep ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413            'inF2' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r041' ( temp 3X3 matrix of float)
+0:413          sqrt ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r042' ( temp 3X3 matrix of float)
+0:413          step ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413            'inF1' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r043' ( temp 3X3 matrix of float)
+0:413          tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r044' ( temp 3X3 matrix of float)
+0:413          hyp. tangent ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:413      transpose ( temp 3X3 matrix of float)
+0:413        'inF0' ( in 3X3 matrix of float)
+0:413      Sequence
+0:413        move second child to first child ( temp 3X3 matrix of float)
+0:413          'r046' ( temp 3X3 matrix of float)
+0:413          trunc ( temp 3X3 matrix of float)
+0:413            'inF0' ( in 3X3 matrix of float)
+0:416      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -4992,297 +5006,297 @@
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:419  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
-0:419    Function Parameters: 
-0:419      'inF0' ( in 4X4 matrix of float)
-0:419      'inF1' ( in 4X4 matrix of float)
-0:419      'inF2' ( in 4X4 matrix of float)
+0:420  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float)
+0:420    Function Parameters: 
+0:420      'inF0' ( in 4X4 matrix of float)
+0:420      'inF1' ( in 4X4 matrix of float)
+0:420      'inF2' ( in 4X4 matrix of float)
 0:?     Sequence
-0:421      Sequence
-0:421        move second child to first child ( temp bool)
-0:421          'r000' ( temp bool)
-0:421          all ( temp bool)
-0:421            Convert float to bool ( temp 4X4 matrix of bool)
-0:421              'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r001' ( temp 4X4 matrix of float)
-0:421          Absolute value ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      arc cosine ( temp 4X4 matrix of float)
-0:421        'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp bool)
-0:421          'r003' ( temp bool)
-0:421          any ( temp bool)
-0:421            Convert float to bool ( temp 4X4 matrix of bool)
-0:421              'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r004' ( temp 4X4 matrix of float)
-0:421          arc sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r005' ( temp 4X4 matrix of float)
-0:421          arc tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r006' ( temp 4X4 matrix of float)
-0:421          arc tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r007' ( temp 4X4 matrix of float)
-0:421          Ceiling ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Test condition and select ( temp void)
-0:421        Condition
-0:421        any ( temp bool)
-0:421          Compare Less Than ( temp 4X4 matrix of bool)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            Constant:
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421              0.000000
-0:421        true case
-0:421        Branch: Kill
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r008' ( temp 4X4 matrix of float)
-0:421          clamp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421            'inF2' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r009' ( temp 4X4 matrix of float)
-0:421          cosine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r010' ( temp 4X4 matrix of float)
-0:421          hyp. cosine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r011' ( temp 4X4 matrix of float)
-0:421          dPdx ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r012' ( temp 4X4 matrix of float)
-0:421          dPdxCoarse ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r013' ( temp 4X4 matrix of float)
-0:421          dPdxFine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r014' ( temp 4X4 matrix of float)
-0:421          dPdy ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r015' ( temp 4X4 matrix of float)
-0:421          dPdyCoarse ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r016' ( temp 4X4 matrix of float)
-0:421          dPdyFine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r017' ( temp 4X4 matrix of float)
-0:421          degrees ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp float)
-0:421          'r018' ( temp float)
-0:421          determinant ( temp float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r019' ( temp 4X4 matrix of float)
-0:421          exp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'R020' ( temp 4X4 matrix of float)
-0:421          exp2 ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r021' ( temp 4X4 matrix of float)
-0:421          Floor ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r022' ( temp 4X4 matrix of float)
-0:421          mod ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r023' ( temp 4X4 matrix of float)
-0:421          Fraction ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r025' ( temp 4X4 matrix of float)
-0:421          fwidth ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r026' ( temp 4X4 matrix of float)
-0:421          ldexp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r026a' ( temp 4X4 matrix of float)
-0:421          mix ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421            'inF2' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r027' ( temp 4X4 matrix of float)
-0:421          log ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r028' ( temp 4X4 matrix of float)
-0:421          matrix-scale ( temp 4X4 matrix of float)
-0:421            log2 ( temp 4X4 matrix of float)
-0:421              'inF0' ( in 4X4 matrix of float)
-0:421            Constant:
-0:421              0.301030
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r029' ( temp 4X4 matrix of float)
-0:421          log2 ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r030' ( temp 4X4 matrix of float)
-0:421          max ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r031' ( temp 4X4 matrix of float)
-0:421          min ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r032' ( temp 4X4 matrix of float)
-0:421          pow ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r033' ( temp 4X4 matrix of float)
-0:421          radians ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r034' ( temp 4X4 matrix of float)
-0:421          roundEven ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r035' ( temp 4X4 matrix of float)
-0:421          inverse sqrt ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r036' ( temp 4X4 matrix of float)
-0:421          clamp ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            Constant:
-0:421              0.000000
-0:421            Constant:
-0:421              1.000000
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r037' ( temp 4X4 matrix of float)
-0:421          Sign ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r038' ( temp 4X4 matrix of float)
-0:421          sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'inF1' ( in 4X4 matrix of float)
-0:421          sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'inF2' ( in 4X4 matrix of float)
-0:421          cosine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r039' ( temp 4X4 matrix of float)
-0:421          hyp. sine ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r049' ( temp 4X4 matrix of float)
-0:421          smoothstep ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421            'inF2' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r041' ( temp 4X4 matrix of float)
-0:421          sqrt ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r042' ( temp 4X4 matrix of float)
-0:421          step ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421            'inF1' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r043' ( temp 4X4 matrix of float)
-0:421          tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r044' ( temp 4X4 matrix of float)
-0:421          hyp. tangent ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:421      transpose ( temp 4X4 matrix of float)
-0:421        'inF0' ( in 4X4 matrix of float)
-0:421      Sequence
-0:421        move second child to first child ( temp 4X4 matrix of float)
-0:421          'r046' ( temp 4X4 matrix of float)
-0:421          trunc ( temp 4X4 matrix of float)
-0:421            'inF0' ( in 4X4 matrix of float)
-0:424      Branch: Return with expression
+0:422      Sequence
+0:422        move second child to first child ( temp bool)
+0:422          'r000' ( temp bool)
+0:422          all ( temp bool)
+0:422            Convert float to bool ( temp 4X4 matrix of bool)
+0:422              'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r001' ( temp 4X4 matrix of float)
+0:422          Absolute value ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      arc cosine ( temp 4X4 matrix of float)
+0:422        'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp bool)
+0:422          'r003' ( temp bool)
+0:422          any ( temp bool)
+0:422            Convert float to bool ( temp 4X4 matrix of bool)
+0:422              'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r004' ( temp 4X4 matrix of float)
+0:422          arc sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r005' ( temp 4X4 matrix of float)
+0:422          arc tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r006' ( temp 4X4 matrix of float)
+0:422          arc tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r007' ( temp 4X4 matrix of float)
+0:422          Ceiling ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Test condition and select ( temp void)
+0:422        Condition
+0:422        any ( temp bool)
+0:422          Compare Less Than ( temp 4X4 matrix of bool)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            Constant:
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422              0.000000
+0:422        true case
+0:422        Branch: Kill
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r008' ( temp 4X4 matrix of float)
+0:422          clamp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422            'inF2' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r009' ( temp 4X4 matrix of float)
+0:422          cosine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r010' ( temp 4X4 matrix of float)
+0:422          hyp. cosine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r011' ( temp 4X4 matrix of float)
+0:422          dPdx ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r012' ( temp 4X4 matrix of float)
+0:422          dPdxCoarse ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r013' ( temp 4X4 matrix of float)
+0:422          dPdxFine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r014' ( temp 4X4 matrix of float)
+0:422          dPdy ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r015' ( temp 4X4 matrix of float)
+0:422          dPdyCoarse ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r016' ( temp 4X4 matrix of float)
+0:422          dPdyFine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r017' ( temp 4X4 matrix of float)
+0:422          degrees ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp float)
+0:422          'r018' ( temp float)
+0:422          determinant ( temp float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r019' ( temp 4X4 matrix of float)
+0:422          exp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'R020' ( temp 4X4 matrix of float)
+0:422          exp2 ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r021' ( temp 4X4 matrix of float)
+0:422          Floor ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r022' ( temp 4X4 matrix of float)
+0:422          mod ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r023' ( temp 4X4 matrix of float)
+0:422          Fraction ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r025' ( temp 4X4 matrix of float)
+0:422          fwidth ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r026' ( temp 4X4 matrix of float)
+0:422          ldexp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r026a' ( temp 4X4 matrix of float)
+0:422          mix ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422            'inF2' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r027' ( temp 4X4 matrix of float)
+0:422          log ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r028' ( temp 4X4 matrix of float)
+0:422          matrix-scale ( temp 4X4 matrix of float)
+0:422            log2 ( temp 4X4 matrix of float)
+0:422              'inF0' ( in 4X4 matrix of float)
+0:422            Constant:
+0:422              0.301030
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r029' ( temp 4X4 matrix of float)
+0:422          log2 ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r030' ( temp 4X4 matrix of float)
+0:422          max ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r031' ( temp 4X4 matrix of float)
+0:422          min ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r032' ( temp 4X4 matrix of float)
+0:422          pow ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r033' ( temp 4X4 matrix of float)
+0:422          radians ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r034' ( temp 4X4 matrix of float)
+0:422          roundEven ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r035' ( temp 4X4 matrix of float)
+0:422          inverse sqrt ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r036' ( temp 4X4 matrix of float)
+0:422          clamp ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            Constant:
+0:422              0.000000
+0:422            Constant:
+0:422              1.000000
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r037' ( temp 4X4 matrix of float)
+0:422          Sign ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r038' ( temp 4X4 matrix of float)
+0:422          sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'inF1' ( in 4X4 matrix of float)
+0:422          sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'inF2' ( in 4X4 matrix of float)
+0:422          cosine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r039' ( temp 4X4 matrix of float)
+0:422          hyp. sine ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r049' ( temp 4X4 matrix of float)
+0:422          smoothstep ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422            'inF2' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r041' ( temp 4X4 matrix of float)
+0:422          sqrt ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r042' ( temp 4X4 matrix of float)
+0:422          step ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422            'inF1' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r043' ( temp 4X4 matrix of float)
+0:422          tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r044' ( temp 4X4 matrix of float)
+0:422          hyp. tangent ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:422      transpose ( temp 4X4 matrix of float)
+0:422        'inF0' ( in 4X4 matrix of float)
+0:422      Sequence
+0:422        move second child to first child ( temp 4X4 matrix of float)
+0:422          'r046' ( temp 4X4 matrix of float)
+0:422          trunc ( temp 4X4 matrix of float)
+0:422            'inF0' ( in 4X4 matrix of float)
+0:425      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -5300,334 +5314,334 @@
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:442  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
-0:442    Function Parameters: 
-0:442      'inF0' ( in float)
-0:442      'inF1' ( in float)
-0:442      'inFV0' ( in 2-component vector of float)
-0:442      'inFV1' ( in 2-component vector of float)
-0:442      'inFM0' ( in 2X2 matrix of float)
-0:442      'inFM1' ( in 2X2 matrix of float)
+0:443  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void)
+0:443    Function Parameters: 
+0:443      'inF0' ( in float)
+0:443      'inF1' ( in float)
+0:443      'inFV0' ( in 2-component vector of float)
+0:443      'inFV1' ( in 2-component vector of float)
+0:443      'inFM0' ( in 2X2 matrix of float)
+0:443      'inFM1' ( in 2X2 matrix of float)
 0:?     Sequence
-0:443      Sequence
-0:443        move second child to first child ( temp float)
-0:443          'r0' ( temp float)
-0:443          component-wise multiply ( temp float)
-0:443            'inF1' ( in float)
-0:443            'inF0' ( in float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r1' ( temp 2-component vector of float)
-0:443          vector-scale ( temp 2-component vector of float)
-0:443            'inF0' ( in float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r2' ( temp 2-component vector of float)
-0:443          vector-scale ( temp 2-component vector of float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443            'inF0' ( in float)
-0:443      Sequence
-0:443        move second child to first child ( temp float)
-0:443          'r3' ( temp float)
-0:443          dot-product ( temp float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443            'inFV1' ( in 2-component vector of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r4' ( temp 2-component vector of float)
-0:443          vector-times-matrix ( temp 2-component vector of float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2-component vector of float)
-0:443          'r5' ( temp 2-component vector of float)
-0:443          matrix-times-vector ( temp 2-component vector of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443            'inFV0' ( in 2-component vector of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2X2 matrix of float)
-0:443          'r6' ( temp 2X2 matrix of float)
-0:443          matrix-scale ( temp 2X2 matrix of float)
-0:443            'inF0' ( in float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2X2 matrix of float)
-0:443          'r7' ( temp 2X2 matrix of float)
-0:443          matrix-scale ( temp 2X2 matrix of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:443            'inF0' ( in float)
-0:443      Sequence
-0:443        move second child to first child ( temp 2X2 matrix of float)
-0:443          'r8' ( temp 2X2 matrix of float)
-0:443          matrix-multiply ( temp 2X2 matrix of float)
-0:443            'inFM1' ( in 2X2 matrix of float)
-0:443            'inFM0' ( in 2X2 matrix of float)
-0:449  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
-0:449    Function Parameters: 
-0:449      'inF0' ( in float)
-0:449      'inF1' ( in float)
-0:449      'inFV0' ( in 3-component vector of float)
-0:449      'inFV1' ( in 3-component vector of float)
-0:449      'inFM0' ( in 3X3 matrix of float)
-0:449      'inFM1' ( in 3X3 matrix of float)
+0:444      Sequence
+0:444        move second child to first child ( temp float)
+0:444          'r0' ( temp float)
+0:444          component-wise multiply ( temp float)
+0:444            'inF1' ( in float)
+0:444            'inF0' ( in float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r1' ( temp 2-component vector of float)
+0:444          vector-scale ( temp 2-component vector of float)
+0:444            'inF0' ( in float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r2' ( temp 2-component vector of float)
+0:444          vector-scale ( temp 2-component vector of float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444            'inF0' ( in float)
+0:444      Sequence
+0:444        move second child to first child ( temp float)
+0:444          'r3' ( temp float)
+0:444          dot-product ( temp float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444            'inFV1' ( in 2-component vector of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r4' ( temp 2-component vector of float)
+0:444          vector-times-matrix ( temp 2-component vector of float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2-component vector of float)
+0:444          'r5' ( temp 2-component vector of float)
+0:444          matrix-times-vector ( temp 2-component vector of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444            'inFV0' ( in 2-component vector of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2X2 matrix of float)
+0:444          'r6' ( temp 2X2 matrix of float)
+0:444          matrix-scale ( temp 2X2 matrix of float)
+0:444            'inF0' ( in float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2X2 matrix of float)
+0:444          'r7' ( temp 2X2 matrix of float)
+0:444          matrix-scale ( temp 2X2 matrix of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:444            'inF0' ( in float)
+0:444      Sequence
+0:444        move second child to first child ( temp 2X2 matrix of float)
+0:444          'r8' ( temp 2X2 matrix of float)
+0:444          matrix-multiply ( temp 2X2 matrix of float)
+0:444            'inFM1' ( in 2X2 matrix of float)
+0:444            'inFM0' ( in 2X2 matrix of float)
+0:450  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; ( temp void)
+0:450    Function Parameters: 
+0:450      'inF0' ( in float)
+0:450      'inF1' ( in float)
+0:450      'inFV0' ( in 3-component vector of float)
+0:450      'inFV1' ( in 3-component vector of float)
+0:450      'inFM0' ( in 3X3 matrix of float)
+0:450      'inFM1' ( in 3X3 matrix of float)
 0:?     Sequence
-0:450      Sequence
-0:450        move second child to first child ( temp float)
-0:450          'r0' ( temp float)
-0:450          component-wise multiply ( temp float)
-0:450            'inF1' ( in float)
-0:450            'inF0' ( in float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r1' ( temp 3-component vector of float)
-0:450          vector-scale ( temp 3-component vector of float)
-0:450            'inF0' ( in float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r2' ( temp 3-component vector of float)
-0:450          vector-scale ( temp 3-component vector of float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450            'inF0' ( in float)
-0:450      Sequence
-0:450        move second child to first child ( temp float)
-0:450          'r3' ( temp float)
-0:450          dot-product ( temp float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450            'inFV1' ( in 3-component vector of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r4' ( temp 3-component vector of float)
-0:450          vector-times-matrix ( temp 3-component vector of float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3-component vector of float)
-0:450          'r5' ( temp 3-component vector of float)
-0:450          matrix-times-vector ( temp 3-component vector of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450            'inFV0' ( in 3-component vector of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3X3 matrix of float)
-0:450          'r6' ( temp 3X3 matrix of float)
-0:450          matrix-scale ( temp 3X3 matrix of float)
-0:450            'inF0' ( in float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3X3 matrix of float)
-0:450          'r7' ( temp 3X3 matrix of float)
-0:450          matrix-scale ( temp 3X3 matrix of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:450            'inF0' ( in float)
-0:450      Sequence
-0:450        move second child to first child ( temp 3X3 matrix of float)
-0:450          'r8' ( temp 3X3 matrix of float)
-0:450          matrix-multiply ( temp 3X3 matrix of float)
-0:450            'inFM1' ( in 3X3 matrix of float)
-0:450            'inFM0' ( in 3X3 matrix of float)
-0:456  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
-0:456    Function Parameters: 
-0:456      'inF0' ( in float)
-0:456      'inF1' ( in float)
-0:456      'inFV0' ( in 4-component vector of float)
-0:456      'inFV1' ( in 4-component vector of float)
-0:456      'inFM0' ( in 4X4 matrix of float)
-0:456      'inFM1' ( in 4X4 matrix of float)
+0:451      Sequence
+0:451        move second child to first child ( temp float)
+0:451          'r0' ( temp float)
+0:451          component-wise multiply ( temp float)
+0:451            'inF1' ( in float)
+0:451            'inF0' ( in float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r1' ( temp 3-component vector of float)
+0:451          vector-scale ( temp 3-component vector of float)
+0:451            'inF0' ( in float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r2' ( temp 3-component vector of float)
+0:451          vector-scale ( temp 3-component vector of float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451            'inF0' ( in float)
+0:451      Sequence
+0:451        move second child to first child ( temp float)
+0:451          'r3' ( temp float)
+0:451          dot-product ( temp float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451            'inFV1' ( in 3-component vector of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r4' ( temp 3-component vector of float)
+0:451          vector-times-matrix ( temp 3-component vector of float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3-component vector of float)
+0:451          'r5' ( temp 3-component vector of float)
+0:451          matrix-times-vector ( temp 3-component vector of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451            'inFV0' ( in 3-component vector of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3X3 matrix of float)
+0:451          'r6' ( temp 3X3 matrix of float)
+0:451          matrix-scale ( temp 3X3 matrix of float)
+0:451            'inF0' ( in float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3X3 matrix of float)
+0:451          'r7' ( temp 3X3 matrix of float)
+0:451          matrix-scale ( temp 3X3 matrix of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:451            'inF0' ( in float)
+0:451      Sequence
+0:451        move second child to first child ( temp 3X3 matrix of float)
+0:451          'r8' ( temp 3X3 matrix of float)
+0:451          matrix-multiply ( temp 3X3 matrix of float)
+0:451            'inFM1' ( in 3X3 matrix of float)
+0:451            'inFM0' ( in 3X3 matrix of float)
+0:457  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; ( temp void)
+0:457    Function Parameters: 
+0:457      'inF0' ( in float)
+0:457      'inF1' ( in float)
+0:457      'inFV0' ( in 4-component vector of float)
+0:457      'inFV1' ( in 4-component vector of float)
+0:457      'inFM0' ( in 4X4 matrix of float)
+0:457      'inFM1' ( in 4X4 matrix of float)
 0:?     Sequence
-0:457      Sequence
-0:457        move second child to first child ( temp float)
-0:457          'r0' ( temp float)
-0:457          component-wise multiply ( temp float)
-0:457            'inF1' ( in float)
-0:457            'inF0' ( in float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r1' ( temp 4-component vector of float)
-0:457          vector-scale ( temp 4-component vector of float)
-0:457            'inF0' ( in float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r2' ( temp 4-component vector of float)
-0:457          vector-scale ( temp 4-component vector of float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457            'inF0' ( in float)
-0:457      Sequence
-0:457        move second child to first child ( temp float)
-0:457          'r3' ( temp float)
-0:457          dot-product ( temp float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457            'inFV1' ( in 4-component vector of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r4' ( temp 4-component vector of float)
-0:457          vector-times-matrix ( temp 4-component vector of float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4-component vector of float)
-0:457          'r5' ( temp 4-component vector of float)
-0:457          matrix-times-vector ( temp 4-component vector of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457            'inFV0' ( in 4-component vector of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4X4 matrix of float)
-0:457          'r6' ( temp 4X4 matrix of float)
-0:457          matrix-scale ( temp 4X4 matrix of float)
-0:457            'inF0' ( in float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4X4 matrix of float)
-0:457          'r7' ( temp 4X4 matrix of float)
-0:457          matrix-scale ( temp 4X4 matrix of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:457            'inF0' ( in float)
-0:457      Sequence
-0:457        move second child to first child ( temp 4X4 matrix of float)
-0:457          'r8' ( temp 4X4 matrix of float)
-0:457          matrix-multiply ( temp 4X4 matrix of float)
-0:457            'inFM1' ( in 4X4 matrix of float)
-0:457            'inFM0' ( in 4X4 matrix of float)
-0:466  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
-0:466    Function Parameters: 
-0:466      'inF0' ( in float)
-0:466      'inF1' ( in float)
-0:466      'inFV2' ( in 2-component vector of float)
-0:466      'inFV3' ( in 3-component vector of float)
-0:466      'inFM2x3' ( in 2X3 matrix of float)
-0:466      'inFM3x2' ( in 3X2 matrix of float)
-0:466      'inFM3x3' ( in 3X3 matrix of float)
-0:466      'inFM3x4' ( in 3X4 matrix of float)
-0:466      'inFM2x4' ( in 2X4 matrix of float)
+0:458      Sequence
+0:458        move second child to first child ( temp float)
+0:458          'r0' ( temp float)
+0:458          component-wise multiply ( temp float)
+0:458            'inF1' ( in float)
+0:458            'inF0' ( in float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r1' ( temp 4-component vector of float)
+0:458          vector-scale ( temp 4-component vector of float)
+0:458            'inF0' ( in float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r2' ( temp 4-component vector of float)
+0:458          vector-scale ( temp 4-component vector of float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458            'inF0' ( in float)
+0:458      Sequence
+0:458        move second child to first child ( temp float)
+0:458          'r3' ( temp float)
+0:458          dot-product ( temp float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458            'inFV1' ( in 4-component vector of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r4' ( temp 4-component vector of float)
+0:458          vector-times-matrix ( temp 4-component vector of float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4-component vector of float)
+0:458          'r5' ( temp 4-component vector of float)
+0:458          matrix-times-vector ( temp 4-component vector of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458            'inFV0' ( in 4-component vector of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4X4 matrix of float)
+0:458          'r6' ( temp 4X4 matrix of float)
+0:458          matrix-scale ( temp 4X4 matrix of float)
+0:458            'inF0' ( in float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4X4 matrix of float)
+0:458          'r7' ( temp 4X4 matrix of float)
+0:458          matrix-scale ( temp 4X4 matrix of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:458            'inF0' ( in float)
+0:458      Sequence
+0:458        move second child to first child ( temp 4X4 matrix of float)
+0:458          'r8' ( temp 4X4 matrix of float)
+0:458          matrix-multiply ( temp 4X4 matrix of float)
+0:458            'inFM1' ( in 4X4 matrix of float)
+0:458            'inFM0' ( in 4X4 matrix of float)
+0:467  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24; ( temp void)
+0:467    Function Parameters: 
+0:467      'inF0' ( in float)
+0:467      'inF1' ( in float)
+0:467      'inFV2' ( in 2-component vector of float)
+0:467      'inFV3' ( in 3-component vector of float)
+0:467      'inFM2x3' ( in 2X3 matrix of float)
+0:467      'inFM3x2' ( in 3X2 matrix of float)
+0:467      'inFM3x3' ( in 3X3 matrix of float)
+0:467      'inFM3x4' ( in 3X4 matrix of float)
+0:467      'inFM2x4' ( in 2X4 matrix of float)
 0:?     Sequence
-0:467      Sequence
-0:467        move second child to first child ( temp float)
-0:467          'r00' ( temp float)
-0:467          component-wise multiply ( temp float)
-0:467            'inF1' ( in float)
-0:467            'inF0' ( in float)
 0:468      Sequence
-0:468        move second child to first child ( temp 2-component vector of float)
-0:468          'r01' ( temp 2-component vector of float)
-0:468          vector-scale ( temp 2-component vector of float)
+0:468        move second child to first child ( temp float)
+0:468          'r00' ( temp float)
+0:468          component-wise multiply ( temp float)
+0:468            'inF1' ( in float)
 0:468            'inF0' ( in float)
-0:468            'inFV2' ( in 2-component vector of float)
 0:469      Sequence
-0:469        move second child to first child ( temp 3-component vector of float)
-0:469          'r02' ( temp 3-component vector of float)
-0:469          vector-scale ( temp 3-component vector of float)
+0:469        move second child to first child ( temp 2-component vector of float)
+0:469          'r01' ( temp 2-component vector of float)
+0:469          vector-scale ( temp 2-component vector of float)
 0:469            'inF0' ( in float)
-0:469            'inFV3' ( in 3-component vector of float)
+0:469            'inFV2' ( in 2-component vector of float)
 0:470      Sequence
-0:470        move second child to first child ( temp 2-component vector of float)
-0:470          'r03' ( temp 2-component vector of float)
-0:470          vector-scale ( temp 2-component vector of float)
-0:470            'inFV2' ( in 2-component vector of float)
+0:470        move second child to first child ( temp 3-component vector of float)
+0:470          'r02' ( temp 3-component vector of float)
+0:470          vector-scale ( temp 3-component vector of float)
 0:470            'inF0' ( in float)
+0:470            'inFV3' ( in 3-component vector of float)
 0:471      Sequence
-0:471        move second child to first child ( temp 3-component vector of float)
-0:471          'r04' ( temp 3-component vector of float)
-0:471          vector-scale ( temp 3-component vector of float)
-0:471            'inFV3' ( in 3-component vector of float)
+0:471        move second child to first child ( temp 2-component vector of float)
+0:471          'r03' ( temp 2-component vector of float)
+0:471          vector-scale ( temp 2-component vector of float)
+0:471            'inFV2' ( in 2-component vector of float)
 0:471            'inF0' ( in float)
 0:472      Sequence
-0:472        move second child to first child ( temp float)
-0:472          'r05' ( temp float)
-0:472          dot-product ( temp float)
-0:472            'inFV2' ( in 2-component vector of float)
-0:472            'inFV2' ( in 2-component vector of float)
+0:472        move second child to first child ( temp 3-component vector of float)
+0:472          'r04' ( temp 3-component vector of float)
+0:472          vector-scale ( temp 3-component vector of float)
+0:472            'inFV3' ( in 3-component vector of float)
+0:472            'inF0' ( in float)
 0:473      Sequence
 0:473        move second child to first child ( temp float)
-0:473          'r06' ( temp float)
+0:473          'r05' ( temp float)
 0:473          dot-product ( temp float)
-0:473            'inFV3' ( in 3-component vector of float)
-0:473            'inFV3' ( in 3-component vector of float)
+0:473            'inFV2' ( in 2-component vector of float)
+0:473            'inFV2' ( in 2-component vector of float)
 0:474      Sequence
-0:474        move second child to first child ( temp 3-component vector of float)
-0:474          'r07' ( temp 3-component vector of float)
-0:474          matrix-times-vector ( temp 3-component vector of float)
-0:474            'inFM2x3' ( in 2X3 matrix of float)
-0:474            'inFV2' ( in 2-component vector of float)
+0:474        move second child to first child ( temp float)
+0:474          'r06' ( temp float)
+0:474          dot-product ( temp float)
+0:474            'inFV3' ( in 3-component vector of float)
+0:474            'inFV3' ( in 3-component vector of float)
 0:475      Sequence
-0:475        move second child to first child ( temp 2-component vector of float)
-0:475          'r08' ( temp 2-component vector of float)
-0:475          matrix-times-vector ( temp 2-component vector of float)
-0:475            'inFM3x2' ( in 3X2 matrix of float)
-0:475            'inFV3' ( in 3-component vector of float)
+0:475        move second child to first child ( temp 3-component vector of float)
+0:475          'r07' ( temp 3-component vector of float)
+0:475          matrix-times-vector ( temp 3-component vector of float)
+0:475            'inFM2x3' ( in 2X3 matrix of float)
+0:475            'inFV2' ( in 2-component vector of float)
 0:476      Sequence
 0:476        move second child to first child ( temp 2-component vector of float)
-0:476          'r09' ( temp 2-component vector of float)
-0:476          vector-times-matrix ( temp 2-component vector of float)
+0:476          'r08' ( temp 2-component vector of float)
+0:476          matrix-times-vector ( temp 2-component vector of float)
+0:476            'inFM3x2' ( in 3X2 matrix of float)
 0:476            'inFV3' ( in 3-component vector of float)
-0:476            'inFM2x3' ( in 2X3 matrix of float)
 0:477      Sequence
-0:477        move second child to first child ( temp 3-component vector of float)
-0:477          'r10' ( temp 3-component vector of float)
-0:477          vector-times-matrix ( temp 3-component vector of float)
-0:477            'inFV2' ( in 2-component vector of float)
-0:477            'inFM3x2' ( in 3X2 matrix of float)
+0:477        move second child to first child ( temp 2-component vector of float)
+0:477          'r09' ( temp 2-component vector of float)
+0:477          vector-times-matrix ( temp 2-component vector of float)
+0:477            'inFV3' ( in 3-component vector of float)
+0:477            'inFM2x3' ( in 2X3 matrix of float)
 0:478      Sequence
-0:478        move second child to first child ( temp 2X3 matrix of float)
-0:478          'r11' ( temp 2X3 matrix of float)
-0:478          matrix-scale ( temp 2X3 matrix of float)
-0:478            'inF0' ( in float)
-0:478            'inFM2x3' ( in 2X3 matrix of float)
+0:478        move second child to first child ( temp 3-component vector of float)
+0:478          'r10' ( temp 3-component vector of float)
+0:478          vector-times-matrix ( temp 3-component vector of float)
+0:478            'inFV2' ( in 2-component vector of float)
+0:478            'inFM3x2' ( in 3X2 matrix of float)
 0:479      Sequence
-0:479        move second child to first child ( temp 3X2 matrix of float)
-0:479          'r12' ( temp 3X2 matrix of float)
-0:479          matrix-scale ( temp 3X2 matrix of float)
+0:479        move second child to first child ( temp 2X3 matrix of float)
+0:479          'r11' ( temp 2X3 matrix of float)
+0:479          matrix-scale ( temp 2X3 matrix of float)
 0:479            'inF0' ( in float)
-0:479            'inFM3x2' ( in 3X2 matrix of float)
+0:479            'inFM2x3' ( in 2X3 matrix of float)
 0:480      Sequence
-0:480        move second child to first child ( temp 2X2 matrix of float)
-0:480          'r13' ( temp 2X2 matrix of float)
-0:480          matrix-multiply ( temp 2X2 matrix of float)
+0:480        move second child to first child ( temp 3X2 matrix of float)
+0:480          'r12' ( temp 3X2 matrix of float)
+0:480          matrix-scale ( temp 3X2 matrix of float)
+0:480            'inF0' ( in float)
 0:480            'inFM3x2' ( in 3X2 matrix of float)
-0:480            'inFM2x3' ( in 2X3 matrix of float)
 0:481      Sequence
-0:481        move second child to first child ( temp 2X3 matrix of float)
-0:481          'r14' ( temp 2X3 matrix of float)
-0:481          matrix-multiply ( temp 2X3 matrix of float)
-0:481            'inFM3x3' ( in 3X3 matrix of float)
+0:481        move second child to first child ( temp 2X2 matrix of float)
+0:481          'r13' ( temp 2X2 matrix of float)
+0:481          matrix-multiply ( temp 2X2 matrix of float)
+0:481            'inFM3x2' ( in 3X2 matrix of float)
 0:481            'inFM2x3' ( in 2X3 matrix of float)
 0:482      Sequence
-0:482        move second child to first child ( temp 2X4 matrix of float)
-0:482          'r15' ( temp 2X4 matrix of float)
-0:482          matrix-multiply ( temp 2X4 matrix of float)
-0:482            'inFM3x4' ( in 3X4 matrix of float)
+0:482        move second child to first child ( temp 2X3 matrix of float)
+0:482          'r14' ( temp 2X3 matrix of float)
+0:482          matrix-multiply ( temp 2X3 matrix of float)
+0:482            'inFM3x3' ( in 3X3 matrix of float)
 0:482            'inFM2x3' ( in 2X3 matrix of float)
 0:483      Sequence
-0:483        move second child to first child ( temp 3X4 matrix of float)
-0:483          'r16' ( temp 3X4 matrix of float)
-0:483          matrix-multiply ( temp 3X4 matrix of float)
-0:483            'inFM2x4' ( in 2X4 matrix of float)
-0:483            'inFM3x2' ( in 3X2 matrix of float)
-0:489  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:489    Function Parameters: 
+0:483        move second child to first child ( temp 2X4 matrix of float)
+0:483          'r15' ( temp 2X4 matrix of float)
+0:483          matrix-multiply ( temp 2X4 matrix of float)
+0:483            'inFM3x4' ( in 3X4 matrix of float)
+0:483            'inFM2x3' ( in 2X3 matrix of float)
+0:484      Sequence
+0:484        move second child to first child ( temp 3X4 matrix of float)
+0:484          'r16' ( temp 3X4 matrix of float)
+0:484          matrix-multiply ( temp 3X4 matrix of float)
+0:484            'inFM2x4' ( in 2X4 matrix of float)
+0:484            'inFM3x2' ( in 3X2 matrix of float)
+0:490  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:490    Function Parameters: 
 0:?     Sequence
-0:491      move second child to first child ( temp 4-component vector of float)
-0:491        color: direct index for structure ( temp 4-component vector of float)
-0:491          'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:491          Constant:
-0:491            0 (const int)
-0:491        Constant:
-0:491          1.000000
-0:491          1.000000
-0:491          1.000000
-0:491          1.000000
-0:492      Branch: Return with expression
-0:492        'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:489  Function Definition: main( ( temp void)
-0:489    Function Parameters: 
+0:492      move second child to first child ( temp 4-component vector of float)
+0:492        color: direct index for structure ( temp 4-component vector of float)
+0:492          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:492          Constant:
+0:492            0 (const int)
+0:492        Constant:
+0:492          1.000000
+0:492          1.000000
+0:492          1.000000
+0:492          1.000000
+0:493      Branch: Return with expression
+0:493        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:490  Function Definition: main( ( temp void)
+0:490    Function Parameters: 
 0:?     Sequence
-0:489      Sequence
-0:489        move second child to first child ( temp 4-component vector of float)
+0:490      Sequence
+0:490        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:489          color: direct index for structure ( temp 4-component vector of float)
-0:489            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:489            Constant:
-0:489              0 (const int)
+0:490          color: direct index for structure ( temp 4-component vector of float)
+0:490            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:490            Constant:
+0:490              0 (const int)
 0:?   Linker Objects
 0:?     'gs_ua' ( shared uint)
 0:?     'gs_ub' ( shared uint)
@@ -5645,14 +5659,14 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 1836
+// Generated by (magic number): 80008
+// Id's are bound by 1839
 
                               Capability Shader
                               Capability DerivativeControl
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 1817
+                              EntryPoint Fragment 4  "main" 1820
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -5759,416 +5773,417 @@
                               Name 235  "r030"
                               Name 238  "r031"
                               Name 241  "r033"
-                              Name 245  "r034"
-                              Name 248  "r036"
-                              Name 251  "r037"
-                              Name 254  "r038"
-                              Name 257  "r039"
-                              Name 261  "r039a"
-                              Name 266  "r040"
-                              Name 269  "r041"
-                              Name 274  "r042"
-                              Name 277  "r043"
-                              Name 281  "r044"
-                              Name 285  "r045"
-                              Name 289  "r046"
-                              Name 292  "r047"
-                              Name 296  "r048"
-                              Name 300  "r049"
-                              Name 303  "r050"
-                              Name 306  "r051"
-                              Name 309  "r052"
-                              Name 312  "r053"
-                              Name 319  "r055"
-                              Name 322  "r056"
-                              Name 327  "r057"
-                              Name 330  "r058"
-                              Name 334  "r059"
-                              Name 337  "r060"
-                              Name 340  "r061"
-                              Name 347  "r000"
-                              Name 353  "r001"
-                              Name 356  "r002"
-                              Name 359  "r003"
-                              Name 363  "r004"
-                              Name 368  "r005"
-                              Name 371  "r006"
-                              Name 374  "r007"
-                              Name 377  "r009"
-                              Name 380  "r010"
-                              Name 384  "r011"
-                              Name 387  "r012"
-                              Name 406  "r013"
-                              Name 409  "r015"
-                              Name 412  "r016"
-                              Name 416  "r017"
-                              Name 419  "r018"
-                              Name 422  "r019"
-                              Name 425  "r020"
-                              Name 428  "r021"
-                              Name 431  "r022"
-                              Name 434  "r023"
-                              Name 437  "r026"
-                              Name 441  "r027"
-                              Name 445  "r028"
-                              Name 448  "r029"
-                              Name 451  "r030"
-                              Name 456  "r031"
-                              Name 461  "r032"
-                              Name 463  "r033"
-                              Name 466  "r035"
-                              Name 470  "r036"
-                              Name 473  "r038"
-                              Name 477  "r039"
-                              Name 480  "r040"
-                              Name 483  "r041"
-                              Name 487  "r039a"
-                              Name 492  "r042"
-                              Name 495  "r043"
-                              Name 498  "r044"
-                              Name 502  "r045"
-                              Name 505  "r046"
-                              Name 509  "r047"
-                              Name 513  "r048"
-                              Name 516  "r049"
-                              Name 520  "r050"
-                              Name 523  "r051"
-                              Name 527  "r052"
-                              Name 531  "r053"
-                              Name 536  "r054"
-                              Name 541  "r055"
-                              Name 544  "r056"
-                              Name 547  "r057"
-                              Name 552  "r058"
-                              Name 555  "r059"
-                              Name 562  "r060"
-                              Name 565  "r061"
-                              Name 570  "r062"
-                              Name 573  "r063"
-                              Name 577  "r064"
-                              Name 580  "r065"
-                              Name 583  "r066"
-                              Name 589  "r000"
-                              Name 595  "r001"
-                              Name 598  "r002"
-                              Name 601  "r003"
-                              Name 605  "r004"
-                              Name 610  "r005"
-                              Name 613  "r006"
-                              Name 616  "r007"
-                              Name 619  "r009"
-                              Name 622  "r010"
-                              Name 626  "r011"
-                              Name 629  "r012"
-                              Name 647  "r013"
-                              Name 650  "r014"
-                              Name 653  "r015"
-                              Name 658  "r016"
-                              Name 662  "r017"
-                              Name 665  "r018"
-                              Name 668  "r019"
-                              Name 671  "r020"
-                              Name 674  "r021"
-                              Name 677  "r022"
-                              Name 680  "r023"
-                              Name 683  "r024"
-                              Name 687  "r025"
-                              Name 691  "r029"
-                              Name 694  "r030"
-                              Name 697  "r031"
-                              Name 702  "r032"
-                              Name 706  "r033"
-                              Name 708  "r034"
-                              Name 711  "r036"
-                              Name 715  "r037"
-                              Name 718  "r039"
-                              Name 722  "r040"
-                              Name 725  "r041"
-                              Name 728  "r042"
-                              Name 732  "r039a"
-                              Name 737  "r039b"
-                              Name 743  "r043"
-                              Name 746  "r044"
-                              Name 749  "r045"
-                              Name 753  "r046"
-                              Name 756  "r047"
-                              Name 760  "r048"
-                              Name 764  "r049"
-                              Name 767  "r050"
-                              Name 771  "r051"
-                              Name 774  "r052"
-                              Name 778  "r053"
-                              Name 782  "r054"
-                              Name 786  "r055"
-                              Name 789  "r056"
-                              Name 792  "r057"
-                              Name 795  "r058"
-                              Name 800  "r059"
-                              Name 803  "r060"
-                              Name 810  "r061"
-                              Name 813  "r062"
-                              Name 818  "r063"
-                              Name 821  "r064"
-                              Name 825  "r065"
-                              Name 828  "r066"
-                              Name 831  "r067"
-                              Name 838  "r000"
-                              Name 844  "r001"
-                              Name 847  "r002"
-                              Name 850  "r003"
-                              Name 854  "r004"
-                              Name 859  "r005"
-                              Name 862  "r006"
-                              Name 865  "r007"
-                              Name 868  "r009"
-                              Name 871  "r010"
-                              Name 875  "r011"
-                              Name 878  "r012"
-                              Name 896  "r013"
-                              Name 899  "r014"
-                              Name 902  "r015"
-                              Name 905  "r016"
-                              Name 908  "r017"
-                              Name 911  "r018"
-                              Name 914  "r019"
-                              Name 917  "r020"
-                              Name 920  "r021"
-                              Name 923  "r022"
-                              Name 926  "r023"
-                              Name 930  "r024"
-                              Name 934  "r025"
-                              Name 945  "r029"
-                              Name 948  "r030"
-                              Name 951  "r031"
-                              Name 956  "r032"
-                              Name 961  "r033"
-                              Name 963  "r034"
-                              Name 966  "r036"
-                              Name 970  "r037"
-                              Name 973  "r039"
-                              Name 977  "r040"
-                              Name 980  "r041"
-                              Name 983  "r042"
-                              Name 987  "r039a"
-                              Name 992  "r043"
-                              Name 995  "r044"
-                              Name 998  "r045"
-                              Name 1002  "r046"
-                              Name 1005  "r047"
-                              Name 1009  "r048"
-                              Name 1013  "r049"
-                              Name 1016  "r050"
-                              Name 1020  "r051"
-                              Name 1023  "r052"
-                              Name 1027  "r053"
-                              Name 1031  "r054"
-                              Name 1035  "r055"
-                              Name 1038  "r056"
-                              Name 1041  "r057"
-                              Name 1044  "r058"
-                              Name 1049  "r059"
-                              Name 1052  "r060"
-                              Name 1059  "r061"
-                              Name 1062  "r062"
-                              Name 1067  "r063"
-                              Name 1070  "r064"
-                              Name 1074  "r065"
-                              Name 1077  "r066"
-                              Name 1080  "r067"
-                              Name 1087  "r000"
-                              Name 1092  "r001"
-                              Name 1097  "r003"
-                              Name 1101  "r004"
-                              Name 1104  "r005"
-                              Name 1107  "r006"
-                              Name 1111  "r007"
-                              Name 1121  "r008"
-                              Name 1126  "r009"
-                              Name 1129  "r010"
-                              Name 1132  "r011"
-                              Name 1135  "r012"
-                              Name 1138  "r013"
-                              Name 1141  "r014"
-                              Name 1144  "r015"
-                              Name 1147  "r016"
-                              Name 1150  "r017"
-                              Name 1153  "r018"
-                              Name 1156  "r019"
-                              Name 1159  "R020"
-                              Name 1162  "r021"
-                              Name 1165  "r022"
-                              Name 1175  "r023"
-                              Name 1178  "r025"
-                              Name 1181  "r026"
-                              Name 1185  "r026a"
-                              Name 1190  "r027"
-                              Name 1193  "r028"
-                              Name 1197  "r029"
-                              Name 1200  "r030"
-                              Name 1204  "r031"
-                              Name 1208  "r032"
-                              Name 1212  "r033"
-                              Name 1215  "r034"
-                              Name 1218  "r035"
-                              Name 1221  "r036"
-                              Name 1226  "r037"
-                              Name 1229  "r038"
-                              Name 1236  "r039"
-                              Name 1239  "r049"
-                              Name 1244  "r041"
-                              Name 1247  "r042"
-                              Name 1251  "r043"
-                              Name 1254  "r044"
-                              Name 1259  "r046"
-                              Name 1266  "r000"
-                              Name 1271  "r001"
-                              Name 1276  "r003"
-                              Name 1280  "r004"
-                              Name 1283  "r005"
-                              Name 1286  "r006"
-                              Name 1290  "r007"
-                              Name 1300  "r008"
-                              Name 1305  "r009"
-                              Name 1308  "r010"
-                              Name 1311  "r011"
-                              Name 1314  "r012"
-                              Name 1317  "r013"
-                              Name 1320  "r014"
-                              Name 1323  "r015"
-                              Name 1326  "r016"
-                              Name 1329  "r017"
-                              Name 1332  "r018"
-                              Name 1335  "r019"
-                              Name 1338  "R020"
-                              Name 1341  "r021"
-                              Name 1344  "r022"
-                              Name 1357  "r023"
-                              Name 1360  "r025"
-                              Name 1363  "r026"
-                              Name 1367  "r026a"
-                              Name 1372  "r027"
-                              Name 1375  "r028"
-                              Name 1379  "r029"
-                              Name 1382  "r030"
-                              Name 1386  "r031"
-                              Name 1390  "r032"
-                              Name 1394  "r033"
-                              Name 1397  "r034"
-                              Name 1400  "r035"
-                              Name 1403  "r036"
-                              Name 1408  "r037"
-                              Name 1411  "r038"
-                              Name 1418  "r039"
-                              Name 1421  "r049"
-                              Name 1426  "r041"
-                              Name 1429  "r042"
-                              Name 1433  "r043"
-                              Name 1436  "r044"
-                              Name 1441  "r046"
-                              Name 1448  "r000"
-                              Name 1453  "r001"
-                              Name 1458  "r003"
-                              Name 1462  "r004"
-                              Name 1465  "r005"
-                              Name 1468  "r006"
-                              Name 1472  "r007"
-                              Name 1482  "r008"
-                              Name 1487  "r009"
-                              Name 1490  "r010"
-                              Name 1493  "r011"
-                              Name 1496  "r012"
-                              Name 1499  "r013"
-                              Name 1502  "r014"
-                              Name 1505  "r015"
-                              Name 1508  "r016"
-                              Name 1511  "r017"
-                              Name 1514  "r018"
-                              Name 1517  "r019"
-                              Name 1520  "R020"
-                              Name 1523  "r021"
-                              Name 1526  "r022"
-                              Name 1542  "r023"
-                              Name 1545  "r025"
-                              Name 1548  "r026"
-                              Name 1552  "r026a"
-                              Name 1557  "r027"
-                              Name 1560  "r028"
-                              Name 1564  "r029"
-                              Name 1567  "r030"
-                              Name 1571  "r031"
-                              Name 1575  "r032"
-                              Name 1579  "r033"
-                              Name 1582  "r034"
-                              Name 1585  "r035"
-                              Name 1588  "r036"
-                              Name 1593  "r037"
-                              Name 1596  "r038"
-                              Name 1603  "r039"
-                              Name 1606  "r049"
-                              Name 1611  "r041"
-                              Name 1614  "r042"
-                              Name 1618  "r043"
-                              Name 1621  "r044"
-                              Name 1626  "r046"
-                              Name 1633  "r0"
-                              Name 1637  "r1"
-                              Name 1641  "r2"
-                              Name 1645  "r3"
-                              Name 1649  "r4"
-                              Name 1653  "r5"
-                              Name 1657  "r6"
-                              Name 1661  "r7"
-                              Name 1665  "r8"
-                              Name 1669  "r0"
-                              Name 1673  "r1"
-                              Name 1677  "r2"
-                              Name 1681  "r3"
-                              Name 1685  "r4"
-                              Name 1689  "r5"
-                              Name 1693  "r6"
-                              Name 1697  "r7"
-                              Name 1701  "r8"
-                              Name 1705  "r0"
-                              Name 1709  "r1"
-                              Name 1713  "r2"
-                              Name 1717  "r3"
-                              Name 1721  "r4"
-                              Name 1725  "r5"
-                              Name 1729  "r6"
-                              Name 1733  "r7"
-                              Name 1737  "r8"
-                              Name 1741  "r00"
-                              Name 1745  "r01"
-                              Name 1749  "r02"
-                              Name 1753  "r03"
-                              Name 1757  "r04"
-                              Name 1761  "r05"
-                              Name 1765  "r06"
-                              Name 1769  "r07"
-                              Name 1773  "r08"
-                              Name 1777  "r09"
-                              Name 1781  "r10"
-                              Name 1785  "r11"
-                              Name 1789  "r12"
-                              Name 1793  "r13"
-                              Name 1797  "r14"
-                              Name 1801  "r15"
-                              Name 1805  "r16"
-                              Name 1810  "ps_output"
-                              Name 1817  "@entryPointOutput.color"
-                              Name 1821  "gs_ua"
-                              Name 1822  "gs_ub"
-                              Name 1823  "gs_uc"
-                              Name 1825  "gs_ua2"
-                              Name 1826  "gs_ub2"
-                              Name 1827  "gs_uc2"
-                              Name 1829  "gs_ua3"
-                              Name 1830  "gs_ub3"
-                              Name 1831  "gs_uc3"
-                              Name 1833  "gs_ua4"
-                              Name 1834  "gs_ub4"
-                              Name 1835  "gs_uc4"
-                              Decorate 1817(@entryPointOutput.color) Location 0
+                              Name 245  "r033i"
+                              Name 249  "r034"
+                              Name 252  "r036"
+                              Name 255  "r037"
+                              Name 258  "r038"
+                              Name 261  "r039"
+                              Name 265  "r039a"
+                              Name 270  "r040"
+                              Name 273  "r041"
+                              Name 278  "r042"
+                              Name 281  "r043"
+                              Name 285  "r044"
+                              Name 289  "r045"
+                              Name 293  "r046"
+                              Name 296  "r047"
+                              Name 300  "r048"
+                              Name 304  "r049"
+                              Name 307  "r050"
+                              Name 310  "r051"
+                              Name 313  "r052"
+                              Name 316  "r053"
+                              Name 323  "r055"
+                              Name 326  "r056"
+                              Name 331  "r057"
+                              Name 334  "r058"
+                              Name 338  "r059"
+                              Name 341  "r060"
+                              Name 344  "r061"
+                              Name 351  "r000"
+                              Name 357  "r001"
+                              Name 360  "r002"
+                              Name 363  "r003"
+                              Name 367  "r004"
+                              Name 372  "r005"
+                              Name 375  "r006"
+                              Name 378  "r007"
+                              Name 381  "r009"
+                              Name 384  "r010"
+                              Name 388  "r011"
+                              Name 391  "r012"
+                              Name 410  "r013"
+                              Name 413  "r015"
+                              Name 416  "r016"
+                              Name 420  "r017"
+                              Name 423  "r018"
+                              Name 426  "r019"
+                              Name 429  "r020"
+                              Name 432  "r021"
+                              Name 435  "r022"
+                              Name 438  "r023"
+                              Name 441  "r026"
+                              Name 445  "r027"
+                              Name 449  "r028"
+                              Name 452  "r029"
+                              Name 455  "r030"
+                              Name 460  "r031"
+                              Name 465  "r032"
+                              Name 467  "r033"
+                              Name 470  "r035"
+                              Name 474  "r036"
+                              Name 477  "r038"
+                              Name 481  "r039"
+                              Name 484  "r040"
+                              Name 487  "r041"
+                              Name 491  "r039a"
+                              Name 496  "r042"
+                              Name 499  "r043"
+                              Name 502  "r044"
+                              Name 506  "r045"
+                              Name 509  "r046"
+                              Name 513  "r047"
+                              Name 517  "r048"
+                              Name 520  "r049"
+                              Name 524  "r050"
+                              Name 527  "r051"
+                              Name 531  "r052"
+                              Name 535  "r053"
+                              Name 539  "r054"
+                              Name 544  "r055"
+                              Name 547  "r056"
+                              Name 550  "r057"
+                              Name 555  "r058"
+                              Name 558  "r059"
+                              Name 565  "r060"
+                              Name 568  "r061"
+                              Name 573  "r062"
+                              Name 576  "r063"
+                              Name 580  "r064"
+                              Name 583  "r065"
+                              Name 586  "r066"
+                              Name 592  "r000"
+                              Name 598  "r001"
+                              Name 601  "r002"
+                              Name 604  "r003"
+                              Name 608  "r004"
+                              Name 613  "r005"
+                              Name 616  "r006"
+                              Name 619  "r007"
+                              Name 622  "r009"
+                              Name 625  "r010"
+                              Name 629  "r011"
+                              Name 632  "r012"
+                              Name 650  "r013"
+                              Name 653  "r014"
+                              Name 656  "r015"
+                              Name 661  "r016"
+                              Name 665  "r017"
+                              Name 668  "r018"
+                              Name 671  "r019"
+                              Name 674  "r020"
+                              Name 677  "r021"
+                              Name 680  "r022"
+                              Name 683  "r023"
+                              Name 686  "r024"
+                              Name 690  "r025"
+                              Name 694  "r029"
+                              Name 697  "r030"
+                              Name 700  "r031"
+                              Name 705  "r032"
+                              Name 709  "r033"
+                              Name 711  "r034"
+                              Name 714  "r036"
+                              Name 718  "r037"
+                              Name 721  "r039"
+                              Name 725  "r040"
+                              Name 728  "r041"
+                              Name 731  "r042"
+                              Name 735  "r039a"
+                              Name 740  "r039b"
+                              Name 746  "r043"
+                              Name 749  "r044"
+                              Name 752  "r045"
+                              Name 756  "r046"
+                              Name 759  "r047"
+                              Name 763  "r048"
+                              Name 767  "r049"
+                              Name 770  "r050"
+                              Name 774  "r051"
+                              Name 777  "r052"
+                              Name 781  "r053"
+                              Name 785  "r054"
+                              Name 789  "r055"
+                              Name 792  "r056"
+                              Name 795  "r057"
+                              Name 798  "r058"
+                              Name 803  "r059"
+                              Name 806  "r060"
+                              Name 813  "r061"
+                              Name 816  "r062"
+                              Name 821  "r063"
+                              Name 824  "r064"
+                              Name 828  "r065"
+                              Name 831  "r066"
+                              Name 834  "r067"
+                              Name 841  "r000"
+                              Name 847  "r001"
+                              Name 850  "r002"
+                              Name 853  "r003"
+                              Name 857  "r004"
+                              Name 862  "r005"
+                              Name 865  "r006"
+                              Name 868  "r007"
+                              Name 871  "r009"
+                              Name 874  "r010"
+                              Name 878  "r011"
+                              Name 881  "r012"
+                              Name 899  "r013"
+                              Name 902  "r014"
+                              Name 905  "r015"
+                              Name 908  "r016"
+                              Name 911  "r017"
+                              Name 914  "r018"
+                              Name 917  "r019"
+                              Name 920  "r020"
+                              Name 923  "r021"
+                              Name 926  "r022"
+                              Name 929  "r023"
+                              Name 933  "r024"
+                              Name 937  "r025"
+                              Name 948  "r029"
+                              Name 951  "r030"
+                              Name 954  "r031"
+                              Name 959  "r032"
+                              Name 964  "r033"
+                              Name 966  "r034"
+                              Name 969  "r036"
+                              Name 973  "r037"
+                              Name 976  "r039"
+                              Name 980  "r040"
+                              Name 983  "r041"
+                              Name 986  "r042"
+                              Name 990  "r039a"
+                              Name 995  "r043"
+                              Name 998  "r044"
+                              Name 1001  "r045"
+                              Name 1005  "r046"
+                              Name 1008  "r047"
+                              Name 1012  "r048"
+                              Name 1016  "r049"
+                              Name 1019  "r050"
+                              Name 1023  "r051"
+                              Name 1026  "r052"
+                              Name 1030  "r053"
+                              Name 1034  "r054"
+                              Name 1038  "r055"
+                              Name 1041  "r056"
+                              Name 1044  "r057"
+                              Name 1047  "r058"
+                              Name 1052  "r059"
+                              Name 1055  "r060"
+                              Name 1062  "r061"
+                              Name 1065  "r062"
+                              Name 1070  "r063"
+                              Name 1073  "r064"
+                              Name 1077  "r065"
+                              Name 1080  "r066"
+                              Name 1083  "r067"
+                              Name 1090  "r000"
+                              Name 1095  "r001"
+                              Name 1100  "r003"
+                              Name 1104  "r004"
+                              Name 1107  "r005"
+                              Name 1110  "r006"
+                              Name 1114  "r007"
+                              Name 1124  "r008"
+                              Name 1129  "r009"
+                              Name 1132  "r010"
+                              Name 1135  "r011"
+                              Name 1138  "r012"
+                              Name 1141  "r013"
+                              Name 1144  "r014"
+                              Name 1147  "r015"
+                              Name 1150  "r016"
+                              Name 1153  "r017"
+                              Name 1156  "r018"
+                              Name 1159  "r019"
+                              Name 1162  "R020"
+                              Name 1165  "r021"
+                              Name 1168  "r022"
+                              Name 1178  "r023"
+                              Name 1181  "r025"
+                              Name 1184  "r026"
+                              Name 1188  "r026a"
+                              Name 1193  "r027"
+                              Name 1196  "r028"
+                              Name 1200  "r029"
+                              Name 1203  "r030"
+                              Name 1207  "r031"
+                              Name 1211  "r032"
+                              Name 1215  "r033"
+                              Name 1218  "r034"
+                              Name 1221  "r035"
+                              Name 1224  "r036"
+                              Name 1229  "r037"
+                              Name 1232  "r038"
+                              Name 1239  "r039"
+                              Name 1242  "r049"
+                              Name 1247  "r041"
+                              Name 1250  "r042"
+                              Name 1254  "r043"
+                              Name 1257  "r044"
+                              Name 1262  "r046"
+                              Name 1269  "r000"
+                              Name 1274  "r001"
+                              Name 1279  "r003"
+                              Name 1283  "r004"
+                              Name 1286  "r005"
+                              Name 1289  "r006"
+                              Name 1293  "r007"
+                              Name 1303  "r008"
+                              Name 1308  "r009"
+                              Name 1311  "r010"
+                              Name 1314  "r011"
+                              Name 1317  "r012"
+                              Name 1320  "r013"
+                              Name 1323  "r014"
+                              Name 1326  "r015"
+                              Name 1329  "r016"
+                              Name 1332  "r017"
+                              Name 1335  "r018"
+                              Name 1338  "r019"
+                              Name 1341  "R020"
+                              Name 1344  "r021"
+                              Name 1347  "r022"
+                              Name 1360  "r023"
+                              Name 1363  "r025"
+                              Name 1366  "r026"
+                              Name 1370  "r026a"
+                              Name 1375  "r027"
+                              Name 1378  "r028"
+                              Name 1382  "r029"
+                              Name 1385  "r030"
+                              Name 1389  "r031"
+                              Name 1393  "r032"
+                              Name 1397  "r033"
+                              Name 1400  "r034"
+                              Name 1403  "r035"
+                              Name 1406  "r036"
+                              Name 1411  "r037"
+                              Name 1414  "r038"
+                              Name 1421  "r039"
+                              Name 1424  "r049"
+                              Name 1429  "r041"
+                              Name 1432  "r042"
+                              Name 1436  "r043"
+                              Name 1439  "r044"
+                              Name 1444  "r046"
+                              Name 1451  "r000"
+                              Name 1456  "r001"
+                              Name 1461  "r003"
+                              Name 1465  "r004"
+                              Name 1468  "r005"
+                              Name 1471  "r006"
+                              Name 1475  "r007"
+                              Name 1485  "r008"
+                              Name 1490  "r009"
+                              Name 1493  "r010"
+                              Name 1496  "r011"
+                              Name 1499  "r012"
+                              Name 1502  "r013"
+                              Name 1505  "r014"
+                              Name 1508  "r015"
+                              Name 1511  "r016"
+                              Name 1514  "r017"
+                              Name 1517  "r018"
+                              Name 1520  "r019"
+                              Name 1523  "R020"
+                              Name 1526  "r021"
+                              Name 1529  "r022"
+                              Name 1545  "r023"
+                              Name 1548  "r025"
+                              Name 1551  "r026"
+                              Name 1555  "r026a"
+                              Name 1560  "r027"
+                              Name 1563  "r028"
+                              Name 1567  "r029"
+                              Name 1570  "r030"
+                              Name 1574  "r031"
+                              Name 1578  "r032"
+                              Name 1582  "r033"
+                              Name 1585  "r034"
+                              Name 1588  "r035"
+                              Name 1591  "r036"
+                              Name 1596  "r037"
+                              Name 1599  "r038"
+                              Name 1606  "r039"
+                              Name 1609  "r049"
+                              Name 1614  "r041"
+                              Name 1617  "r042"
+                              Name 1621  "r043"
+                              Name 1624  "r044"
+                              Name 1629  "r046"
+                              Name 1636  "r0"
+                              Name 1640  "r1"
+                              Name 1644  "r2"
+                              Name 1648  "r3"
+                              Name 1652  "r4"
+                              Name 1656  "r5"
+                              Name 1660  "r6"
+                              Name 1664  "r7"
+                              Name 1668  "r8"
+                              Name 1672  "r0"
+                              Name 1676  "r1"
+                              Name 1680  "r2"
+                              Name 1684  "r3"
+                              Name 1688  "r4"
+                              Name 1692  "r5"
+                              Name 1696  "r6"
+                              Name 1700  "r7"
+                              Name 1704  "r8"
+                              Name 1708  "r0"
+                              Name 1712  "r1"
+                              Name 1716  "r2"
+                              Name 1720  "r3"
+                              Name 1724  "r4"
+                              Name 1728  "r5"
+                              Name 1732  "r6"
+                              Name 1736  "r7"
+                              Name 1740  "r8"
+                              Name 1744  "r00"
+                              Name 1748  "r01"
+                              Name 1752  "r02"
+                              Name 1756  "r03"
+                              Name 1760  "r04"
+                              Name 1764  "r05"
+                              Name 1768  "r06"
+                              Name 1772  "r07"
+                              Name 1776  "r08"
+                              Name 1780  "r09"
+                              Name 1784  "r10"
+                              Name 1788  "r11"
+                              Name 1792  "r12"
+                              Name 1796  "r13"
+                              Name 1800  "r14"
+                              Name 1804  "r15"
+                              Name 1808  "r16"
+                              Name 1813  "ps_output"
+                              Name 1820  "@entryPointOutput.color"
+                              Name 1824  "gs_ua"
+                              Name 1825  "gs_ub"
+                              Name 1826  "gs_uc"
+                              Name 1828  "gs_ua2"
+                              Name 1829  "gs_ub2"
+                              Name 1830  "gs_uc2"
+                              Name 1832  "gs_ua3"
+                              Name 1833  "gs_ub3"
+                              Name 1834  "gs_uc3"
+                              Name 1836  "gs_ua4"
+                              Name 1837  "gs_ub4"
+                              Name 1838  "gs_uc4"
+                              Decorate 1820(@entryPointOutput.color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -6222,91 +6237,91 @@
              141:    6(float) Constant 0
              187:     10(int) Constant 0
              199:     10(int) Constant 7
-             272:    6(float) Constant 1050288283
-             293:    6(float) Constant 1065353216
-             297:     10(int) Constant 2
-             349:             TypeVector 137(bool) 2
-             350:   26(fvec2) ConstantComposite 141 141
-             366:             TypeVector 10(int) 2
-             367:             TypePointer Function 366(ivec2)
-             399:      8(int) Constant 0
-             400:   28(ivec2) ConstantComposite 399 399
-             413:     10(int) Constant 3
-             414:  366(ivec2) ConstantComposite 199 413
-             457:      8(int) Constant 7
-             458:      8(int) Constant 8
-             459:   28(ivec2) ConstantComposite 457 458
-             476:             TypePointer Function 349(bvec2)
-             534:    6(float) Constant 1073741824
-             537:      8(int) Constant 1
-             538:      8(int) Constant 2
-             539:   28(ivec2) ConstantComposite 537 538
-             586:   26(fvec2) ConstantComposite 293 534
-             591:             TypeVector 137(bool) 3
-             592:   38(fvec3) ConstantComposite 141 141 141
-             608:             TypeVector 10(int) 3
-             609:             TypePointer Function 608(ivec3)
-             641:   40(ivec3) ConstantComposite 399 399 399
-             654:      8(int) Constant 3
-             655:      8(int) Constant 5
-             656:   40(ivec3) ConstantComposite 457 654 655
-             703:      8(int) Constant 4
-             704:   40(ivec3) ConstantComposite 538 654 703
-             721:             TypePointer Function 591(bvec3)
-             740:    6(float) Constant 1050253722
-             787:   40(ivec3) ConstantComposite 537 538 654
-             834:    6(float) Constant 1077936128
-             835:   38(fvec3) ConstantComposite 293 534 834
-             840:             TypeVector 137(bool) 4
-             841:   50(fvec4) ConstantComposite 141 141 141 141
-             857:             TypeVector 10(int) 4
-             858:             TypePointer Function 857(ivec4)
-             890:   52(ivec4) ConstantComposite 399 399 399 399
-             903:   52(ivec4) ConstantComposite 457 654 655 538
-             957:      8(int) Constant 9
-             958:      8(int) Constant 10
-             959:   52(ivec4) ConstantComposite 457 458 957 958
-             976:             TypePointer Function 840(bvec4)
-            1036:   52(ivec4) ConstantComposite 537 538 654 703
-            1083:    6(float) Constant 1082130432
-            1084:   50(fvec4) ConstantComposite 293 534 834 1083
-            1089:             TypeMatrix 349(bvec2) 2
-            1115:          62 ConstantComposite 350 350
-            1262:   26(fvec2) ConstantComposite 534 534
-            1263:          62 ConstantComposite 1262 1262
-            1268:             TypeMatrix 591(bvec3) 3
-            1294:          70 ConstantComposite 592 592 592
-            1444:   38(fvec3) ConstantComposite 834 834 834
-            1445:          70 ConstantComposite 1444 1444 1444
-            1450:             TypeMatrix 840(bvec4) 4
-            1476:          78 ConstantComposite 841 841 841 841
-            1629:   50(fvec4) ConstantComposite 1083 1083 1083 1083
-            1630:          78 ConstantComposite 1629 1629 1629 1629
-            1809:             TypePointer Function 133(PS_OUTPUT)
-            1811:   50(fvec4) ConstantComposite 293 293 293 293
-            1816:             TypePointer Output 50(fvec4)
-1817(@entryPointOutput.color):   1816(ptr) Variable Output
-            1820:             TypePointer Workgroup 8(int)
-     1821(gs_ua):   1820(ptr) Variable Workgroup
-     1822(gs_ub):   1820(ptr) Variable Workgroup
-     1823(gs_uc):   1820(ptr) Variable Workgroup
-            1824:             TypePointer Workgroup 28(ivec2)
-    1825(gs_ua2):   1824(ptr) Variable Workgroup
-    1826(gs_ub2):   1824(ptr) Variable Workgroup
-    1827(gs_uc2):   1824(ptr) Variable Workgroup
-            1828:             TypePointer Workgroup 40(ivec3)
-    1829(gs_ua3):   1828(ptr) Variable Workgroup
-    1830(gs_ub3):   1828(ptr) Variable Workgroup
-    1831(gs_uc3):   1828(ptr) Variable Workgroup
-            1832:             TypePointer Workgroup 52(ivec4)
-    1833(gs_ua4):   1832(ptr) Variable Workgroup
-    1834(gs_ub4):   1832(ptr) Variable Workgroup
-    1835(gs_uc4):   1832(ptr) Variable Workgroup
+             247:    6(float) Constant 1073741824
+             276:    6(float) Constant 1050288283
+             297:    6(float) Constant 1065353216
+             301:     10(int) Constant 2
+             353:             TypeVector 137(bool) 2
+             354:   26(fvec2) ConstantComposite 141 141
+             370:             TypeVector 10(int) 2
+             371:             TypePointer Function 370(ivec2)
+             403:      8(int) Constant 0
+             404:   28(ivec2) ConstantComposite 403 403
+             417:     10(int) Constant 3
+             418:  370(ivec2) ConstantComposite 199 417
+             461:      8(int) Constant 7
+             462:      8(int) Constant 8
+             463:   28(ivec2) ConstantComposite 461 462
+             480:             TypePointer Function 353(bvec2)
+             540:      8(int) Constant 1
+             541:      8(int) Constant 2
+             542:   28(ivec2) ConstantComposite 540 541
+             589:   26(fvec2) ConstantComposite 297 247
+             594:             TypeVector 137(bool) 3
+             595:   38(fvec3) ConstantComposite 141 141 141
+             611:             TypeVector 10(int) 3
+             612:             TypePointer Function 611(ivec3)
+             644:   40(ivec3) ConstantComposite 403 403 403
+             657:      8(int) Constant 3
+             658:      8(int) Constant 5
+             659:   40(ivec3) ConstantComposite 461 657 658
+             706:      8(int) Constant 4
+             707:   40(ivec3) ConstantComposite 541 657 706
+             724:             TypePointer Function 594(bvec3)
+             743:    6(float) Constant 1050253722
+             790:   40(ivec3) ConstantComposite 540 541 657
+             837:    6(float) Constant 1077936128
+             838:   38(fvec3) ConstantComposite 297 247 837
+             843:             TypeVector 137(bool) 4
+             844:   50(fvec4) ConstantComposite 141 141 141 141
+             860:             TypeVector 10(int) 4
+             861:             TypePointer Function 860(ivec4)
+             893:   52(ivec4) ConstantComposite 403 403 403 403
+             906:   52(ivec4) ConstantComposite 461 657 658 541
+             960:      8(int) Constant 9
+             961:      8(int) Constant 10
+             962:   52(ivec4) ConstantComposite 461 462 960 961
+             979:             TypePointer Function 843(bvec4)
+            1039:   52(ivec4) ConstantComposite 540 541 657 706
+            1086:    6(float) Constant 1082130432
+            1087:   50(fvec4) ConstantComposite 297 247 837 1086
+            1092:             TypeMatrix 353(bvec2) 2
+            1118:          62 ConstantComposite 354 354
+            1265:   26(fvec2) ConstantComposite 247 247
+            1266:          62 ConstantComposite 1265 1265
+            1271:             TypeMatrix 594(bvec3) 3
+            1297:          70 ConstantComposite 595 595 595
+            1447:   38(fvec3) ConstantComposite 837 837 837
+            1448:          70 ConstantComposite 1447 1447 1447
+            1453:             TypeMatrix 843(bvec4) 4
+            1479:          78 ConstantComposite 844 844 844 844
+            1632:   50(fvec4) ConstantComposite 1086 1086 1086 1086
+            1633:          78 ConstantComposite 1632 1632 1632 1632
+            1812:             TypePointer Function 133(PS_OUTPUT)
+            1814:   50(fvec4) ConstantComposite 297 297 297 297
+            1819:             TypePointer Output 50(fvec4)
+1820(@entryPointOutput.color):   1819(ptr) Variable Output
+            1823:             TypePointer Workgroup 8(int)
+     1824(gs_ua):   1823(ptr) Variable Workgroup
+     1825(gs_ub):   1823(ptr) Variable Workgroup
+     1826(gs_uc):   1823(ptr) Variable Workgroup
+            1827:             TypePointer Workgroup 28(ivec2)
+    1828(gs_ua2):   1827(ptr) Variable Workgroup
+    1829(gs_ub2):   1827(ptr) Variable Workgroup
+    1830(gs_uc2):   1827(ptr) Variable Workgroup
+            1831:             TypePointer Workgroup 40(ivec3)
+    1832(gs_ua3):   1831(ptr) Variable Workgroup
+    1833(gs_ub3):   1831(ptr) Variable Workgroup
+    1834(gs_uc3):   1831(ptr) Variable Workgroup
+            1835:             TypePointer Workgroup 52(ivec4)
+    1836(gs_ua4):   1835(ptr) Variable Workgroup
+    1837(gs_ub4):   1835(ptr) Variable Workgroup
+    1838(gs_uc4):   1835(ptr) Variable Workgroup
          4(main):           2 Function None 3
                5:             Label
-            1818:133(PS_OUTPUT) FunctionCall 135(@main()
-            1819:   50(fvec4) CompositeExtract 1818 0
-                              Store 1817(@entryPointOutput.color) 1819
+            1821:133(PS_OUTPUT) FunctionCall 135(@main()
+            1822:   50(fvec4) CompositeExtract 1821 0
+                              Store 1820(@entryPointOutput.color) 1822
                               Return
                               FunctionEnd
 18(PixelShaderFunctionS(f1;f1;f1;u1;i1;):    6(float) Function None 12
@@ -6345,33 +6360,34 @@
        235(r030):      9(ptr) Variable Function
        238(r031):      7(ptr) Variable Function
        241(r033):      7(ptr) Variable Function
-       245(r034):      7(ptr) Variable Function
-       248(r036):      7(ptr) Variable Function
-       251(r037):    138(ptr) Variable Function
-       254(r038):    138(ptr) Variable Function
-       257(r039):      7(ptr) Variable Function
-      261(r039a):      7(ptr) Variable Function
-       266(r040):      7(ptr) Variable Function
-       269(r041):      7(ptr) Variable Function
-       274(r042):      7(ptr) Variable Function
-       277(r043):      7(ptr) Variable Function
-       281(r044):      7(ptr) Variable Function
-       285(r045):      7(ptr) Variable Function
-       289(r046):      7(ptr) Variable Function
-       292(r047):      7(ptr) Variable Function
-       296(r048):      9(ptr) Variable Function
-       300(r049):      7(ptr) Variable Function
-       303(r050):      7(ptr) Variable Function
-       306(r051):      7(ptr) Variable Function
-       309(r052):      7(ptr) Variable Function
-       312(r053):      7(ptr) Variable Function
-       319(r055):      7(ptr) Variable Function
-       322(r056):      7(ptr) Variable Function
-       327(r057):      7(ptr) Variable Function
-       330(r058):      7(ptr) Variable Function
-       334(r059):      7(ptr) Variable Function
-       337(r060):      7(ptr) Variable Function
-       340(r061):      7(ptr) Variable Function
+      245(r033i):      7(ptr) Variable Function
+       249(r034):      7(ptr) Variable Function
+       252(r036):      7(ptr) Variable Function
+       255(r037):    138(ptr) Variable Function
+       258(r038):    138(ptr) Variable Function
+       261(r039):      7(ptr) Variable Function
+      265(r039a):      7(ptr) Variable Function
+       270(r040):      7(ptr) Variable Function
+       273(r041):      7(ptr) Variable Function
+       278(r042):      7(ptr) Variable Function
+       281(r043):      7(ptr) Variable Function
+       285(r044):      7(ptr) Variable Function
+       289(r045):      7(ptr) Variable Function
+       293(r046):      7(ptr) Variable Function
+       296(r047):      7(ptr) Variable Function
+       300(r048):      9(ptr) Variable Function
+       304(r049):      7(ptr) Variable Function
+       307(r050):      7(ptr) Variable Function
+       310(r051):      7(ptr) Variable Function
+       313(r052):      7(ptr) Variable Function
+       316(r053):      7(ptr) Variable Function
+       323(r055):      7(ptr) Variable Function
+       326(r056):      7(ptr) Variable Function
+       331(r057):      7(ptr) Variable Function
+       334(r058):      7(ptr) Variable Function
+       338(r059):      7(ptr) Variable Function
+       341(r060):      7(ptr) Variable Function
+       344(r061):      7(ptr) Variable Function
              140:    6(float) Load 13(inF0)
              142:   137(bool) FOrdNotEqual 140 141
              143:   137(bool) All 142
@@ -6480,102 +6496,105 @@
              244:    6(float) FMod 242 243
                               Store 241(r033) 244
              246:    6(float) Load 13(inF0)
-             247:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 246
-                              Store 245(r034) 247
-             249:    6(float) Load 13(inF0)
-             250:    6(float) Fwidth 249
-                              Store 248(r036) 250
-             252:    6(float) Load 13(inF0)
-             253:   137(bool) IsInf 252
-                              Store 251(r037) 253
-             255:    6(float) Load 13(inF0)
-             256:   137(bool) IsNan 255
-                              Store 254(r038) 256
-             258:    6(float) Load 13(inF0)
-             259:    6(float) Load 14(inF1)
-             260:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 258 259
-                              Store 257(r039) 260
+             248:    6(float) FMod 246 247
+                              Store 245(r033i) 248
+             250:    6(float) Load 13(inF0)
+             251:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 250
+                              Store 249(r034) 251
+             253:    6(float) Load 13(inF0)
+             254:    6(float) Fwidth 253
+                              Store 252(r036) 254
+             256:    6(float) Load 13(inF0)
+             257:   137(bool) IsInf 256
+                              Store 255(r037) 257
+             259:    6(float) Load 13(inF0)
+             260:   137(bool) IsNan 259
+                              Store 258(r038) 260
              262:    6(float) Load 13(inF0)
              263:    6(float) Load 14(inF1)
-             264:    6(float) Load 15(inF2)
-             265:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 262 263 264
-                              Store 261(r039a) 265
-             267:    6(float) Load 13(inF0)
-             268:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 267
-                              Store 266(r040) 268
-             270:    6(float) Load 13(inF0)
-             271:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 270
-             273:    6(float) FMul 271 272
-                              Store 269(r041) 273
-             275:    6(float) Load 13(inF0)
-             276:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 275
-                              Store 274(r042) 276
-             278:    6(float) Load 13(inF0)
-             279:    6(float) Load 14(inF1)
-             280:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 278 279
-                              Store 277(r043) 280
+             264:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 262 263
+                              Store 261(r039) 264
+             266:    6(float) Load 13(inF0)
+             267:    6(float) Load 14(inF1)
+             268:    6(float) Load 15(inF2)
+             269:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 266 267 268
+                              Store 265(r039a) 269
+             271:    6(float) Load 13(inF0)
+             272:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 271
+                              Store 270(r040) 272
+             274:    6(float) Load 13(inF0)
+             275:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 274
+             277:    6(float) FMul 275 276
+                              Store 273(r041) 277
+             279:    6(float) Load 13(inF0)
+             280:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 279
+                              Store 278(r042) 280
              282:    6(float) Load 13(inF0)
              283:    6(float) Load 14(inF1)
-             284:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 282 283
-                              Store 281(r044) 284
+             284:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 282 283
+                              Store 281(r043) 284
              286:    6(float) Load 13(inF0)
              287:    6(float) Load 14(inF1)
-             288:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 286 287
-                              Store 285(r045) 288
+             288:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 286 287
+                              Store 285(r044) 288
              290:    6(float) Load 13(inF0)
-             291:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 290
-                              Store 289(r046) 291
+             291:    6(float) Load 14(inF1)
+             292:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 290 291
+                              Store 289(r045) 292
              294:    6(float) Load 13(inF0)
-             295:    6(float) FDiv 293 294
-                              Store 292(r047) 295
-             298:     10(int) BitReverse 297
-             299:      8(int) Bitcast 298
-                              Store 296(r048) 299
-             301:    6(float) Load 13(inF0)
-             302:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 301
-                              Store 300(r049) 302
-             304:    6(float) Load 13(inF0)
-             305:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 304
-                              Store 303(r050) 305
-             307:    6(float) Load 13(inF0)
-             308:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 307 141 293
-                              Store 306(r051) 308
-             310:    6(float) Load 13(inF0)
-             311:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 310
-                              Store 309(r052) 311
-             313:    6(float) Load 13(inF0)
-             314:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 313
-                              Store 312(r053) 314
-             315:    6(float) Load 13(inF0)
-             316:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 315
-                              Store 14(inF1) 316
+             295:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 294
+                              Store 293(r046) 295
+             298:    6(float) Load 13(inF0)
+             299:    6(float) FDiv 297 298
+                              Store 296(r047) 299
+             302:     10(int) BitReverse 301
+             303:      8(int) Bitcast 302
+                              Store 300(r048) 303
+             305:    6(float) Load 13(inF0)
+             306:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 305
+                              Store 304(r049) 306
+             308:    6(float) Load 13(inF0)
+             309:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 308
+                              Store 307(r050) 309
+             311:    6(float) Load 13(inF0)
+             312:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 311 141 297
+                              Store 310(r051) 312
+             314:    6(float) Load 13(inF0)
+             315:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 314
+                              Store 313(r052) 315
              317:    6(float) Load 13(inF0)
-             318:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 317
-                              Store 15(inF2) 318
-             320:    6(float) Load 13(inF0)
-             321:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 320
-                              Store 319(r055) 321
-             323:    6(float) Load 13(inF0)
-             324:    6(float) Load 14(inF1)
-             325:    6(float) Load 15(inF2)
-             326:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 323 324 325
-                              Store 322(r056) 326
-             328:    6(float) Load 13(inF0)
-             329:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 328
-                              Store 327(r057) 329
-             331:    6(float) Load 13(inF0)
-             332:    6(float) Load 14(inF1)
-             333:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 331 332
-                              Store 330(r058) 333
+             318:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 317
+                              Store 316(r053) 318
+             319:    6(float) Load 13(inF0)
+             320:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 319
+                              Store 14(inF1) 320
+             321:    6(float) Load 13(inF0)
+             322:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 321
+                              Store 15(inF2) 322
+             324:    6(float) Load 13(inF0)
+             325:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 324
+                              Store 323(r055) 325
+             327:    6(float) Load 13(inF0)
+             328:    6(float) Load 14(inF1)
+             329:    6(float) Load 15(inF2)
+             330:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 327 328 329
+                              Store 326(r056) 330
+             332:    6(float) Load 13(inF0)
+             333:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 332
+                              Store 331(r057) 333
              335:    6(float) Load 13(inF0)
-             336:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 335
-                              Store 334(r059) 336
-             338:    6(float) Load 13(inF0)
-             339:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 338
-                              Store 337(r060) 339
-             341:    6(float) Load 13(inF0)
-             342:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 341
-                              Store 340(r061) 342
+             336:    6(float) Load 14(inF1)
+             337:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 335 336
+                              Store 334(r058) 337
+             339:    6(float) Load 13(inF0)
+             340:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 339
+                              Store 338(r059) 340
+             342:    6(float) Load 13(inF0)
+             343:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 342
+                              Store 341(r060) 343
+             345:    6(float) Load 13(inF0)
+             346:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 345
+                              Store 344(r061) 346
                               ReturnValue 141
                               FunctionEnd
 24(PixelShaderFunction1(vf1;vf1;vf1;):    6(float) Function None 20
@@ -6592,298 +6611,298 @@
         34(inU0):     29(ptr) FunctionParameter
         35(inU1):     29(ptr) FunctionParameter
               37:             Label
-       347(r000):    138(ptr) Variable Function
-       353(r001):     27(ptr) Variable Function
-       356(r002):     27(ptr) Variable Function
-       359(r003):    138(ptr) Variable Function
-       363(r004):     27(ptr) Variable Function
-       368(r005):    367(ptr) Variable Function
-       371(r006):     29(ptr) Variable Function
-       374(r007):     27(ptr) Variable Function
-       377(r009):     27(ptr) Variable Function
-       380(r010):     27(ptr) Variable Function
-       384(r011):     27(ptr) Variable Function
-       387(r012):     27(ptr) Variable Function
-       406(r013):     27(ptr) Variable Function
-       409(r015):     27(ptr) Variable Function
-       412(r016):    367(ptr) Variable Function
-       416(r017):     27(ptr) Variable Function
-       419(r018):     27(ptr) Variable Function
-       422(r019):     27(ptr) Variable Function
-       425(r020):     27(ptr) Variable Function
-       428(r021):     27(ptr) Variable Function
-       431(r022):     27(ptr) Variable Function
-       434(r023):     27(ptr) Variable Function
-       437(r026):      7(ptr) Variable Function
-       441(r027):      7(ptr) Variable Function
-       445(r028):     27(ptr) Variable Function
-       448(r029):     27(ptr) Variable Function
-       451(r030):     27(ptr) Variable Function
-       456(r031):     29(ptr) Variable Function
-       461(r032):     29(ptr) Variable Function
-       463(r033):     27(ptr) Variable Function
-       466(r035):     27(ptr) Variable Function
-       470(r036):     27(ptr) Variable Function
-       473(r038):     27(ptr) Variable Function
-       477(r039):    476(ptr) Variable Function
-       480(r040):    476(ptr) Variable Function
-       483(r041):     27(ptr) Variable Function
-      487(r039a):     27(ptr) Variable Function
-       492(r042):      7(ptr) Variable Function
-       495(r043):     27(ptr) Variable Function
-       498(r044):     27(ptr) Variable Function
-       502(r045):     27(ptr) Variable Function
-       505(r046):     27(ptr) Variable Function
-       509(r047):     27(ptr) Variable Function
-       513(r048):     27(ptr) Variable Function
-       516(r049):     27(ptr) Variable Function
-       520(r050):     27(ptr) Variable Function
-       523(r051):     27(ptr) Variable Function
-       527(r052):     27(ptr) Variable Function
-       531(r053):     27(ptr) Variable Function
-       536(r054):     29(ptr) Variable Function
-       541(r055):     27(ptr) Variable Function
-       544(r056):     27(ptr) Variable Function
-       547(r057):     27(ptr) Variable Function
-       552(r058):     27(ptr) Variable Function
-       555(r059):     27(ptr) Variable Function
-       562(r060):     27(ptr) Variable Function
-       565(r061):     27(ptr) Variable Function
-       570(r062):     27(ptr) Variable Function
-       573(r063):     27(ptr) Variable Function
-       577(r064):     27(ptr) Variable Function
-       580(r065):     27(ptr) Variable Function
-       583(r066):     27(ptr) Variable Function
-             348:   26(fvec2) Load 31(inF0)
-             351:  349(bvec2) FOrdNotEqual 348 350
-             352:   137(bool) All 351
-                              Store 347(r000) 352
-             354:   26(fvec2) Load 31(inF0)
-             355:   26(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 354
-                              Store 353(r001) 355
-             357:   26(fvec2) Load 31(inF0)
-             358:   26(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 357
-                              Store 356(r002) 358
-             360:   26(fvec2) Load 31(inF0)
-             361:  349(bvec2) FOrdNotEqual 360 350
-             362:   137(bool) Any 361
-                              Store 359(r003) 362
+       351(r000):    138(ptr) Variable Function
+       357(r001):     27(ptr) Variable Function
+       360(r002):     27(ptr) Variable Function
+       363(r003):    138(ptr) Variable Function
+       367(r004):     27(ptr) Variable Function
+       372(r005):    371(ptr) Variable Function
+       375(r006):     29(ptr) Variable Function
+       378(r007):     27(ptr) Variable Function
+       381(r009):     27(ptr) Variable Function
+       384(r010):     27(ptr) Variable Function
+       388(r011):     27(ptr) Variable Function
+       391(r012):     27(ptr) Variable Function
+       410(r013):     27(ptr) Variable Function
+       413(r015):     27(ptr) Variable Function
+       416(r016):    371(ptr) Variable Function
+       420(r017):     27(ptr) Variable Function
+       423(r018):     27(ptr) Variable Function
+       426(r019):     27(ptr) Variable Function
+       429(r020):     27(ptr) Variable Function
+       432(r021):     27(ptr) Variable Function
+       435(r022):     27(ptr) Variable Function
+       438(r023):     27(ptr) Variable Function
+       441(r026):      7(ptr) Variable Function
+       445(r027):      7(ptr) Variable Function
+       449(r028):     27(ptr) Variable Function
+       452(r029):     27(ptr) Variable Function
+       455(r030):     27(ptr) Variable Function
+       460(r031):     29(ptr) Variable Function
+       465(r032):     29(ptr) Variable Function
+       467(r033):     27(ptr) Variable Function
+       470(r035):     27(ptr) Variable Function
+       474(r036):     27(ptr) Variable Function
+       477(r038):     27(ptr) Variable Function
+       481(r039):    480(ptr) Variable Function
+       484(r040):    480(ptr) Variable Function
+       487(r041):     27(ptr) Variable Function
+      491(r039a):     27(ptr) Variable Function
+       496(r042):      7(ptr) Variable Function
+       499(r043):     27(ptr) Variable Function
+       502(r044):     27(ptr) Variable Function
+       506(r045):     27(ptr) Variable Function
+       509(r046):     27(ptr) Variable Function
+       513(r047):     27(ptr) Variable Function
+       517(r048):     27(ptr) Variable Function
+       520(r049):     27(ptr) Variable Function
+       524(r050):     27(ptr) Variable Function
+       527(r051):     27(ptr) Variable Function
+       531(r052):     27(ptr) Variable Function
+       535(r053):     27(ptr) Variable Function
+       539(r054):     29(ptr) Variable Function
+       544(r055):     27(ptr) Variable Function
+       547(r056):     27(ptr) Variable Function
+       550(r057):     27(ptr) Variable Function
+       555(r058):     27(ptr) Variable Function
+       558(r059):     27(ptr) Variable Function
+       565(r060):     27(ptr) Variable Function
+       568(r061):     27(ptr) Variable Function
+       573(r062):     27(ptr) Variable Function
+       576(r063):     27(ptr) Variable Function
+       580(r064):     27(ptr) Variable Function
+       583(r065):     27(ptr) Variable Function
+       586(r066):     27(ptr) Variable Function
+             352:   26(fvec2) Load 31(inF0)
+             355:  353(bvec2) FOrdNotEqual 352 354
+             356:   137(bool) All 355
+                              Store 351(r000) 356
+             358:   26(fvec2) Load 31(inF0)
+             359:   26(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 358
+                              Store 357(r001) 359
+             361:   26(fvec2) Load 31(inF0)
+             362:   26(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 361
+                              Store 360(r002) 362
              364:   26(fvec2) Load 31(inF0)
-             365:   26(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 364
-                              Store 363(r004) 365
-             369:   26(fvec2) Load 31(inF0)
-             370:  366(ivec2) Bitcast 369
-                              Store 368(r005) 370
-             372:   26(fvec2) Load 31(inF0)
-             373:   28(ivec2) Bitcast 372
-                              Store 371(r006) 373
-             375:   28(ivec2) Load 34(inU0)
-             376:   26(fvec2) Bitcast 375
-                              Store 374(r007) 376
-             378:   26(fvec2) Load 31(inF0)
-             379:   26(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 378
-                              Store 377(r009) 379
-             381:   26(fvec2) Load 31(inF0)
-             382:   26(fvec2) Load 32(inF1)
-             383:   26(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 381 382
-                              Store 380(r010) 383
+             365:  353(bvec2) FOrdNotEqual 364 354
+             366:   137(bool) Any 365
+                              Store 363(r003) 366
+             368:   26(fvec2) Load 31(inF0)
+             369:   26(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 368
+                              Store 367(r004) 369
+             373:   26(fvec2) Load 31(inF0)
+             374:  370(ivec2) Bitcast 373
+                              Store 372(r005) 374
+             376:   26(fvec2) Load 31(inF0)
+             377:   28(ivec2) Bitcast 376
+                              Store 375(r006) 377
+             379:   28(ivec2) Load 34(inU0)
+             380:   26(fvec2) Bitcast 379
+                              Store 378(r007) 380
+             382:   26(fvec2) Load 31(inF0)
+             383:   26(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 382
+                              Store 381(r009) 383
              385:   26(fvec2) Load 31(inF0)
-             386:   26(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 385
-                              Store 384(r011) 386
-             388:   26(fvec2) Load 31(inF0)
-             389:   26(fvec2) Load 32(inF1)
-             390:   26(fvec2) Load 33(inF2)
-             391:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 388 389 390
-                              Store 387(r012) 391
+             386:   26(fvec2) Load 32(inF1)
+             387:   26(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 385 386
+                              Store 384(r010) 387
+             389:   26(fvec2) Load 31(inF0)
+             390:   26(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 389
+                              Store 388(r011) 390
              392:   26(fvec2) Load 31(inF0)
-             393:  349(bvec2) FOrdLessThan 392 350
-             394:   137(bool) Any 393
-                              SelectionMerge 396 None
-                              BranchConditional 394 395 396
-             395:               Label
+             393:   26(fvec2) Load 32(inF1)
+             394:   26(fvec2) Load 33(inF2)
+             395:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 392 393 394
+                              Store 391(r012) 395
+             396:   26(fvec2) Load 31(inF0)
+             397:  353(bvec2) FOrdLessThan 396 354
+             398:   137(bool) Any 397
+                              SelectionMerge 400 None
+                              BranchConditional 398 399 400
+             399:               Label
                                 Kill
-             396:             Label
-             398:   28(ivec2) Load 34(inU0)
-             401:  349(bvec2) ULessThan 398 400
-             402:   137(bool) Any 401
-                              SelectionMerge 404 None
-                              BranchConditional 402 403 404
-             403:               Label
+             400:             Label
+             402:   28(ivec2) Load 34(inU0)
+             405:  353(bvec2) ULessThan 402 404
+             406:   137(bool) Any 405
+                              SelectionMerge 408 None
+                              BranchConditional 406 407 408
+             407:               Label
                                 Kill
-             404:             Label
-             407:   26(fvec2) Load 31(inF0)
-             408:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 407
-                              Store 406(r013) 408
-             410:   26(fvec2) Load 31(inF0)
-             411:   26(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 410
-                              Store 409(r015) 411
-             415:  366(ivec2) BitCount 414
-                              Store 412(r016) 415
-             417:   26(fvec2) Load 31(inF0)
-             418:   26(fvec2) DPdx 417
-                              Store 416(r017) 418
-             420:   26(fvec2) Load 31(inF0)
-             421:   26(fvec2) DPdxCoarse 420
-                              Store 419(r018) 421
-             423:   26(fvec2) Load 31(inF0)
-             424:   26(fvec2) DPdxFine 423
-                              Store 422(r019) 424
-             426:   26(fvec2) Load 31(inF0)
-             427:   26(fvec2) DPdy 426
-                              Store 425(r020) 427
-             429:   26(fvec2) Load 31(inF0)
-             430:   26(fvec2) DPdyCoarse 429
-                              Store 428(r021) 430
-             432:   26(fvec2) Load 31(inF0)
-             433:   26(fvec2) DPdyFine 432
-                              Store 431(r022) 433
-             435:   26(fvec2) Load 31(inF0)
-             436:   26(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 435
-                              Store 434(r023) 436
-             438:   26(fvec2) Load 31(inF0)
-             439:   26(fvec2) Load 32(inF1)
-             440:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 438 439
-                              Store 437(r026) 440
+             408:             Label
+             411:   26(fvec2) Load 31(inF0)
+             412:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 411
+                              Store 410(r013) 412
+             414:   26(fvec2) Load 31(inF0)
+             415:   26(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 414
+                              Store 413(r015) 415
+             419:  370(ivec2) BitCount 418
+                              Store 416(r016) 419
+             421:   26(fvec2) Load 31(inF0)
+             422:   26(fvec2) DPdx 421
+                              Store 420(r017) 422
+             424:   26(fvec2) Load 31(inF0)
+             425:   26(fvec2) DPdxCoarse 424
+                              Store 423(r018) 425
+             427:   26(fvec2) Load 31(inF0)
+             428:   26(fvec2) DPdxFine 427
+                              Store 426(r019) 428
+             430:   26(fvec2) Load 31(inF0)
+             431:   26(fvec2) DPdy 430
+                              Store 429(r020) 431
+             433:   26(fvec2) Load 31(inF0)
+             434:   26(fvec2) DPdyCoarse 433
+                              Store 432(r021) 434
+             436:   26(fvec2) Load 31(inF0)
+             437:   26(fvec2) DPdyFine 436
+                              Store 435(r022) 437
+             439:   26(fvec2) Load 31(inF0)
+             440:   26(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 439
+                              Store 438(r023) 440
              442:   26(fvec2) Load 31(inF0)
              443:   26(fvec2) Load 32(inF1)
-             444:    6(float) Dot 442 443
-                              Store 441(r027) 444
+             444:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 442 443
+                              Store 441(r026) 444
              446:   26(fvec2) Load 31(inF0)
-             447:   26(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 446
-                              Store 445(r028) 447
-             449:   26(fvec2) Load 31(inF0)
-             450:   26(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 449
-                              Store 448(r029) 450
-             452:   26(fvec2) Load 31(inF0)
-             453:   26(fvec2) Load 32(inF1)
-             454:   26(fvec2) Load 33(inF2)
-             455:   26(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 452 453 454
-                              Store 451(r030) 455
-             460:   28(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 459
-                              Store 456(r031) 460
-             462:   28(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 459
-                              Store 461(r032) 462
-             464:   26(fvec2) Load 31(inF0)
-             465:   26(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 464
-                              Store 463(r033) 465
-             467:   26(fvec2) Load 31(inF0)
-             468:   26(fvec2) Load 32(inF1)
-             469:   26(fvec2) FMod 467 468
-                              Store 466(r035) 469
+             447:   26(fvec2) Load 32(inF1)
+             448:    6(float) Dot 446 447
+                              Store 445(r027) 448
+             450:   26(fvec2) Load 31(inF0)
+             451:   26(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 450
+                              Store 449(r028) 451
+             453:   26(fvec2) Load 31(inF0)
+             454:   26(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 453
+                              Store 452(r029) 454
+             456:   26(fvec2) Load 31(inF0)
+             457:   26(fvec2) Load 32(inF1)
+             458:   26(fvec2) Load 33(inF2)
+             459:   26(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 456 457 458
+                              Store 455(r030) 459
+             464:   28(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 463
+                              Store 460(r031) 464
+             466:   28(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 463
+                              Store 465(r032) 466
+             468:   26(fvec2) Load 31(inF0)
+             469:   26(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 468
+                              Store 467(r033) 469
              471:   26(fvec2) Load 31(inF0)
-             472:   26(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 471
-                              Store 470(r036) 472
-             474:   26(fvec2) Load 31(inF0)
-             475:   26(fvec2) Fwidth 474
-                              Store 473(r038) 475
+             472:   26(fvec2) Load 32(inF1)
+             473:   26(fvec2) FMod 471 472
+                              Store 470(r035) 473
+             475:   26(fvec2) Load 31(inF0)
+             476:   26(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 475
+                              Store 474(r036) 476
              478:   26(fvec2) Load 31(inF0)
-             479:  349(bvec2) IsInf 478
-                              Store 477(r039) 479
-             481:   26(fvec2) Load 31(inF0)
-             482:  349(bvec2) IsNan 481
-                              Store 480(r040) 482
-             484:   26(fvec2) Load 31(inF0)
-             485:   26(fvec2) Load 32(inF1)
-             486:   26(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 484 485
-                              Store 483(r041) 486
+             479:   26(fvec2) Fwidth 478
+                              Store 477(r038) 479
+             482:   26(fvec2) Load 31(inF0)
+             483:  353(bvec2) IsInf 482
+                              Store 481(r039) 483
+             485:   26(fvec2) Load 31(inF0)
+             486:  353(bvec2) IsNan 485
+                              Store 484(r040) 486
              488:   26(fvec2) Load 31(inF0)
              489:   26(fvec2) Load 32(inF1)
-             490:   26(fvec2) Load 33(inF2)
-             491:   26(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 488 489 490
-                              Store 487(r039a) 491
-             493:   26(fvec2) Load 31(inF0)
-             494:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 493
-                              Store 492(r042) 494
-             496:   26(fvec2) Load 31(inF0)
-             497:   26(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 496
-                              Store 495(r043) 497
-             499:   26(fvec2) Load 31(inF0)
-             500:   26(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 499
-             501:   26(fvec2) VectorTimesScalar 500 272
-                              Store 498(r044) 501
+             490:   26(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 488 489
+                              Store 487(r041) 490
+             492:   26(fvec2) Load 31(inF0)
+             493:   26(fvec2) Load 32(inF1)
+             494:   26(fvec2) Load 33(inF2)
+             495:   26(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 492 493 494
+                              Store 491(r039a) 495
+             497:   26(fvec2) Load 31(inF0)
+             498:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 497
+                              Store 496(r042) 498
+             500:   26(fvec2) Load 31(inF0)
+             501:   26(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 500
+                              Store 499(r043) 501
              503:   26(fvec2) Load 31(inF0)
              504:   26(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 503
-                              Store 502(r045) 504
-             506:   26(fvec2) Load 31(inF0)
-             507:   26(fvec2) Load 32(inF1)
-             508:   26(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 506 507
-                              Store 505(r046) 508
+             505:   26(fvec2) VectorTimesScalar 504 276
+                              Store 502(r044) 505
+             507:   26(fvec2) Load 31(inF0)
+             508:   26(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 507
+                              Store 506(r045) 508
              510:   26(fvec2) Load 31(inF0)
              511:   26(fvec2) Load 32(inF1)
-             512:   26(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 510 511
-                              Store 509(r047) 512
+             512:   26(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 510 511
+                              Store 509(r046) 512
              514:   26(fvec2) Load 31(inF0)
-             515:   26(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 514
-                              Store 513(r048) 515
-             517:   26(fvec2) Load 31(inF0)
-             518:   26(fvec2) Load 32(inF1)
-             519:   26(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 517 518
-                              Store 516(r049) 519
+             515:   26(fvec2) Load 32(inF1)
+             516:   26(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 514 515
+                              Store 513(r047) 516
+             518:   26(fvec2) Load 31(inF0)
+             519:   26(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 518
+                              Store 517(r048) 519
              521:   26(fvec2) Load 31(inF0)
-             522:   26(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 521
-                              Store 520(r050) 522
-             524:   26(fvec2) Load 31(inF0)
-             525:   26(fvec2) CompositeConstruct 293 293
-             526:   26(fvec2) FDiv 525 524
-                              Store 523(r051) 526
+             522:   26(fvec2) Load 32(inF1)
+             523:   26(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 521 522
+                              Store 520(r049) 523
+             525:   26(fvec2) Load 31(inF0)
+             526:   26(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 525
+                              Store 524(r050) 526
              528:   26(fvec2) Load 31(inF0)
-             529:   26(fvec2) Load 32(inF1)
-             530:   26(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 528 529
-                              Store 527(r052) 530
+             529:   26(fvec2) CompositeConstruct 297 297
+             530:   26(fvec2) FDiv 529 528
+                              Store 527(r051) 530
              532:   26(fvec2) Load 31(inF0)
              533:   26(fvec2) Load 32(inF1)
-             535:   26(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 532 533 534
-                              Store 531(r053) 535
-             540:   28(ivec2) BitReverse 539
-                              Store 536(r054) 540
-             542:   26(fvec2) Load 31(inF0)
-             543:   26(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 542
-                              Store 541(r055) 543
+             534:   26(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 532 533
+                              Store 531(r052) 534
+             536:   26(fvec2) Load 31(inF0)
+             537:   26(fvec2) Load 32(inF1)
+             538:   26(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 536 537 247
+                              Store 535(r053) 538
+             543:   28(ivec2) BitReverse 542
+                              Store 539(r054) 543
              545:   26(fvec2) Load 31(inF0)
-             546:   26(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 545
-                              Store 544(r056) 546
+             546:   26(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 545
+                              Store 544(r055) 546
              548:   26(fvec2) Load 31(inF0)
-             549:   26(fvec2) CompositeConstruct 141 141
-             550:   26(fvec2) CompositeConstruct 293 293
-             551:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 548 549 550
-                              Store 547(r057) 551
-             553:   26(fvec2) Load 31(inF0)
-             554:   26(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 553
-                              Store 552(r058) 554
+             549:   26(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 548
+                              Store 547(r056) 549
+             551:   26(fvec2) Load 31(inF0)
+             552:   26(fvec2) CompositeConstruct 141 141
+             553:   26(fvec2) CompositeConstruct 297 297
+             554:   26(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 551 552 553
+                              Store 550(r057) 554
              556:   26(fvec2) Load 31(inF0)
-             557:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 556
-                              Store 555(r059) 557
-             558:   26(fvec2) Load 31(inF0)
-             559:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 558
-                              Store 32(inF1) 559
-             560:   26(fvec2) Load 31(inF0)
-             561:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 560
-                              Store 33(inF2) 561
+             557:   26(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 556
+                              Store 555(r058) 557
+             559:   26(fvec2) Load 31(inF0)
+             560:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 559
+                              Store 558(r059) 560
+             561:   26(fvec2) Load 31(inF0)
+             562:   26(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 561
+                              Store 32(inF1) 562
              563:   26(fvec2) Load 31(inF0)
-             564:   26(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 563
-                              Store 562(r060) 564
+             564:   26(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 563
+                              Store 33(inF2) 564
              566:   26(fvec2) Load 31(inF0)
-             567:   26(fvec2) Load 32(inF1)
-             568:   26(fvec2) Load 33(inF2)
-             569:   26(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 566 567 568
-                              Store 565(r061) 569
-             571:   26(fvec2) Load 31(inF0)
-             572:   26(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 571
-                              Store 570(r062) 572
+             567:   26(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 566
+                              Store 565(r060) 567
+             569:   26(fvec2) Load 31(inF0)
+             570:   26(fvec2) Load 32(inF1)
+             571:   26(fvec2) Load 33(inF2)
+             572:   26(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 569 570 571
+                              Store 568(r061) 572
              574:   26(fvec2) Load 31(inF0)
-             575:   26(fvec2) Load 32(inF1)
-             576:   26(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 574 575
-                              Store 573(r063) 576
-             578:   26(fvec2) Load 31(inF0)
-             579:   26(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 578
-                              Store 577(r064) 579
+             575:   26(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 574
+                              Store 573(r062) 575
+             577:   26(fvec2) Load 31(inF0)
+             578:   26(fvec2) Load 32(inF1)
+             579:   26(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 577 578
+                              Store 576(r063) 579
              581:   26(fvec2) Load 31(inF0)
-             582:   26(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 581
-                              Store 580(r065) 582
+             582:   26(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 581
+                              Store 580(r064) 582
              584:   26(fvec2) Load 31(inF0)
-             585:   26(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 584
-                              Store 583(r066) 585
-                              ReturnValue 586
+             585:   26(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 584
+                              Store 583(r065) 585
+             587:   26(fvec2) Load 31(inF0)
+             588:   26(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 587
+                              Store 586(r066) 588
+                              ReturnValue 589
                               FunctionEnd
 48(PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   38(fvec3) Function None 42
         43(inF0):     39(ptr) FunctionParameter
@@ -6892,309 +6911,309 @@
         46(inU0):     41(ptr) FunctionParameter
         47(inU1):     41(ptr) FunctionParameter
               49:             Label
-       589(r000):    138(ptr) Variable Function
-       595(r001):     39(ptr) Variable Function
-       598(r002):     39(ptr) Variable Function
-       601(r003):    138(ptr) Variable Function
-       605(r004):     39(ptr) Variable Function
-       610(r005):    609(ptr) Variable Function
-       613(r006):     41(ptr) Variable Function
-       616(r007):     39(ptr) Variable Function
-       619(r009):     39(ptr) Variable Function
-       622(r010):     39(ptr) Variable Function
-       626(r011):     39(ptr) Variable Function
-       629(r012):     39(ptr) Variable Function
-       647(r013):     39(ptr) Variable Function
-       650(r014):     39(ptr) Variable Function
-       653(r015):     41(ptr) Variable Function
-       658(r016):     39(ptr) Variable Function
-       662(r017):     39(ptr) Variable Function
-       665(r018):     39(ptr) Variable Function
-       668(r019):     39(ptr) Variable Function
-       671(r020):     39(ptr) Variable Function
-       674(r021):     39(ptr) Variable Function
-       677(r022):     39(ptr) Variable Function
-       680(r023):     39(ptr) Variable Function
-       683(r024):      7(ptr) Variable Function
-       687(r025):      7(ptr) Variable Function
-       691(r029):     39(ptr) Variable Function
-       694(r030):     39(ptr) Variable Function
-       697(r031):     39(ptr) Variable Function
-       702(r032):     41(ptr) Variable Function
-       706(r033):     41(ptr) Variable Function
-       708(r034):     39(ptr) Variable Function
-       711(r036):     39(ptr) Variable Function
-       715(r037):     39(ptr) Variable Function
-       718(r039):     39(ptr) Variable Function
-       722(r040):    721(ptr) Variable Function
-       725(r041):    721(ptr) Variable Function
-       728(r042):     39(ptr) Variable Function
-      732(r039a):     39(ptr) Variable Function
-      737(r039b):     39(ptr) Variable Function
-       743(r043):      7(ptr) Variable Function
-       746(r044):     39(ptr) Variable Function
-       749(r045):     39(ptr) Variable Function
-       753(r046):     39(ptr) Variable Function
-       756(r047):     39(ptr) Variable Function
-       760(r048):     39(ptr) Variable Function
-       764(r049):     39(ptr) Variable Function
-       767(r050):     39(ptr) Variable Function
-       771(r051):     39(ptr) Variable Function
-       774(r052):     39(ptr) Variable Function
-       778(r053):     39(ptr) Variable Function
-       782(r054):     39(ptr) Variable Function
-       786(r055):     41(ptr) Variable Function
-       789(r056):     39(ptr) Variable Function
-       792(r057):     39(ptr) Variable Function
-       795(r058):     39(ptr) Variable Function
-       800(r059):     39(ptr) Variable Function
-       803(r060):     39(ptr) Variable Function
-       810(r061):     39(ptr) Variable Function
-       813(r062):     39(ptr) Variable Function
-       818(r063):     39(ptr) Variable Function
-       821(r064):     39(ptr) Variable Function
-       825(r065):     39(ptr) Variable Function
-       828(r066):     39(ptr) Variable Function
-       831(r067):     39(ptr) Variable Function
-             590:   38(fvec3) Load 43(inF0)
-             593:  591(bvec3) FOrdNotEqual 590 592
-             594:   137(bool) All 593
-                              Store 589(r000) 594
-             596:   38(fvec3) Load 43(inF0)
-             597:   38(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 596
-                              Store 595(r001) 597
+       592(r000):    138(ptr) Variable Function
+       598(r001):     39(ptr) Variable Function
+       601(r002):     39(ptr) Variable Function
+       604(r003):    138(ptr) Variable Function
+       608(r004):     39(ptr) Variable Function
+       613(r005):    612(ptr) Variable Function
+       616(r006):     41(ptr) Variable Function
+       619(r007):     39(ptr) Variable Function
+       622(r009):     39(ptr) Variable Function
+       625(r010):     39(ptr) Variable Function
+       629(r011):     39(ptr) Variable Function
+       632(r012):     39(ptr) Variable Function
+       650(r013):     39(ptr) Variable Function
+       653(r014):     39(ptr) Variable Function
+       656(r015):     41(ptr) Variable Function
+       661(r016):     39(ptr) Variable Function
+       665(r017):     39(ptr) Variable Function
+       668(r018):     39(ptr) Variable Function
+       671(r019):     39(ptr) Variable Function
+       674(r020):     39(ptr) Variable Function
+       677(r021):     39(ptr) Variable Function
+       680(r022):     39(ptr) Variable Function
+       683(r023):     39(ptr) Variable Function
+       686(r024):      7(ptr) Variable Function
+       690(r025):      7(ptr) Variable Function
+       694(r029):     39(ptr) Variable Function
+       697(r030):     39(ptr) Variable Function
+       700(r031):     39(ptr) Variable Function
+       705(r032):     41(ptr) Variable Function
+       709(r033):     41(ptr) Variable Function
+       711(r034):     39(ptr) Variable Function
+       714(r036):     39(ptr) Variable Function
+       718(r037):     39(ptr) Variable Function
+       721(r039):     39(ptr) Variable Function
+       725(r040):    724(ptr) Variable Function
+       728(r041):    724(ptr) Variable Function
+       731(r042):     39(ptr) Variable Function
+      735(r039a):     39(ptr) Variable Function
+      740(r039b):     39(ptr) Variable Function
+       746(r043):      7(ptr) Variable Function
+       749(r044):     39(ptr) Variable Function
+       752(r045):     39(ptr) Variable Function
+       756(r046):     39(ptr) Variable Function
+       759(r047):     39(ptr) Variable Function
+       763(r048):     39(ptr) Variable Function
+       767(r049):     39(ptr) Variable Function
+       770(r050):     39(ptr) Variable Function
+       774(r051):     39(ptr) Variable Function
+       777(r052):     39(ptr) Variable Function
+       781(r053):     39(ptr) Variable Function
+       785(r054):     39(ptr) Variable Function
+       789(r055):     41(ptr) Variable Function
+       792(r056):     39(ptr) Variable Function
+       795(r057):     39(ptr) Variable Function
+       798(r058):     39(ptr) Variable Function
+       803(r059):     39(ptr) Variable Function
+       806(r060):     39(ptr) Variable Function
+       813(r061):     39(ptr) Variable Function
+       816(r062):     39(ptr) Variable Function
+       821(r063):     39(ptr) Variable Function
+       824(r064):     39(ptr) Variable Function
+       828(r065):     39(ptr) Variable Function
+       831(r066):     39(ptr) Variable Function
+       834(r067):     39(ptr) Variable Function
+             593:   38(fvec3) Load 43(inF0)
+             596:  594(bvec3) FOrdNotEqual 593 595
+             597:   137(bool) All 596
+                              Store 592(r000) 597
              599:   38(fvec3) Load 43(inF0)
-             600:   38(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 599
-                              Store 598(r002) 600
+             600:   38(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 599
+                              Store 598(r001) 600
              602:   38(fvec3) Load 43(inF0)
-             603:  591(bvec3) FOrdNotEqual 602 592
-             604:   137(bool) Any 603
-                              Store 601(r003) 604
-             606:   38(fvec3) Load 43(inF0)
-             607:   38(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 606
-                              Store 605(r004) 607
-             611:   38(fvec3) Load 43(inF0)
-             612:  608(ivec3) Bitcast 611
-                              Store 610(r005) 612
+             603:   38(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 602
+                              Store 601(r002) 603
+             605:   38(fvec3) Load 43(inF0)
+             606:  594(bvec3) FOrdNotEqual 605 595
+             607:   137(bool) Any 606
+                              Store 604(r003) 607
+             609:   38(fvec3) Load 43(inF0)
+             610:   38(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 609
+                              Store 608(r004) 610
              614:   38(fvec3) Load 43(inF0)
-             615:   40(ivec3) Bitcast 614
-                              Store 613(r006) 615
-             617:   40(ivec3) Load 46(inU0)
-             618:   38(fvec3) Bitcast 617
-                              Store 616(r007) 618
-             620:   38(fvec3) Load 43(inF0)
-             621:   38(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 620
-                              Store 619(r009) 621
+             615:  611(ivec3) Bitcast 614
+                              Store 613(r005) 615
+             617:   38(fvec3) Load 43(inF0)
+             618:   40(ivec3) Bitcast 617
+                              Store 616(r006) 618
+             620:   40(ivec3) Load 46(inU0)
+             621:   38(fvec3) Bitcast 620
+                              Store 619(r007) 621
              623:   38(fvec3) Load 43(inF0)
-             624:   38(fvec3) Load 44(inF1)
-             625:   38(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 623 624
-                              Store 622(r010) 625
-             627:   38(fvec3) Load 43(inF0)
-             628:   38(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 627
-                              Store 626(r011) 628
+             624:   38(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 623
+                              Store 622(r009) 624
+             626:   38(fvec3) Load 43(inF0)
+             627:   38(fvec3) Load 44(inF1)
+             628:   38(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 626 627
+                              Store 625(r010) 628
              630:   38(fvec3) Load 43(inF0)
-             631:   38(fvec3) Load 44(inF1)
-             632:   38(fvec3) Load 45(inF2)
-             633:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 630 631 632
-                              Store 629(r012) 633
-             634:   38(fvec3) Load 43(inF0)
-             635:  591(bvec3) FOrdLessThan 634 592
-             636:   137(bool) Any 635
-                              SelectionMerge 638 None
-                              BranchConditional 636 637 638
-             637:               Label
+             631:   38(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 630
+                              Store 629(r011) 631
+             633:   38(fvec3) Load 43(inF0)
+             634:   38(fvec3) Load 44(inF1)
+             635:   38(fvec3) Load 45(inF2)
+             636:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 633 634 635
+                              Store 632(r012) 636
+             637:   38(fvec3) Load 43(inF0)
+             638:  594(bvec3) FOrdLessThan 637 595
+             639:   137(bool) Any 638
+                              SelectionMerge 641 None
+                              BranchConditional 639 640 641
+             640:               Label
                                 Kill
-             638:             Label
-             640:   40(ivec3) Load 46(inU0)
-             642:  591(bvec3) ULessThan 640 641
-             643:   137(bool) Any 642
-                              SelectionMerge 645 None
-                              BranchConditional 643 644 645
-             644:               Label
+             641:             Label
+             643:   40(ivec3) Load 46(inU0)
+             645:  594(bvec3) ULessThan 643 644
+             646:   137(bool) Any 645
+                              SelectionMerge 648 None
+                              BranchConditional 646 647 648
+             647:               Label
                                 Kill
-             645:             Label
-             648:   38(fvec3) Load 43(inF0)
-             649:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 648
-                              Store 647(r013) 649
+             648:             Label
              651:   38(fvec3) Load 43(inF0)
-             652:   38(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 651
-                              Store 650(r014) 652
-             657:   40(ivec3) BitCount 656
-                              Store 653(r015) 657
-             659:   38(fvec3) Load 43(inF0)
-             660:   38(fvec3) Load 44(inF1)
-             661:   38(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 659 660
-                              Store 658(r016) 661
-             663:   38(fvec3) Load 43(inF0)
-             664:   38(fvec3) DPdx 663
-                              Store 662(r017) 664
+             652:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 651
+                              Store 650(r013) 652
+             654:   38(fvec3) Load 43(inF0)
+             655:   38(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 654
+                              Store 653(r014) 655
+             660:   40(ivec3) BitCount 659
+                              Store 656(r015) 660
+             662:   38(fvec3) Load 43(inF0)
+             663:   38(fvec3) Load 44(inF1)
+             664:   38(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 662 663
+                              Store 661(r016) 664
              666:   38(fvec3) Load 43(inF0)
-             667:   38(fvec3) DPdxCoarse 666
-                              Store 665(r018) 667
+             667:   38(fvec3) DPdx 666
+                              Store 665(r017) 667
              669:   38(fvec3) Load 43(inF0)
-             670:   38(fvec3) DPdxFine 669
-                              Store 668(r019) 670
+             670:   38(fvec3) DPdxCoarse 669
+                              Store 668(r018) 670
              672:   38(fvec3) Load 43(inF0)
-             673:   38(fvec3) DPdy 672
-                              Store 671(r020) 673
+             673:   38(fvec3) DPdxFine 672
+                              Store 671(r019) 673
              675:   38(fvec3) Load 43(inF0)
-             676:   38(fvec3) DPdyCoarse 675
-                              Store 674(r021) 676
+             676:   38(fvec3) DPdy 675
+                              Store 674(r020) 676
              678:   38(fvec3) Load 43(inF0)
-             679:   38(fvec3) DPdyFine 678
-                              Store 677(r022) 679
+             679:   38(fvec3) DPdyCoarse 678
+                              Store 677(r021) 679
              681:   38(fvec3) Load 43(inF0)
-             682:   38(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 681
-                              Store 680(r023) 682
+             682:   38(fvec3) DPdyFine 681
+                              Store 680(r022) 682
              684:   38(fvec3) Load 43(inF0)
-             685:   38(fvec3) Load 44(inF1)
-             686:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 684 685
-                              Store 683(r024) 686
-             688:   38(fvec3) Load 43(inF0)
-             689:   38(fvec3) Load 44(inF1)
-             690:    6(float) Dot 688 689
-                              Store 687(r025) 690
-             692:   38(fvec3) Load 43(inF0)
-             693:   38(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 692
-                              Store 691(r029) 693
+             685:   38(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 684
+                              Store 683(r023) 685
+             687:   38(fvec3) Load 43(inF0)
+             688:   38(fvec3) Load 44(inF1)
+             689:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 687 688
+                              Store 686(r024) 689
+             691:   38(fvec3) Load 43(inF0)
+             692:   38(fvec3) Load 44(inF1)
+             693:    6(float) Dot 691 692
+                              Store 690(r025) 693
              695:   38(fvec3) Load 43(inF0)
-             696:   38(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 695
-                              Store 694(r030) 696
+             696:   38(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 695
+                              Store 694(r029) 696
              698:   38(fvec3) Load 43(inF0)
-             699:   38(fvec3) Load 44(inF1)
-             700:   38(fvec3) Load 45(inF2)
-             701:   38(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 698 699 700
-                              Store 697(r031) 701
-             705:   40(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 704
-                              Store 702(r032) 705
-             707:   40(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 704
-                              Store 706(r033) 707
-             709:   38(fvec3) Load 43(inF0)
-             710:   38(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 709
-                              Store 708(r034) 710
+             699:   38(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 698
+                              Store 697(r030) 699
+             701:   38(fvec3) Load 43(inF0)
+             702:   38(fvec3) Load 44(inF1)
+             703:   38(fvec3) Load 45(inF2)
+             704:   38(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 701 702 703
+                              Store 700(r031) 704
+             708:   40(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 707
+                              Store 705(r032) 708
+             710:   40(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 707
+                              Store 709(r033) 710
              712:   38(fvec3) Load 43(inF0)
-             713:   38(fvec3) Load 44(inF1)
-             714:   38(fvec3) FMod 712 713
-                              Store 711(r036) 714
-             716:   38(fvec3) Load 43(inF0)
-             717:   38(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 716
-                              Store 715(r037) 717
+             713:   38(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 712
+                              Store 711(r034) 713
+             715:   38(fvec3) Load 43(inF0)
+             716:   38(fvec3) Load 44(inF1)
+             717:   38(fvec3) FMod 715 716
+                              Store 714(r036) 717
              719:   38(fvec3) Load 43(inF0)
-             720:   38(fvec3) Fwidth 719
-                              Store 718(r039) 720
-             723:   38(fvec3) Load 43(inF0)
-             724:  591(bvec3) IsInf 723
-                              Store 722(r040) 724
+             720:   38(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 719
+                              Store 718(r037) 720
+             722:   38(fvec3) Load 43(inF0)
+             723:   38(fvec3) Fwidth 722
+                              Store 721(r039) 723
              726:   38(fvec3) Load 43(inF0)
-             727:  591(bvec3) IsNan 726
-                              Store 725(r041) 727
+             727:  594(bvec3) IsInf 726
+                              Store 725(r040) 727
              729:   38(fvec3) Load 43(inF0)
-             730:   38(fvec3) Load 44(inF1)
-             731:   38(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 729 730
-                              Store 728(r042) 731
-             733:   38(fvec3) Load 43(inF0)
-             734:   38(fvec3) Load 44(inF1)
-             735:   38(fvec3) Load 45(inF2)
-             736:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 733 734 735
-                              Store 732(r039a) 736
-             738:   38(fvec3) Load 43(inF0)
-             739:   38(fvec3) Load 44(inF1)
-             741:   38(fvec3) CompositeConstruct 740 740 740
-             742:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 738 739 741
-                              Store 737(r039b) 742
-             744:   38(fvec3) Load 43(inF0)
-             745:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 744
-                              Store 743(r043) 745
+             730:  594(bvec3) IsNan 729
+                              Store 728(r041) 730
+             732:   38(fvec3) Load 43(inF0)
+             733:   38(fvec3) Load 44(inF1)
+             734:   38(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 732 733
+                              Store 731(r042) 734
+             736:   38(fvec3) Load 43(inF0)
+             737:   38(fvec3) Load 44(inF1)
+             738:   38(fvec3) Load 45(inF2)
+             739:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 736 737 738
+                              Store 735(r039a) 739
+             741:   38(fvec3) Load 43(inF0)
+             742:   38(fvec3) Load 44(inF1)
+             744:   38(fvec3) CompositeConstruct 743 743 743
+             745:   38(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 741 742 744
+                              Store 740(r039b) 745
              747:   38(fvec3) Load 43(inF0)
-             748:   38(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 747
-                              Store 746(r044) 748
+             748:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 747
+                              Store 746(r043) 748
              750:   38(fvec3) Load 43(inF0)
-             751:   38(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 750
-             752:   38(fvec3) VectorTimesScalar 751 272
-                              Store 749(r045) 752
-             754:   38(fvec3) Load 43(inF0)
-             755:   38(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 754
-                              Store 753(r046) 755
+             751:   38(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 750
+                              Store 749(r044) 751
+             753:   38(fvec3) Load 43(inF0)
+             754:   38(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 753
+             755:   38(fvec3) VectorTimesScalar 754 276
+                              Store 752(r045) 755
              757:   38(fvec3) Load 43(inF0)
-             758:   38(fvec3) Load 44(inF1)
-             759:   38(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 757 758
-                              Store 756(r047) 759
-             761:   38(fvec3) Load 43(inF0)
-             762:   38(fvec3) Load 44(inF1)
-             763:   38(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 761 762
-                              Store 760(r048) 763
-             765:   38(fvec3) Load 43(inF0)
-             766:   38(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 765
-                              Store 764(r049) 766
+             758:   38(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 757
+                              Store 756(r046) 758
+             760:   38(fvec3) Load 43(inF0)
+             761:   38(fvec3) Load 44(inF1)
+             762:   38(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 760 761
+                              Store 759(r047) 762
+             764:   38(fvec3) Load 43(inF0)
+             765:   38(fvec3) Load 44(inF1)
+             766:   38(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 764 765
+                              Store 763(r048) 766
              768:   38(fvec3) Load 43(inF0)
-             769:   38(fvec3) Load 44(inF1)
-             770:   38(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 768 769
-                              Store 767(r050) 770
-             772:   38(fvec3) Load 43(inF0)
-             773:   38(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 772
-                              Store 771(r051) 773
+             769:   38(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 768
+                              Store 767(r049) 769
+             771:   38(fvec3) Load 43(inF0)
+             772:   38(fvec3) Load 44(inF1)
+             773:   38(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 771 772
+                              Store 770(r050) 773
              775:   38(fvec3) Load 43(inF0)
-             776:   38(fvec3) CompositeConstruct 293 293 293
-             777:   38(fvec3) FDiv 776 775
-                              Store 774(r052) 777
-             779:   38(fvec3) Load 43(inF0)
-             780:   38(fvec3) Load 44(inF1)
-             781:   38(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 779 780
-                              Store 778(r053) 781
-             783:   38(fvec3) Load 43(inF0)
-             784:   38(fvec3) Load 44(inF1)
-             785:   38(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 783 784 534
-                              Store 782(r054) 785
-             788:   40(ivec3) BitReverse 787
-                              Store 786(r055) 788
-             790:   38(fvec3) Load 43(inF0)
-             791:   38(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 790
-                              Store 789(r056) 791
+             776:   38(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 775
+                              Store 774(r051) 776
+             778:   38(fvec3) Load 43(inF0)
+             779:   38(fvec3) CompositeConstruct 297 297 297
+             780:   38(fvec3) FDiv 779 778
+                              Store 777(r052) 780
+             782:   38(fvec3) Load 43(inF0)
+             783:   38(fvec3) Load 44(inF1)
+             784:   38(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 782 783
+                              Store 781(r053) 784
+             786:   38(fvec3) Load 43(inF0)
+             787:   38(fvec3) Load 44(inF1)
+             788:   38(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 786 787 247
+                              Store 785(r054) 788
+             791:   40(ivec3) BitReverse 790
+                              Store 789(r055) 791
              793:   38(fvec3) Load 43(inF0)
-             794:   38(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 793
-                              Store 792(r057) 794
+             794:   38(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 793
+                              Store 792(r056) 794
              796:   38(fvec3) Load 43(inF0)
-             797:   38(fvec3) CompositeConstruct 141 141 141
-             798:   38(fvec3) CompositeConstruct 293 293 293
-             799:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 796 797 798
-                              Store 795(r058) 799
-             801:   38(fvec3) Load 43(inF0)
-             802:   38(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 801
-                              Store 800(r059) 802
+             797:   38(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 796
+                              Store 795(r057) 797
+             799:   38(fvec3) Load 43(inF0)
+             800:   38(fvec3) CompositeConstruct 141 141 141
+             801:   38(fvec3) CompositeConstruct 297 297 297
+             802:   38(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 799 800 801
+                              Store 798(r058) 802
              804:   38(fvec3) Load 43(inF0)
-             805:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 804
-                              Store 803(r060) 805
-             806:   38(fvec3) Load 43(inF0)
-             807:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 806
-                              Store 44(inF1) 807
-             808:   38(fvec3) Load 43(inF0)
-             809:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 808
-                              Store 45(inF2) 809
+             805:   38(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 804
+                              Store 803(r059) 805
+             807:   38(fvec3) Load 43(inF0)
+             808:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 807
+                              Store 806(r060) 808
+             809:   38(fvec3) Load 43(inF0)
+             810:   38(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 809
+                              Store 44(inF1) 810
              811:   38(fvec3) Load 43(inF0)
-             812:   38(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 811
-                              Store 810(r061) 812
+             812:   38(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 811
+                              Store 45(inF2) 812
              814:   38(fvec3) Load 43(inF0)
-             815:   38(fvec3) Load 44(inF1)
-             816:   38(fvec3) Load 45(inF2)
-             817:   38(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 814 815 816
-                              Store 813(r062) 817
-             819:   38(fvec3) Load 43(inF0)
-             820:   38(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 819
-                              Store 818(r063) 820
+             815:   38(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 814
+                              Store 813(r061) 815
+             817:   38(fvec3) Load 43(inF0)
+             818:   38(fvec3) Load 44(inF1)
+             819:   38(fvec3) Load 45(inF2)
+             820:   38(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 817 818 819
+                              Store 816(r062) 820
              822:   38(fvec3) Load 43(inF0)
-             823:   38(fvec3) Load 44(inF1)
-             824:   38(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 822 823
-                              Store 821(r064) 824
-             826:   38(fvec3) Load 43(inF0)
-             827:   38(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 826
-                              Store 825(r065) 827
+             823:   38(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 822
+                              Store 821(r063) 823
+             825:   38(fvec3) Load 43(inF0)
+             826:   38(fvec3) Load 44(inF1)
+             827:   38(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 825 826
+                              Store 824(r064) 827
              829:   38(fvec3) Load 43(inF0)
-             830:   38(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 829
-                              Store 828(r066) 830
+             830:   38(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 829
+                              Store 828(r065) 830
              832:   38(fvec3) Load 43(inF0)
-             833:   38(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 832
-                              Store 831(r067) 833
-                              ReturnValue 835
+             833:   38(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 832
+                              Store 831(r066) 833
+             835:   38(fvec3) Load 43(inF0)
+             836:   38(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 835
+                              Store 834(r067) 836
+                              ReturnValue 838
                               FunctionEnd
 60(PixelShaderFunction(vf4;vf4;vf4;vu4;vu4;):   50(fvec4) Function None 54
         55(inF0):     51(ptr) FunctionParameter
@@ -7203,1006 +7222,1006 @@
         58(inU0):     53(ptr) FunctionParameter
         59(inU1):     53(ptr) FunctionParameter
               61:             Label
-       838(r000):    138(ptr) Variable Function
-       844(r001):     51(ptr) Variable Function
-       847(r002):     51(ptr) Variable Function
-       850(r003):    138(ptr) Variable Function
-       854(r004):     51(ptr) Variable Function
-       859(r005):    858(ptr) Variable Function
-       862(r006):     53(ptr) Variable Function
-       865(r007):     51(ptr) Variable Function
-       868(r009):     51(ptr) Variable Function
-       871(r010):     51(ptr) Variable Function
-       875(r011):     51(ptr) Variable Function
-       878(r012):     51(ptr) Variable Function
-       896(r013):     51(ptr) Variable Function
-       899(r014):     51(ptr) Variable Function
-       902(r015):     53(ptr) Variable Function
-       905(r016):     51(ptr) Variable Function
-       908(r017):     51(ptr) Variable Function
-       911(r018):     51(ptr) Variable Function
-       914(r019):     51(ptr) Variable Function
-       917(r020):     51(ptr) Variable Function
-       920(r021):     51(ptr) Variable Function
-       923(r022):     51(ptr) Variable Function
-       926(r023):      7(ptr) Variable Function
-       930(r024):      7(ptr) Variable Function
-       934(r025):     51(ptr) Variable Function
-       945(r029):     51(ptr) Variable Function
-       948(r030):     51(ptr) Variable Function
-       951(r031):     51(ptr) Variable Function
-       956(r032):     53(ptr) Variable Function
-       961(r033):     53(ptr) Variable Function
-       963(r034):     51(ptr) Variable Function
-       966(r036):     51(ptr) Variable Function
-       970(r037):     51(ptr) Variable Function
-       973(r039):     51(ptr) Variable Function
-       977(r040):    976(ptr) Variable Function
-       980(r041):    976(ptr) Variable Function
-       983(r042):     51(ptr) Variable Function
-      987(r039a):     51(ptr) Variable Function
-       992(r043):      7(ptr) Variable Function
-       995(r044):     51(ptr) Variable Function
-       998(r045):     51(ptr) Variable Function
-      1002(r046):     51(ptr) Variable Function
-      1005(r047):     51(ptr) Variable Function
-      1009(r048):     51(ptr) Variable Function
-      1013(r049):     51(ptr) Variable Function
-      1016(r050):     51(ptr) Variable Function
-      1020(r051):     51(ptr) Variable Function
-      1023(r052):     51(ptr) Variable Function
-      1027(r053):     51(ptr) Variable Function
-      1031(r054):     51(ptr) Variable Function
-      1035(r055):     53(ptr) Variable Function
-      1038(r056):     51(ptr) Variable Function
-      1041(r057):     51(ptr) Variable Function
-      1044(r058):     51(ptr) Variable Function
-      1049(r059):     51(ptr) Variable Function
-      1052(r060):     51(ptr) Variable Function
-      1059(r061):     51(ptr) Variable Function
-      1062(r062):     51(ptr) Variable Function
-      1067(r063):     51(ptr) Variable Function
-      1070(r064):     51(ptr) Variable Function
-      1074(r065):     51(ptr) Variable Function
-      1077(r066):     51(ptr) Variable Function
-      1080(r067):     51(ptr) Variable Function
-             839:   50(fvec4) Load 55(inF0)
-             842:  840(bvec4) FOrdNotEqual 839 841
-             843:   137(bool) All 842
-                              Store 838(r000) 843
-             845:   50(fvec4) Load 55(inF0)
-             846:   50(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 845
-                              Store 844(r001) 846
+       841(r000):    138(ptr) Variable Function
+       847(r001):     51(ptr) Variable Function
+       850(r002):     51(ptr) Variable Function
+       853(r003):    138(ptr) Variable Function
+       857(r004):     51(ptr) Variable Function
+       862(r005):    861(ptr) Variable Function
+       865(r006):     53(ptr) Variable Function
+       868(r007):     51(ptr) Variable Function
+       871(r009):     51(ptr) Variable Function
+       874(r010):     51(ptr) Variable Function
+       878(r011):     51(ptr) Variable Function
+       881(r012):     51(ptr) Variable Function
+       899(r013):     51(ptr) Variable Function
+       902(r014):     51(ptr) Variable Function
+       905(r015):     53(ptr) Variable Function
+       908(r016):     51(ptr) Variable Function
+       911(r017):     51(ptr) Variable Function
+       914(r018):     51(ptr) Variable Function
+       917(r019):     51(ptr) Variable Function
+       920(r020):     51(ptr) Variable Function
+       923(r021):     51(ptr) Variable Function
+       926(r022):     51(ptr) Variable Function
+       929(r023):      7(ptr) Variable Function
+       933(r024):      7(ptr) Variable Function
+       937(r025):     51(ptr) Variable Function
+       948(r029):     51(ptr) Variable Function
+       951(r030):     51(ptr) Variable Function
+       954(r031):     51(ptr) Variable Function
+       959(r032):     53(ptr) Variable Function
+       964(r033):     53(ptr) Variable Function
+       966(r034):     51(ptr) Variable Function
+       969(r036):     51(ptr) Variable Function
+       973(r037):     51(ptr) Variable Function
+       976(r039):     51(ptr) Variable Function
+       980(r040):    979(ptr) Variable Function
+       983(r041):    979(ptr) Variable Function
+       986(r042):     51(ptr) Variable Function
+      990(r039a):     51(ptr) Variable Function
+       995(r043):      7(ptr) Variable Function
+       998(r044):     51(ptr) Variable Function
+      1001(r045):     51(ptr) Variable Function
+      1005(r046):     51(ptr) Variable Function
+      1008(r047):     51(ptr) Variable Function
+      1012(r048):     51(ptr) Variable Function
+      1016(r049):     51(ptr) Variable Function
+      1019(r050):     51(ptr) Variable Function
+      1023(r051):     51(ptr) Variable Function
+      1026(r052):     51(ptr) Variable Function
+      1030(r053):     51(ptr) Variable Function
+      1034(r054):     51(ptr) Variable Function
+      1038(r055):     53(ptr) Variable Function
+      1041(r056):     51(ptr) Variable Function
+      1044(r057):     51(ptr) Variable Function
+      1047(r058):     51(ptr) Variable Function
+      1052(r059):     51(ptr) Variable Function
+      1055(r060):     51(ptr) Variable Function
+      1062(r061):     51(ptr) Variable Function
+      1065(r062):     51(ptr) Variable Function
+      1070(r063):     51(ptr) Variable Function
+      1073(r064):     51(ptr) Variable Function
+      1077(r065):     51(ptr) Variable Function
+      1080(r066):     51(ptr) Variable Function
+      1083(r067):     51(ptr) Variable Function
+             842:   50(fvec4) Load 55(inF0)
+             845:  843(bvec4) FOrdNotEqual 842 844
+             846:   137(bool) All 845
+                              Store 841(r000) 846
              848:   50(fvec4) Load 55(inF0)
-             849:   50(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 848
-                              Store 847(r002) 849
+             849:   50(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 848
+                              Store 847(r001) 849
              851:   50(fvec4) Load 55(inF0)
-             852:  840(bvec4) FOrdNotEqual 851 841
-             853:   137(bool) Any 852
-                              Store 850(r003) 853
-             855:   50(fvec4) Load 55(inF0)
-             856:   50(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 855
-                              Store 854(r004) 856
-             860:   50(fvec4) Load 55(inF0)
-             861:  857(ivec4) Bitcast 860
-                              Store 859(r005) 861
+             852:   50(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 851
+                              Store 850(r002) 852
+             854:   50(fvec4) Load 55(inF0)
+             855:  843(bvec4) FOrdNotEqual 854 844
+             856:   137(bool) Any 855
+                              Store 853(r003) 856
+             858:   50(fvec4) Load 55(inF0)
+             859:   50(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 858
+                              Store 857(r004) 859
              863:   50(fvec4) Load 55(inF0)
-             864:   52(ivec4) Bitcast 863
-                              Store 862(r006) 864
-             866:   52(ivec4) Load 58(inU0)
-             867:   50(fvec4) Bitcast 866
-                              Store 865(r007) 867
-             869:   50(fvec4) Load 55(inF0)
-             870:   50(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 869
-                              Store 868(r009) 870
+             864:  860(ivec4) Bitcast 863
+                              Store 862(r005) 864
+             866:   50(fvec4) Load 55(inF0)
+             867:   52(ivec4) Bitcast 866
+                              Store 865(r006) 867
+             869:   52(ivec4) Load 58(inU0)
+             870:   50(fvec4) Bitcast 869
+                              Store 868(r007) 870
              872:   50(fvec4) Load 55(inF0)
-             873:   50(fvec4) Load 56(inF1)
-             874:   50(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 872 873
-                              Store 871(r010) 874
-             876:   50(fvec4) Load 55(inF0)
-             877:   50(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 876
-                              Store 875(r011) 877
+             873:   50(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 872
+                              Store 871(r009) 873
+             875:   50(fvec4) Load 55(inF0)
+             876:   50(fvec4) Load 56(inF1)
+             877:   50(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 875 876
+                              Store 874(r010) 877
              879:   50(fvec4) Load 55(inF0)
-             880:   50(fvec4) Load 56(inF1)
-             881:   50(fvec4) Load 57(inF2)
-             882:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 879 880 881
-                              Store 878(r012) 882
-             883:   50(fvec4) Load 55(inF0)
-             884:  840(bvec4) FOrdLessThan 883 841
-             885:   137(bool) Any 884
-                              SelectionMerge 887 None
-                              BranchConditional 885 886 887
-             886:               Label
+             880:   50(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 879
+                              Store 878(r011) 880
+             882:   50(fvec4) Load 55(inF0)
+             883:   50(fvec4) Load 56(inF1)
+             884:   50(fvec4) Load 57(inF2)
+             885:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 882 883 884
+                              Store 881(r012) 885
+             886:   50(fvec4) Load 55(inF0)
+             887:  843(bvec4) FOrdLessThan 886 844
+             888:   137(bool) Any 887
+                              SelectionMerge 890 None
+                              BranchConditional 888 889 890
+             889:               Label
                                 Kill
-             887:             Label
-             889:   52(ivec4) Load 58(inU0)
-             891:  840(bvec4) ULessThan 889 890
-             892:   137(bool) Any 891
-                              SelectionMerge 894 None
-                              BranchConditional 892 893 894
-             893:               Label
+             890:             Label
+             892:   52(ivec4) Load 58(inU0)
+             894:  843(bvec4) ULessThan 892 893
+             895:   137(bool) Any 894
+                              SelectionMerge 897 None
+                              BranchConditional 895 896 897
+             896:               Label
                                 Kill
-             894:             Label
-             897:   50(fvec4) Load 55(inF0)
-             898:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 897
-                              Store 896(r013) 898
+             897:             Label
              900:   50(fvec4) Load 55(inF0)
-             901:   50(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 900
-                              Store 899(r014) 901
-             904:   52(ivec4) BitCount 903
-                              Store 902(r015) 904
-             906:   50(fvec4) Load 55(inF0)
-             907:   50(fvec4) DPdx 906
-                              Store 905(r016) 907
+             901:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 900
+                              Store 899(r013) 901
+             903:   50(fvec4) Load 55(inF0)
+             904:   50(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 903
+                              Store 902(r014) 904
+             907:   52(ivec4) BitCount 906
+                              Store 905(r015) 907
              909:   50(fvec4) Load 55(inF0)
-             910:   50(fvec4) DPdxCoarse 909
-                              Store 908(r017) 910
+             910:   50(fvec4) DPdx 909
+                              Store 908(r016) 910
              912:   50(fvec4) Load 55(inF0)
-             913:   50(fvec4) DPdxFine 912
-                              Store 911(r018) 913
+             913:   50(fvec4) DPdxCoarse 912
+                              Store 911(r017) 913
              915:   50(fvec4) Load 55(inF0)
-             916:   50(fvec4) DPdy 915
-                              Store 914(r019) 916
+             916:   50(fvec4) DPdxFine 915
+                              Store 914(r018) 916
              918:   50(fvec4) Load 55(inF0)
-             919:   50(fvec4) DPdyCoarse 918
-                              Store 917(r020) 919
+             919:   50(fvec4) DPdy 918
+                              Store 917(r019) 919
              921:   50(fvec4) Load 55(inF0)
-             922:   50(fvec4) DPdyFine 921
-                              Store 920(r021) 922
+             922:   50(fvec4) DPdyCoarse 921
+                              Store 920(r020) 922
              924:   50(fvec4) Load 55(inF0)
-             925:   50(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 924
-                              Store 923(r022) 925
+             925:   50(fvec4) DPdyFine 924
+                              Store 923(r021) 925
              927:   50(fvec4) Load 55(inF0)
-             928:   50(fvec4) Load 56(inF1)
-             929:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 927 928
-                              Store 926(r023) 929
-             931:   50(fvec4) Load 55(inF0)
-             932:   50(fvec4) Load 56(inF1)
-             933:    6(float) Dot 931 932
-                              Store 930(r024) 933
-             935:      7(ptr) AccessChain 55(inF0) 537
-             936:    6(float) Load 935
-             937:      7(ptr) AccessChain 56(inF1) 537
-             938:    6(float) Load 937
-             939:    6(float) FMul 936 938
-             940:      7(ptr) AccessChain 55(inF0) 538
+             928:   50(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 927
+                              Store 926(r022) 928
+             930:   50(fvec4) Load 55(inF0)
+             931:   50(fvec4) Load 56(inF1)
+             932:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 930 931
+                              Store 929(r023) 932
+             934:   50(fvec4) Load 55(inF0)
+             935:   50(fvec4) Load 56(inF1)
+             936:    6(float) Dot 934 935
+                              Store 933(r024) 936
+             938:      7(ptr) AccessChain 55(inF0) 540
+             939:    6(float) Load 938
+             940:      7(ptr) AccessChain 56(inF1) 540
              941:    6(float) Load 940
-             942:      7(ptr) AccessChain 56(inF1) 654
-             943:    6(float) Load 942
-             944:   50(fvec4) CompositeConstruct 293 939 941 943
-                              Store 934(r025) 944
-             946:   50(fvec4) Load 55(inF0)
-             947:   50(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 946
-                              Store 945(r029) 947
+             942:    6(float) FMul 939 941
+             943:      7(ptr) AccessChain 55(inF0) 541
+             944:    6(float) Load 943
+             945:      7(ptr) AccessChain 56(inF1) 657
+             946:    6(float) Load 945
+             947:   50(fvec4) CompositeConstruct 297 942 944 946
+                              Store 937(r025) 947
              949:   50(fvec4) Load 55(inF0)
-             950:   50(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 949
-                              Store 948(r030) 950
+             950:   50(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 949
+                              Store 948(r029) 950
              952:   50(fvec4) Load 55(inF0)
-             953:   50(fvec4) Load 56(inF1)
-             954:   50(fvec4) Load 57(inF2)
-             955:   50(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 952 953 954
-                              Store 951(r031) 955
-             960:   52(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 959
-                              Store 956(r032) 960
-             962:   52(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 959
-                              Store 961(r033) 962
-             964:   50(fvec4) Load 55(inF0)
-             965:   50(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 964
-                              Store 963(r034) 965
+             953:   50(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 952
+                              Store 951(r030) 953
+             955:   50(fvec4) Load 55(inF0)
+             956:   50(fvec4) Load 56(inF1)
+             957:   50(fvec4) Load 57(inF2)
+             958:   50(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 955 956 957
+                              Store 954(r031) 958
+             963:   52(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 962
+                              Store 959(r032) 963
+             965:   52(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 962
+                              Store 964(r033) 965
              967:   50(fvec4) Load 55(inF0)
-             968:   50(fvec4) Load 56(inF1)
-             969:   50(fvec4) FMod 967 968
-                              Store 966(r036) 969
-             971:   50(fvec4) Load 55(inF0)
-             972:   50(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 971
-                              Store 970(r037) 972
+             968:   50(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 967
+                              Store 966(r034) 968
+             970:   50(fvec4) Load 55(inF0)
+             971:   50(fvec4) Load 56(inF1)
+             972:   50(fvec4) FMod 970 971
+                              Store 969(r036) 972
              974:   50(fvec4) Load 55(inF0)
-             975:   50(fvec4) Fwidth 974
-                              Store 973(r039) 975
-             978:   50(fvec4) Load 55(inF0)
-             979:  840(bvec4) IsInf 978
-                              Store 977(r040) 979
+             975:   50(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 974
+                              Store 973(r037) 975
+             977:   50(fvec4) Load 55(inF0)
+             978:   50(fvec4) Fwidth 977
+                              Store 976(r039) 978
              981:   50(fvec4) Load 55(inF0)
-             982:  840(bvec4) IsNan 981
-                              Store 980(r041) 982
+             982:  843(bvec4) IsInf 981
+                              Store 980(r040) 982
              984:   50(fvec4) Load 55(inF0)
-             985:   50(fvec4) Load 56(inF1)
-             986:   50(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 984 985
-                              Store 983(r042) 986
-             988:   50(fvec4) Load 55(inF0)
-             989:   50(fvec4) Load 56(inF1)
-             990:   50(fvec4) Load 57(inF2)
-             991:   50(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 988 989 990
-                              Store 987(r039a) 991
-             993:   50(fvec4) Load 55(inF0)
-             994:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 993
-                              Store 992(r043) 994
+             985:  843(bvec4) IsNan 984
+                              Store 983(r041) 985
+             987:   50(fvec4) Load 55(inF0)
+             988:   50(fvec4) Load 56(inF1)
+             989:   50(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 987 988
+                              Store 986(r042) 989
+             991:   50(fvec4) Load 55(inF0)
+             992:   50(fvec4) Load 56(inF1)
+             993:   50(fvec4) Load 57(inF2)
+             994:   50(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 991 992 993
+                              Store 990(r039a) 994
              996:   50(fvec4) Load 55(inF0)
-             997:   50(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 996
-                              Store 995(r044) 997
+             997:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 996
+                              Store 995(r043) 997
              999:   50(fvec4) Load 55(inF0)
-            1000:   50(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 999
-            1001:   50(fvec4) VectorTimesScalar 1000 272
-                              Store 998(r045) 1001
-            1003:   50(fvec4) Load 55(inF0)
-            1004:   50(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 1003
-                              Store 1002(r046) 1004
+            1000:   50(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 999
+                              Store 998(r044) 1000
+            1002:   50(fvec4) Load 55(inF0)
+            1003:   50(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 1002
+            1004:   50(fvec4) VectorTimesScalar 1003 276
+                              Store 1001(r045) 1004
             1006:   50(fvec4) Load 55(inF0)
-            1007:   50(fvec4) Load 56(inF1)
-            1008:   50(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 1006 1007
-                              Store 1005(r047) 1008
-            1010:   50(fvec4) Load 55(inF0)
-            1011:   50(fvec4) Load 56(inF1)
-            1012:   50(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 1010 1011
-                              Store 1009(r048) 1012
-            1014:   50(fvec4) Load 55(inF0)
-            1015:   50(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 1014
-                              Store 1013(r049) 1015
+            1007:   50(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 1006
+                              Store 1005(r046) 1007
+            1009:   50(fvec4) Load 55(inF0)
+            1010:   50(fvec4) Load 56(inF1)
+            1011:   50(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 1009 1010
+                              Store 1008(r047) 1011
+            1013:   50(fvec4) Load 55(inF0)
+            1014:   50(fvec4) Load 56(inF1)
+            1015:   50(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 1013 1014
+                              Store 1012(r048) 1015
             1017:   50(fvec4) Load 55(inF0)
-            1018:   50(fvec4) Load 56(inF1)
-            1019:   50(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 1017 1018
-                              Store 1016(r050) 1019
-            1021:   50(fvec4) Load 55(inF0)
-            1022:   50(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 1021
-                              Store 1020(r051) 1022
+            1018:   50(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 1017
+                              Store 1016(r049) 1018
+            1020:   50(fvec4) Load 55(inF0)
+            1021:   50(fvec4) Load 56(inF1)
+            1022:   50(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 1020 1021
+                              Store 1019(r050) 1022
             1024:   50(fvec4) Load 55(inF0)
-            1025:   50(fvec4) CompositeConstruct 293 293 293 293
-            1026:   50(fvec4) FDiv 1025 1024
-                              Store 1023(r052) 1026
-            1028:   50(fvec4) Load 55(inF0)
-            1029:   50(fvec4) Load 56(inF1)
-            1030:   50(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1028 1029
-                              Store 1027(r053) 1030
-            1032:   50(fvec4) Load 55(inF0)
-            1033:   50(fvec4) Load 56(inF1)
-            1034:   50(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1032 1033 534
-                              Store 1031(r054) 1034
-            1037:   52(ivec4) BitReverse 1036
-                              Store 1035(r055) 1037
-            1039:   50(fvec4) Load 55(inF0)
-            1040:   50(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1039
-                              Store 1038(r056) 1040
+            1025:   50(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 1024
+                              Store 1023(r051) 1025
+            1027:   50(fvec4) Load 55(inF0)
+            1028:   50(fvec4) CompositeConstruct 297 297 297 297
+            1029:   50(fvec4) FDiv 1028 1027
+                              Store 1026(r052) 1029
+            1031:   50(fvec4) Load 55(inF0)
+            1032:   50(fvec4) Load 56(inF1)
+            1033:   50(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 1031 1032
+                              Store 1030(r053) 1033
+            1035:   50(fvec4) Load 55(inF0)
+            1036:   50(fvec4) Load 56(inF1)
+            1037:   50(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1035 1036 247
+                              Store 1034(r054) 1037
+            1040:   52(ivec4) BitReverse 1039
+                              Store 1038(r055) 1040
             1042:   50(fvec4) Load 55(inF0)
-            1043:   50(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1042
-                              Store 1041(r057) 1043
+            1043:   50(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1042
+                              Store 1041(r056) 1043
             1045:   50(fvec4) Load 55(inF0)
-            1046:   50(fvec4) CompositeConstruct 141 141 141 141
-            1047:   50(fvec4) CompositeConstruct 293 293 293 293
-            1048:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1045 1046 1047
-                              Store 1044(r058) 1048
-            1050:   50(fvec4) Load 55(inF0)
-            1051:   50(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1050
-                              Store 1049(r059) 1051
+            1046:   50(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1045
+                              Store 1044(r057) 1046
+            1048:   50(fvec4) Load 55(inF0)
+            1049:   50(fvec4) CompositeConstruct 141 141 141 141
+            1050:   50(fvec4) CompositeConstruct 297 297 297 297
+            1051:   50(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1048 1049 1050
+                              Store 1047(r058) 1051
             1053:   50(fvec4) Load 55(inF0)
-            1054:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1053
-                              Store 1052(r060) 1054
-            1055:   50(fvec4) Load 55(inF0)
-            1056:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1055
-                              Store 56(inF1) 1056
-            1057:   50(fvec4) Load 55(inF0)
-            1058:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1057
-                              Store 57(inF2) 1058
+            1054:   50(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1053
+                              Store 1052(r059) 1054
+            1056:   50(fvec4) Load 55(inF0)
+            1057:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1056
+                              Store 1055(r060) 1057
+            1058:   50(fvec4) Load 55(inF0)
+            1059:   50(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1058
+                              Store 56(inF1) 1059
             1060:   50(fvec4) Load 55(inF0)
-            1061:   50(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1060
-                              Store 1059(r061) 1061
+            1061:   50(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1060
+                              Store 57(inF2) 1061
             1063:   50(fvec4) Load 55(inF0)
-            1064:   50(fvec4) Load 56(inF1)
-            1065:   50(fvec4) Load 57(inF2)
-            1066:   50(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1063 1064 1065
-                              Store 1062(r062) 1066
-            1068:   50(fvec4) Load 55(inF0)
-            1069:   50(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1068
-                              Store 1067(r063) 1069
+            1064:   50(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1063
+                              Store 1062(r061) 1064
+            1066:   50(fvec4) Load 55(inF0)
+            1067:   50(fvec4) Load 56(inF1)
+            1068:   50(fvec4) Load 57(inF2)
+            1069:   50(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1066 1067 1068
+                              Store 1065(r062) 1069
             1071:   50(fvec4) Load 55(inF0)
-            1072:   50(fvec4) Load 56(inF1)
-            1073:   50(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1071 1072
-                              Store 1070(r064) 1073
-            1075:   50(fvec4) Load 55(inF0)
-            1076:   50(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1075
-                              Store 1074(r065) 1076
+            1072:   50(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1071
+                              Store 1070(r063) 1072
+            1074:   50(fvec4) Load 55(inF0)
+            1075:   50(fvec4) Load 56(inF1)
+            1076:   50(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1074 1075
+                              Store 1073(r064) 1076
             1078:   50(fvec4) Load 55(inF0)
-            1079:   50(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1078
-                              Store 1077(r066) 1079
+            1079:   50(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1078
+                              Store 1077(r065) 1079
             1081:   50(fvec4) Load 55(inF0)
-            1082:   50(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1081
-                              Store 1080(r067) 1082
-                              ReturnValue 1084
+            1082:   50(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1081
+                              Store 1080(r066) 1082
+            1084:   50(fvec4) Load 55(inF0)
+            1085:   50(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1084
+                              Store 1083(r067) 1085
+                              ReturnValue 1087
                               FunctionEnd
 68(PixelShaderFunction2x2(mf22;mf22;mf22;):          62 Function None 64
         65(inF0):     63(ptr) FunctionParameter
         66(inF1):     63(ptr) FunctionParameter
         67(inF2):     63(ptr) FunctionParameter
               69:             Label
-      1087(r000):    138(ptr) Variable Function
-      1092(r001):     63(ptr) Variable Function
-      1097(r003):    138(ptr) Variable Function
-      1101(r004):     63(ptr) Variable Function
-      1104(r005):     63(ptr) Variable Function
-      1107(r006):     63(ptr) Variable Function
-      1111(r007):     63(ptr) Variable Function
-      1121(r008):     63(ptr) Variable Function
-      1126(r009):     63(ptr) Variable Function
-      1129(r010):     63(ptr) Variable Function
-      1132(r011):     63(ptr) Variable Function
-      1135(r012):     63(ptr) Variable Function
-      1138(r013):     63(ptr) Variable Function
-      1141(r014):     63(ptr) Variable Function
-      1144(r015):     63(ptr) Variable Function
-      1147(r016):     63(ptr) Variable Function
-      1150(r017):     63(ptr) Variable Function
-      1153(r018):      7(ptr) Variable Function
-      1156(r019):     63(ptr) Variable Function
-      1159(R020):     63(ptr) Variable Function
-      1162(r021):     63(ptr) Variable Function
-      1165(r022):     63(ptr) Variable Function
-      1175(r023):     63(ptr) Variable Function
-      1178(r025):     63(ptr) Variable Function
-      1181(r026):     63(ptr) Variable Function
-     1185(r026a):     63(ptr) Variable Function
-      1190(r027):     63(ptr) Variable Function
-      1193(r028):     63(ptr) Variable Function
-      1197(r029):     63(ptr) Variable Function
-      1200(r030):     63(ptr) Variable Function
-      1204(r031):     63(ptr) Variable Function
-      1208(r032):     63(ptr) Variable Function
-      1212(r033):     63(ptr) Variable Function
-      1215(r034):     63(ptr) Variable Function
-      1218(r035):     63(ptr) Variable Function
-      1221(r036):     63(ptr) Variable Function
-      1226(r037):     63(ptr) Variable Function
-      1229(r038):     63(ptr) Variable Function
-      1236(r039):     63(ptr) Variable Function
-      1239(r049):     63(ptr) Variable Function
-      1244(r041):     63(ptr) Variable Function
-      1247(r042):     63(ptr) Variable Function
-      1251(r043):     63(ptr) Variable Function
-      1254(r044):     63(ptr) Variable Function
-      1259(r046):     63(ptr) Variable Function
-            1088:          62 Load 65(inF0)
-            1090:        1089 FOrdNotEqual 1088 141
-            1091:   137(bool) All 1090
-                              Store 1087(r000) 1091
-            1093:          62 Load 65(inF0)
-            1094:          62 ExtInst 1(GLSL.std.450) 4(FAbs) 1093
-                              Store 1092(r001) 1094
-            1095:          62 Load 65(inF0)
-            1096:          62 ExtInst 1(GLSL.std.450) 17(Acos) 1095
+      1090(r000):    138(ptr) Variable Function
+      1095(r001):     63(ptr) Variable Function
+      1100(r003):    138(ptr) Variable Function
+      1104(r004):     63(ptr) Variable Function
+      1107(r005):     63(ptr) Variable Function
+      1110(r006):     63(ptr) Variable Function
+      1114(r007):     63(ptr) Variable Function
+      1124(r008):     63(ptr) Variable Function
+      1129(r009):     63(ptr) Variable Function
+      1132(r010):     63(ptr) Variable Function
+      1135(r011):     63(ptr) Variable Function
+      1138(r012):     63(ptr) Variable Function
+      1141(r013):     63(ptr) Variable Function
+      1144(r014):     63(ptr) Variable Function
+      1147(r015):     63(ptr) Variable Function
+      1150(r016):     63(ptr) Variable Function
+      1153(r017):     63(ptr) Variable Function
+      1156(r018):      7(ptr) Variable Function
+      1159(r019):     63(ptr) Variable Function
+      1162(R020):     63(ptr) Variable Function
+      1165(r021):     63(ptr) Variable Function
+      1168(r022):     63(ptr) Variable Function
+      1178(r023):     63(ptr) Variable Function
+      1181(r025):     63(ptr) Variable Function
+      1184(r026):     63(ptr) Variable Function
+     1188(r026a):     63(ptr) Variable Function
+      1193(r027):     63(ptr) Variable Function
+      1196(r028):     63(ptr) Variable Function
+      1200(r029):     63(ptr) Variable Function
+      1203(r030):     63(ptr) Variable Function
+      1207(r031):     63(ptr) Variable Function
+      1211(r032):     63(ptr) Variable Function
+      1215(r033):     63(ptr) Variable Function
+      1218(r034):     63(ptr) Variable Function
+      1221(r035):     63(ptr) Variable Function
+      1224(r036):     63(ptr) Variable Function
+      1229(r037):     63(ptr) Variable Function
+      1232(r038):     63(ptr) Variable Function
+      1239(r039):     63(ptr) Variable Function
+      1242(r049):     63(ptr) Variable Function
+      1247(r041):     63(ptr) Variable Function
+      1250(r042):     63(ptr) Variable Function
+      1254(r043):     63(ptr) Variable Function
+      1257(r044):     63(ptr) Variable Function
+      1262(r046):     63(ptr) Variable Function
+            1091:          62 Load 65(inF0)
+            1093:        1092 FOrdNotEqual 1091 141
+            1094:   137(bool) All 1093
+                              Store 1090(r000) 1094
+            1096:          62 Load 65(inF0)
+            1097:          62 ExtInst 1(GLSL.std.450) 4(FAbs) 1096
+                              Store 1095(r001) 1097
             1098:          62 Load 65(inF0)
-            1099:        1089 FOrdNotEqual 1098 141
-            1100:   137(bool) Any 1099
-                              Store 1097(r003) 1100
-            1102:          62 Load 65(inF0)
-            1103:          62 ExtInst 1(GLSL.std.450) 16(Asin) 1102
-                              Store 1101(r004) 1103
+            1099:          62 ExtInst 1(GLSL.std.450) 17(Acos) 1098
+            1101:          62 Load 65(inF0)
+            1102:        1092 FOrdNotEqual 1101 141
+            1103:   137(bool) Any 1102
+                              Store 1100(r003) 1103
             1105:          62 Load 65(inF0)
-            1106:          62 ExtInst 1(GLSL.std.450) 18(Atan) 1105
-                              Store 1104(r005) 1106
+            1106:          62 ExtInst 1(GLSL.std.450) 16(Asin) 1105
+                              Store 1104(r004) 1106
             1108:          62 Load 65(inF0)
-            1109:          62 Load 66(inF1)
-            1110:          62 ExtInst 1(GLSL.std.450) 25(Atan2) 1108 1109
-                              Store 1107(r006) 1110
-            1112:          62 Load 65(inF0)
-            1113:          62 ExtInst 1(GLSL.std.450) 9(Ceil) 1112
-                              Store 1111(r007) 1113
-            1114:          62 Load 65(inF0)
-            1116:        1089 FOrdLessThan 1114 1115
-            1117:   137(bool) Any 1116
-                              SelectionMerge 1119 None
-                              BranchConditional 1117 1118 1119
-            1118:               Label
+            1109:          62 ExtInst 1(GLSL.std.450) 18(Atan) 1108
+                              Store 1107(r005) 1109
+            1111:          62 Load 65(inF0)
+            1112:          62 Load 66(inF1)
+            1113:          62 ExtInst 1(GLSL.std.450) 25(Atan2) 1111 1112
+                              Store 1110(r006) 1113
+            1115:          62 Load 65(inF0)
+            1116:          62 ExtInst 1(GLSL.std.450) 9(Ceil) 1115
+                              Store 1114(r007) 1116
+            1117:          62 Load 65(inF0)
+            1119:        1092 FOrdLessThan 1117 1118
+            1120:   137(bool) Any 1119
+                              SelectionMerge 1122 None
+                              BranchConditional 1120 1121 1122
+            1121:               Label
                                 Kill
-            1119:             Label
-            1122:          62 Load 65(inF0)
-            1123:          62 Load 66(inF1)
-            1124:          62 Load 67(inF2)
-            1125:          62 ExtInst 1(GLSL.std.450) 43(FClamp) 1122 1123 1124
-                              Store 1121(r008) 1125
-            1127:          62 Load 65(inF0)
-            1128:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1127
-                              Store 1126(r009) 1128
+            1122:             Label
+            1125:          62 Load 65(inF0)
+            1126:          62 Load 66(inF1)
+            1127:          62 Load 67(inF2)
+            1128:          62 ExtInst 1(GLSL.std.450) 43(FClamp) 1125 1126 1127
+                              Store 1124(r008) 1128
             1130:          62 Load 65(inF0)
-            1131:          62 ExtInst 1(GLSL.std.450) 20(Cosh) 1130
-                              Store 1129(r010) 1131
+            1131:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1130
+                              Store 1129(r009) 1131
             1133:          62 Load 65(inF0)
-            1134:          62 DPdx 1133
-                              Store 1132(r011) 1134
+            1134:          62 ExtInst 1(GLSL.std.450) 20(Cosh) 1133
+                              Store 1132(r010) 1134
             1136:          62 Load 65(inF0)
-            1137:          62 DPdxCoarse 1136
-                              Store 1135(r012) 1137
+            1137:          62 DPdx 1136
+                              Store 1135(r011) 1137
             1139:          62 Load 65(inF0)
-            1140:          62 DPdxFine 1139
-                              Store 1138(r013) 1140
+            1140:          62 DPdxCoarse 1139
+                              Store 1138(r012) 1140
             1142:          62 Load 65(inF0)
-            1143:          62 DPdy 1142
-                              Store 1141(r014) 1143
+            1143:          62 DPdxFine 1142
+                              Store 1141(r013) 1143
             1145:          62 Load 65(inF0)
-            1146:          62 DPdyCoarse 1145
-                              Store 1144(r015) 1146
+            1146:          62 DPdy 1145
+                              Store 1144(r014) 1146
             1148:          62 Load 65(inF0)
-            1149:          62 DPdyFine 1148
-                              Store 1147(r016) 1149
+            1149:          62 DPdyCoarse 1148
+                              Store 1147(r015) 1149
             1151:          62 Load 65(inF0)
-            1152:          62 ExtInst 1(GLSL.std.450) 12(Degrees) 1151
-                              Store 1150(r017) 1152
+            1152:          62 DPdyFine 1151
+                              Store 1150(r016) 1152
             1154:          62 Load 65(inF0)
-            1155:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1154
-                              Store 1153(r018) 1155
+            1155:          62 ExtInst 1(GLSL.std.450) 12(Degrees) 1154
+                              Store 1153(r017) 1155
             1157:          62 Load 65(inF0)
-            1158:          62 ExtInst 1(GLSL.std.450) 27(Exp) 1157
-                              Store 1156(r019) 1158
+            1158:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1157
+                              Store 1156(r018) 1158
             1160:          62 Load 65(inF0)
-            1161:          62 ExtInst 1(GLSL.std.450) 29(Exp2) 1160
-                              Store 1159(R020) 1161
+            1161:          62 ExtInst 1(GLSL.std.450) 27(Exp) 1160
+                              Store 1159(r019) 1161
             1163:          62 Load 65(inF0)
-            1164:          62 ExtInst 1(GLSL.std.450) 8(Floor) 1163
-                              Store 1162(r021) 1164
+            1164:          62 ExtInst 1(GLSL.std.450) 29(Exp2) 1163
+                              Store 1162(R020) 1164
             1166:          62 Load 65(inF0)
-            1167:          62 Load 66(inF1)
-            1168:   26(fvec2) CompositeExtract 1166 0
-            1169:   26(fvec2) CompositeExtract 1167 0
-            1170:   26(fvec2) FMod 1168 1169
-            1171:   26(fvec2) CompositeExtract 1166 1
-            1172:   26(fvec2) CompositeExtract 1167 1
+            1167:          62 ExtInst 1(GLSL.std.450) 8(Floor) 1166
+                              Store 1165(r021) 1167
+            1169:          62 Load 65(inF0)
+            1170:          62 Load 66(inF1)
+            1171:   26(fvec2) CompositeExtract 1169 0
+            1172:   26(fvec2) CompositeExtract 1170 0
             1173:   26(fvec2) FMod 1171 1172
-            1174:          62 CompositeConstruct 1170 1173
-                              Store 1165(r022) 1174
-            1176:          62 Load 65(inF0)
-            1177:          62 ExtInst 1(GLSL.std.450) 10(Fract) 1176
-                              Store 1175(r023) 1177
+            1174:   26(fvec2) CompositeExtract 1169 1
+            1175:   26(fvec2) CompositeExtract 1170 1
+            1176:   26(fvec2) FMod 1174 1175
+            1177:          62 CompositeConstruct 1173 1176
+                              Store 1168(r022) 1177
             1179:          62 Load 65(inF0)
-            1180:          62 Fwidth 1179
-                              Store 1178(r025) 1180
+            1180:          62 ExtInst 1(GLSL.std.450) 10(Fract) 1179
+                              Store 1178(r023) 1180
             1182:          62 Load 65(inF0)
-            1183:          62 Load 66(inF1)
-            1184:          62 ExtInst 1(GLSL.std.450) 53(Ldexp) 1182 1183
-                              Store 1181(r026) 1184
-            1186:          62 Load 65(inF0)
-            1187:          62 Load 66(inF1)
-            1188:          62 Load 67(inF2)
-            1189:          62 ExtInst 1(GLSL.std.450) 46(FMix) 1186 1187 1188
-                              Store 1185(r026a) 1189
-            1191:          62 Load 65(inF0)
-            1192:          62 ExtInst 1(GLSL.std.450) 28(Log) 1191
-                              Store 1190(r027) 1192
+            1183:          62 Fwidth 1182
+                              Store 1181(r025) 1183
+            1185:          62 Load 65(inF0)
+            1186:          62 Load 66(inF1)
+            1187:          62 ExtInst 1(GLSL.std.450) 53(Ldexp) 1185 1186
+                              Store 1184(r026) 1187
+            1189:          62 Load 65(inF0)
+            1190:          62 Load 66(inF1)
+            1191:          62 Load 67(inF2)
+            1192:          62 ExtInst 1(GLSL.std.450) 46(FMix) 1189 1190 1191
+                              Store 1188(r026a) 1192
             1194:          62 Load 65(inF0)
-            1195:          62 ExtInst 1(GLSL.std.450) 30(Log2) 1194
-            1196:          62 MatrixTimesScalar 1195 272
-                              Store 1193(r028) 1196
-            1198:          62 Load 65(inF0)
-            1199:          62 ExtInst 1(GLSL.std.450) 30(Log2) 1198
-                              Store 1197(r029) 1199
+            1195:          62 ExtInst 1(GLSL.std.450) 28(Log) 1194
+                              Store 1193(r027) 1195
+            1197:          62 Load 65(inF0)
+            1198:          62 ExtInst 1(GLSL.std.450) 30(Log2) 1197
+            1199:          62 MatrixTimesScalar 1198 276
+                              Store 1196(r028) 1199
             1201:          62 Load 65(inF0)
-            1202:          62 Load 66(inF1)
-            1203:          62 ExtInst 1(GLSL.std.450) 40(FMax) 1201 1202
-                              Store 1200(r030) 1203
-            1205:          62 Load 65(inF0)
-            1206:          62 Load 66(inF1)
-            1207:          62 ExtInst 1(GLSL.std.450) 37(FMin) 1205 1206
-                              Store 1204(r031) 1207
-            1209:          62 Load 65(inF0)
-            1210:          62 Load 66(inF1)
-            1211:          62 ExtInst 1(GLSL.std.450) 26(Pow) 1209 1210
-                              Store 1208(r032) 1211
-            1213:          62 Load 65(inF0)
-            1214:          62 ExtInst 1(GLSL.std.450) 11(Radians) 1213
-                              Store 1212(r033) 1214
+            1202:          62 ExtInst 1(GLSL.std.450) 30(Log2) 1201
+                              Store 1200(r029) 1202
+            1204:          62 Load 65(inF0)
+            1205:          62 Load 66(inF1)
+            1206:          62 ExtInst 1(GLSL.std.450) 40(FMax) 1204 1205
+                              Store 1203(r030) 1206
+            1208:          62 Load 65(inF0)
+            1209:          62 Load 66(inF1)
+            1210:          62 ExtInst 1(GLSL.std.450) 37(FMin) 1208 1209
+                              Store 1207(r031) 1210
+            1212:          62 Load 65(inF0)
+            1213:          62 Load 66(inF1)
+            1214:          62 ExtInst 1(GLSL.std.450) 26(Pow) 1212 1213
+                              Store 1211(r032) 1214
             1216:          62 Load 65(inF0)
-            1217:          62 ExtInst 1(GLSL.std.450) 2(RoundEven) 1216
-                              Store 1215(r034) 1217
+            1217:          62 ExtInst 1(GLSL.std.450) 11(Radians) 1216
+                              Store 1215(r033) 1217
             1219:          62 Load 65(inF0)
-            1220:          62 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1219
-                              Store 1218(r035) 1220
+            1220:          62 ExtInst 1(GLSL.std.450) 2(RoundEven) 1219
+                              Store 1218(r034) 1220
             1222:          62 Load 65(inF0)
-            1223:   26(fvec2) CompositeConstruct 141 141
-            1224:   26(fvec2) CompositeConstruct 293 293
-            1225:          62 ExtInst 1(GLSL.std.450) 43(FClamp) 1222 1223 1224
-                              Store 1221(r036) 1225
-            1227:          62 Load 65(inF0)
-            1228:          62 ExtInst 1(GLSL.std.450) 6(FSign) 1227
-                              Store 1226(r037) 1228
+            1223:          62 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1222
+                              Store 1221(r035) 1223
+            1225:          62 Load 65(inF0)
+            1226:   26(fvec2) CompositeConstruct 141 141
+            1227:   26(fvec2) CompositeConstruct 297 297
+            1228:          62 ExtInst 1(GLSL.std.450) 43(FClamp) 1225 1226 1227
+                              Store 1224(r036) 1228
             1230:          62 Load 65(inF0)
-            1231:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1230
-                              Store 1229(r038) 1231
-            1232:          62 Load 65(inF0)
-            1233:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1232
-                              Store 66(inF1) 1233
-            1234:          62 Load 65(inF0)
-            1235:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1234
-                              Store 67(inF2) 1235
+            1231:          62 ExtInst 1(GLSL.std.450) 6(FSign) 1230
+                              Store 1229(r037) 1231
+            1233:          62 Load 65(inF0)
+            1234:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1233
+                              Store 1232(r038) 1234
+            1235:          62 Load 65(inF0)
+            1236:          62 ExtInst 1(GLSL.std.450) 13(Sin) 1235
+                              Store 66(inF1) 1236
             1237:          62 Load 65(inF0)
-            1238:          62 ExtInst 1(GLSL.std.450) 19(Sinh) 1237
-                              Store 1236(r039) 1238
+            1238:          62 ExtInst 1(GLSL.std.450) 14(Cos) 1237
+                              Store 67(inF2) 1238
             1240:          62 Load 65(inF0)
-            1241:          62 Load 66(inF1)
-            1242:          62 Load 67(inF2)
-            1243:          62 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1240 1241 1242
-                              Store 1239(r049) 1243
-            1245:          62 Load 65(inF0)
-            1246:          62 ExtInst 1(GLSL.std.450) 31(Sqrt) 1245
-                              Store 1244(r041) 1246
+            1241:          62 ExtInst 1(GLSL.std.450) 19(Sinh) 1240
+                              Store 1239(r039) 1241
+            1243:          62 Load 65(inF0)
+            1244:          62 Load 66(inF1)
+            1245:          62 Load 67(inF2)
+            1246:          62 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1243 1244 1245
+                              Store 1242(r049) 1246
             1248:          62 Load 65(inF0)
-            1249:          62 Load 66(inF1)
-            1250:          62 ExtInst 1(GLSL.std.450) 48(Step) 1248 1249
-                              Store 1247(r042) 1250
-            1252:          62 Load 65(inF0)
-            1253:          62 ExtInst 1(GLSL.std.450) 15(Tan) 1252
-                              Store 1251(r043) 1253
+            1249:          62 ExtInst 1(GLSL.std.450) 31(Sqrt) 1248
+                              Store 1247(r041) 1249
+            1251:          62 Load 65(inF0)
+            1252:          62 Load 66(inF1)
+            1253:          62 ExtInst 1(GLSL.std.450) 48(Step) 1251 1252
+                              Store 1250(r042) 1253
             1255:          62 Load 65(inF0)
-            1256:          62 ExtInst 1(GLSL.std.450) 21(Tanh) 1255
-                              Store 1254(r044) 1256
-            1257:          62 Load 65(inF0)
-            1258:          62 Transpose 1257
+            1256:          62 ExtInst 1(GLSL.std.450) 15(Tan) 1255
+                              Store 1254(r043) 1256
+            1258:          62 Load 65(inF0)
+            1259:          62 ExtInst 1(GLSL.std.450) 21(Tanh) 1258
+                              Store 1257(r044) 1259
             1260:          62 Load 65(inF0)
-            1261:          62 ExtInst 1(GLSL.std.450) 3(Trunc) 1260
-                              Store 1259(r046) 1261
-                              ReturnValue 1263
+            1261:          62 Transpose 1260
+            1263:          62 Load 65(inF0)
+            1264:          62 ExtInst 1(GLSL.std.450) 3(Trunc) 1263
+                              Store 1262(r046) 1264
+                              ReturnValue 1266
                               FunctionEnd
 76(PixelShaderFunction3x3(mf33;mf33;mf33;):          70 Function None 72
         73(inF0):     71(ptr) FunctionParameter
         74(inF1):     71(ptr) FunctionParameter
         75(inF2):     71(ptr) FunctionParameter
               77:             Label
-      1266(r000):    138(ptr) Variable Function
-      1271(r001):     71(ptr) Variable Function
-      1276(r003):    138(ptr) Variable Function
-      1280(r004):     71(ptr) Variable Function
-      1283(r005):     71(ptr) Variable Function
-      1286(r006):     71(ptr) Variable Function
-      1290(r007):     71(ptr) Variable Function
-      1300(r008):     71(ptr) Variable Function
-      1305(r009):     71(ptr) Variable Function
-      1308(r010):     71(ptr) Variable Function
-      1311(r011):     71(ptr) Variable Function
-      1314(r012):     71(ptr) Variable Function
-      1317(r013):     71(ptr) Variable Function
-      1320(r014):     71(ptr) Variable Function
-      1323(r015):     71(ptr) Variable Function
-      1326(r016):     71(ptr) Variable Function
-      1329(r017):     71(ptr) Variable Function
-      1332(r018):      7(ptr) Variable Function
-      1335(r019):     71(ptr) Variable Function
-      1338(R020):     71(ptr) Variable Function
-      1341(r021):     71(ptr) Variable Function
-      1344(r022):     71(ptr) Variable Function
-      1357(r023):     71(ptr) Variable Function
-      1360(r025):     71(ptr) Variable Function
-      1363(r026):     71(ptr) Variable Function
-     1367(r026a):     71(ptr) Variable Function
-      1372(r027):     71(ptr) Variable Function
-      1375(r028):     71(ptr) Variable Function
-      1379(r029):     71(ptr) Variable Function
-      1382(r030):     71(ptr) Variable Function
-      1386(r031):     71(ptr) Variable Function
-      1390(r032):     71(ptr) Variable Function
-      1394(r033):     71(ptr) Variable Function
-      1397(r034):     71(ptr) Variable Function
-      1400(r035):     71(ptr) Variable Function
-      1403(r036):     71(ptr) Variable Function
-      1408(r037):     71(ptr) Variable Function
-      1411(r038):     71(ptr) Variable Function
-      1418(r039):     71(ptr) Variable Function
-      1421(r049):     71(ptr) Variable Function
-      1426(r041):     71(ptr) Variable Function
-      1429(r042):     71(ptr) Variable Function
-      1433(r043):     71(ptr) Variable Function
-      1436(r044):     71(ptr) Variable Function
-      1441(r046):     71(ptr) Variable Function
-            1267:          70 Load 73(inF0)
-            1269:        1268 FOrdNotEqual 1267 141
-            1270:   137(bool) All 1269
-                              Store 1266(r000) 1270
-            1272:          70 Load 73(inF0)
-            1273:          70 ExtInst 1(GLSL.std.450) 4(FAbs) 1272
-                              Store 1271(r001) 1273
-            1274:          70 Load 73(inF0)
-            1275:          70 ExtInst 1(GLSL.std.450) 17(Acos) 1274
+      1269(r000):    138(ptr) Variable Function
+      1274(r001):     71(ptr) Variable Function
+      1279(r003):    138(ptr) Variable Function
+      1283(r004):     71(ptr) Variable Function
+      1286(r005):     71(ptr) Variable Function
+      1289(r006):     71(ptr) Variable Function
+      1293(r007):     71(ptr) Variable Function
+      1303(r008):     71(ptr) Variable Function
+      1308(r009):     71(ptr) Variable Function
+      1311(r010):     71(ptr) Variable Function
+      1314(r011):     71(ptr) Variable Function
+      1317(r012):     71(ptr) Variable Function
+      1320(r013):     71(ptr) Variable Function
+      1323(r014):     71(ptr) Variable Function
+      1326(r015):     71(ptr) Variable Function
+      1329(r016):     71(ptr) Variable Function
+      1332(r017):     71(ptr) Variable Function
+      1335(r018):      7(ptr) Variable Function
+      1338(r019):     71(ptr) Variable Function
+      1341(R020):     71(ptr) Variable Function
+      1344(r021):     71(ptr) Variable Function
+      1347(r022):     71(ptr) Variable Function
+      1360(r023):     71(ptr) Variable Function
+      1363(r025):     71(ptr) Variable Function
+      1366(r026):     71(ptr) Variable Function
+     1370(r026a):     71(ptr) Variable Function
+      1375(r027):     71(ptr) Variable Function
+      1378(r028):     71(ptr) Variable Function
+      1382(r029):     71(ptr) Variable Function
+      1385(r030):     71(ptr) Variable Function
+      1389(r031):     71(ptr) Variable Function
+      1393(r032):     71(ptr) Variable Function
+      1397(r033):     71(ptr) Variable Function
+      1400(r034):     71(ptr) Variable Function
+      1403(r035):     71(ptr) Variable Function
+      1406(r036):     71(ptr) Variable Function
+      1411(r037):     71(ptr) Variable Function
+      1414(r038):     71(ptr) Variable Function
+      1421(r039):     71(ptr) Variable Function
+      1424(r049):     71(ptr) Variable Function
+      1429(r041):     71(ptr) Variable Function
+      1432(r042):     71(ptr) Variable Function
+      1436(r043):     71(ptr) Variable Function
+      1439(r044):     71(ptr) Variable Function
+      1444(r046):     71(ptr) Variable Function
+            1270:          70 Load 73(inF0)
+            1272:        1271 FOrdNotEqual 1270 141
+            1273:   137(bool) All 1272
+                              Store 1269(r000) 1273
+            1275:          70 Load 73(inF0)
+            1276:          70 ExtInst 1(GLSL.std.450) 4(FAbs) 1275
+                              Store 1274(r001) 1276
             1277:          70 Load 73(inF0)
-            1278:        1268 FOrdNotEqual 1277 141
-            1279:   137(bool) Any 1278
-                              Store 1276(r003) 1279
-            1281:          70 Load 73(inF0)
-            1282:          70 ExtInst 1(GLSL.std.450) 16(Asin) 1281
-                              Store 1280(r004) 1282
+            1278:          70 ExtInst 1(GLSL.std.450) 17(Acos) 1277
+            1280:          70 Load 73(inF0)
+            1281:        1271 FOrdNotEqual 1280 141
+            1282:   137(bool) Any 1281
+                              Store 1279(r003) 1282
             1284:          70 Load 73(inF0)
-            1285:          70 ExtInst 1(GLSL.std.450) 18(Atan) 1284
-                              Store 1283(r005) 1285
+            1285:          70 ExtInst 1(GLSL.std.450) 16(Asin) 1284
+                              Store 1283(r004) 1285
             1287:          70 Load 73(inF0)
-            1288:          70 Load 74(inF1)
-            1289:          70 ExtInst 1(GLSL.std.450) 25(Atan2) 1287 1288
-                              Store 1286(r006) 1289
-            1291:          70 Load 73(inF0)
-            1292:          70 ExtInst 1(GLSL.std.450) 9(Ceil) 1291
-                              Store 1290(r007) 1292
-            1293:          70 Load 73(inF0)
-            1295:        1268 FOrdLessThan 1293 1294
-            1296:   137(bool) Any 1295
-                              SelectionMerge 1298 None
-                              BranchConditional 1296 1297 1298
-            1297:               Label
+            1288:          70 ExtInst 1(GLSL.std.450) 18(Atan) 1287
+                              Store 1286(r005) 1288
+            1290:          70 Load 73(inF0)
+            1291:          70 Load 74(inF1)
+            1292:          70 ExtInst 1(GLSL.std.450) 25(Atan2) 1290 1291
+                              Store 1289(r006) 1292
+            1294:          70 Load 73(inF0)
+            1295:          70 ExtInst 1(GLSL.std.450) 9(Ceil) 1294
+                              Store 1293(r007) 1295
+            1296:          70 Load 73(inF0)
+            1298:        1271 FOrdLessThan 1296 1297
+            1299:   137(bool) Any 1298
+                              SelectionMerge 1301 None
+                              BranchConditional 1299 1300 1301
+            1300:               Label
                                 Kill
-            1298:             Label
-            1301:          70 Load 73(inF0)
-            1302:          70 Load 74(inF1)
-            1303:          70 Load 75(inF2)
-            1304:          70 ExtInst 1(GLSL.std.450) 43(FClamp) 1301 1302 1303
-                              Store 1300(r008) 1304
-            1306:          70 Load 73(inF0)
-            1307:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1306
-                              Store 1305(r009) 1307
+            1301:             Label
+            1304:          70 Load 73(inF0)
+            1305:          70 Load 74(inF1)
+            1306:          70 Load 75(inF2)
+            1307:          70 ExtInst 1(GLSL.std.450) 43(FClamp) 1304 1305 1306
+                              Store 1303(r008) 1307
             1309:          70 Load 73(inF0)
-            1310:          70 ExtInst 1(GLSL.std.450) 20(Cosh) 1309
-                              Store 1308(r010) 1310
+            1310:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1309
+                              Store 1308(r009) 1310
             1312:          70 Load 73(inF0)
-            1313:          70 DPdx 1312
-                              Store 1311(r011) 1313
+            1313:          70 ExtInst 1(GLSL.std.450) 20(Cosh) 1312
+                              Store 1311(r010) 1313
             1315:          70 Load 73(inF0)
-            1316:          70 DPdxCoarse 1315
-                              Store 1314(r012) 1316
+            1316:          70 DPdx 1315
+                              Store 1314(r011) 1316
             1318:          70 Load 73(inF0)
-            1319:          70 DPdxFine 1318
-                              Store 1317(r013) 1319
+            1319:          70 DPdxCoarse 1318
+                              Store 1317(r012) 1319
             1321:          70 Load 73(inF0)
-            1322:          70 DPdy 1321
-                              Store 1320(r014) 1322
+            1322:          70 DPdxFine 1321
+                              Store 1320(r013) 1322
             1324:          70 Load 73(inF0)
-            1325:          70 DPdyCoarse 1324
-                              Store 1323(r015) 1325
+            1325:          70 DPdy 1324
+                              Store 1323(r014) 1325
             1327:          70 Load 73(inF0)
-            1328:          70 DPdyFine 1327
-                              Store 1326(r016) 1328
+            1328:          70 DPdyCoarse 1327
+                              Store 1326(r015) 1328
             1330:          70 Load 73(inF0)
-            1331:          70 ExtInst 1(GLSL.std.450) 12(Degrees) 1330
-                              Store 1329(r017) 1331
+            1331:          70 DPdyFine 1330
+                              Store 1329(r016) 1331
             1333:          70 Load 73(inF0)
-            1334:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1333
-                              Store 1332(r018) 1334
+            1334:          70 ExtInst 1(GLSL.std.450) 12(Degrees) 1333
+                              Store 1332(r017) 1334
             1336:          70 Load 73(inF0)
-            1337:          70 ExtInst 1(GLSL.std.450) 27(Exp) 1336
-                              Store 1335(r019) 1337
+            1337:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1336
+                              Store 1335(r018) 1337
             1339:          70 Load 73(inF0)
-            1340:          70 ExtInst 1(GLSL.std.450) 29(Exp2) 1339
-                              Store 1338(R020) 1340
+            1340:          70 ExtInst 1(GLSL.std.450) 27(Exp) 1339
+                              Store 1338(r019) 1340
             1342:          70 Load 73(inF0)
-            1343:          70 ExtInst 1(GLSL.std.450) 8(Floor) 1342
-                              Store 1341(r021) 1343
+            1343:          70 ExtInst 1(GLSL.std.450) 29(Exp2) 1342
+                              Store 1341(R020) 1343
             1345:          70 Load 73(inF0)
-            1346:          70 Load 74(inF1)
-            1347:   38(fvec3) CompositeExtract 1345 0
-            1348:   38(fvec3) CompositeExtract 1346 0
-            1349:   38(fvec3) FMod 1347 1348
-            1350:   38(fvec3) CompositeExtract 1345 1
-            1351:   38(fvec3) CompositeExtract 1346 1
+            1346:          70 ExtInst 1(GLSL.std.450) 8(Floor) 1345
+                              Store 1344(r021) 1346
+            1348:          70 Load 73(inF0)
+            1349:          70 Load 74(inF1)
+            1350:   38(fvec3) CompositeExtract 1348 0
+            1351:   38(fvec3) CompositeExtract 1349 0
             1352:   38(fvec3) FMod 1350 1351
-            1353:   38(fvec3) CompositeExtract 1345 2
-            1354:   38(fvec3) CompositeExtract 1346 2
+            1353:   38(fvec3) CompositeExtract 1348 1
+            1354:   38(fvec3) CompositeExtract 1349 1
             1355:   38(fvec3) FMod 1353 1354
-            1356:          70 CompositeConstruct 1349 1352 1355
-                              Store 1344(r022) 1356
-            1358:          70 Load 73(inF0)
-            1359:          70 ExtInst 1(GLSL.std.450) 10(Fract) 1358
-                              Store 1357(r023) 1359
+            1356:   38(fvec3) CompositeExtract 1348 2
+            1357:   38(fvec3) CompositeExtract 1349 2
+            1358:   38(fvec3) FMod 1356 1357
+            1359:          70 CompositeConstruct 1352 1355 1358
+                              Store 1347(r022) 1359
             1361:          70 Load 73(inF0)
-            1362:          70 Fwidth 1361
-                              Store 1360(r025) 1362
+            1362:          70 ExtInst 1(GLSL.std.450) 10(Fract) 1361
+                              Store 1360(r023) 1362
             1364:          70 Load 73(inF0)
-            1365:          70 Load 74(inF1)
-            1366:          70 ExtInst 1(GLSL.std.450) 53(Ldexp) 1364 1365
-                              Store 1363(r026) 1366
-            1368:          70 Load 73(inF0)
-            1369:          70 Load 74(inF1)
-            1370:          70 Load 75(inF2)
-            1371:          70 ExtInst 1(GLSL.std.450) 46(FMix) 1368 1369 1370
-                              Store 1367(r026a) 1371
-            1373:          70 Load 73(inF0)
-            1374:          70 ExtInst 1(GLSL.std.450) 28(Log) 1373
-                              Store 1372(r027) 1374
+            1365:          70 Fwidth 1364
+                              Store 1363(r025) 1365
+            1367:          70 Load 73(inF0)
+            1368:          70 Load 74(inF1)
+            1369:          70 ExtInst 1(GLSL.std.450) 53(Ldexp) 1367 1368
+                              Store 1366(r026) 1369
+            1371:          70 Load 73(inF0)
+            1372:          70 Load 74(inF1)
+            1373:          70 Load 75(inF2)
+            1374:          70 ExtInst 1(GLSL.std.450) 46(FMix) 1371 1372 1373
+                              Store 1370(r026a) 1374
             1376:          70 Load 73(inF0)
-            1377:          70 ExtInst 1(GLSL.std.450) 30(Log2) 1376
-            1378:          70 MatrixTimesScalar 1377 272
-                              Store 1375(r028) 1378
-            1380:          70 Load 73(inF0)
-            1381:          70 ExtInst 1(GLSL.std.450) 30(Log2) 1380
-                              Store 1379(r029) 1381
+            1377:          70 ExtInst 1(GLSL.std.450) 28(Log) 1376
+                              Store 1375(r027) 1377
+            1379:          70 Load 73(inF0)
+            1380:          70 ExtInst 1(GLSL.std.450) 30(Log2) 1379
+            1381:          70 MatrixTimesScalar 1380 276
+                              Store 1378(r028) 1381
             1383:          70 Load 73(inF0)
-            1384:          70 Load 74(inF1)
-            1385:          70 ExtInst 1(GLSL.std.450) 40(FMax) 1383 1384
-                              Store 1382(r030) 1385
-            1387:          70 Load 73(inF0)
-            1388:          70 Load 74(inF1)
-            1389:          70 ExtInst 1(GLSL.std.450) 37(FMin) 1387 1388
-                              Store 1386(r031) 1389
-            1391:          70 Load 73(inF0)
-            1392:          70 Load 74(inF1)
-            1393:          70 ExtInst 1(GLSL.std.450) 26(Pow) 1391 1392
-                              Store 1390(r032) 1393
-            1395:          70 Load 73(inF0)
-            1396:          70 ExtInst 1(GLSL.std.450) 11(Radians) 1395
-                              Store 1394(r033) 1396
+            1384:          70 ExtInst 1(GLSL.std.450) 30(Log2) 1383
+                              Store 1382(r029) 1384
+            1386:          70 Load 73(inF0)
+            1387:          70 Load 74(inF1)
+            1388:          70 ExtInst 1(GLSL.std.450) 40(FMax) 1386 1387
+                              Store 1385(r030) 1388
+            1390:          70 Load 73(inF0)
+            1391:          70 Load 74(inF1)
+            1392:          70 ExtInst 1(GLSL.std.450) 37(FMin) 1390 1391
+                              Store 1389(r031) 1392
+            1394:          70 Load 73(inF0)
+            1395:          70 Load 74(inF1)
+            1396:          70 ExtInst 1(GLSL.std.450) 26(Pow) 1394 1395
+                              Store 1393(r032) 1396
             1398:          70 Load 73(inF0)
-            1399:          70 ExtInst 1(GLSL.std.450) 2(RoundEven) 1398
-                              Store 1397(r034) 1399
+            1399:          70 ExtInst 1(GLSL.std.450) 11(Radians) 1398
+                              Store 1397(r033) 1399
             1401:          70 Load 73(inF0)
-            1402:          70 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1401
-                              Store 1400(r035) 1402
+            1402:          70 ExtInst 1(GLSL.std.450) 2(RoundEven) 1401
+                              Store 1400(r034) 1402
             1404:          70 Load 73(inF0)
-            1405:   38(fvec3) CompositeConstruct 141 141 141
-            1406:   38(fvec3) CompositeConstruct 293 293 293
-            1407:          70 ExtInst 1(GLSL.std.450) 43(FClamp) 1404 1405 1406
-                              Store 1403(r036) 1407
-            1409:          70 Load 73(inF0)
-            1410:          70 ExtInst 1(GLSL.std.450) 6(FSign) 1409
-                              Store 1408(r037) 1410
+            1405:          70 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1404
+                              Store 1403(r035) 1405
+            1407:          70 Load 73(inF0)
+            1408:   38(fvec3) CompositeConstruct 141 141 141
+            1409:   38(fvec3) CompositeConstruct 297 297 297
+            1410:          70 ExtInst 1(GLSL.std.450) 43(FClamp) 1407 1408 1409
+                              Store 1406(r036) 1410
             1412:          70 Load 73(inF0)
-            1413:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1412
-                              Store 1411(r038) 1413
-            1414:          70 Load 73(inF0)
-            1415:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1414
-                              Store 74(inF1) 1415
-            1416:          70 Load 73(inF0)
-            1417:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1416
-                              Store 75(inF2) 1417
+            1413:          70 ExtInst 1(GLSL.std.450) 6(FSign) 1412
+                              Store 1411(r037) 1413
+            1415:          70 Load 73(inF0)
+            1416:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1415
+                              Store 1414(r038) 1416
+            1417:          70 Load 73(inF0)
+            1418:          70 ExtInst 1(GLSL.std.450) 13(Sin) 1417
+                              Store 74(inF1) 1418
             1419:          70 Load 73(inF0)
-            1420:          70 ExtInst 1(GLSL.std.450) 19(Sinh) 1419
-                              Store 1418(r039) 1420
+            1420:          70 ExtInst 1(GLSL.std.450) 14(Cos) 1419
+                              Store 75(inF2) 1420
             1422:          70 Load 73(inF0)
-            1423:          70 Load 74(inF1)
-            1424:          70 Load 75(inF2)
-            1425:          70 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1422 1423 1424
-                              Store 1421(r049) 1425
-            1427:          70 Load 73(inF0)
-            1428:          70 ExtInst 1(GLSL.std.450) 31(Sqrt) 1427
-                              Store 1426(r041) 1428
+            1423:          70 ExtInst 1(GLSL.std.450) 19(Sinh) 1422
+                              Store 1421(r039) 1423
+            1425:          70 Load 73(inF0)
+            1426:          70 Load 74(inF1)
+            1427:          70 Load 75(inF2)
+            1428:          70 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1425 1426 1427
+                              Store 1424(r049) 1428
             1430:          70 Load 73(inF0)
-            1431:          70 Load 74(inF1)
-            1432:          70 ExtInst 1(GLSL.std.450) 48(Step) 1430 1431
-                              Store 1429(r042) 1432
-            1434:          70 Load 73(inF0)
-            1435:          70 ExtInst 1(GLSL.std.450) 15(Tan) 1434
-                              Store 1433(r043) 1435
+            1431:          70 ExtInst 1(GLSL.std.450) 31(Sqrt) 1430
+                              Store 1429(r041) 1431
+            1433:          70 Load 73(inF0)
+            1434:          70 Load 74(inF1)
+            1435:          70 ExtInst 1(GLSL.std.450) 48(Step) 1433 1434
+                              Store 1432(r042) 1435
             1437:          70 Load 73(inF0)
-            1438:          70 ExtInst 1(GLSL.std.450) 21(Tanh) 1437
-                              Store 1436(r044) 1438
-            1439:          70 Load 73(inF0)
-            1440:          70 Transpose 1439
+            1438:          70 ExtInst 1(GLSL.std.450) 15(Tan) 1437
+                              Store 1436(r043) 1438
+            1440:          70 Load 73(inF0)
+            1441:          70 ExtInst 1(GLSL.std.450) 21(Tanh) 1440
+                              Store 1439(r044) 1441
             1442:          70 Load 73(inF0)
-            1443:          70 ExtInst 1(GLSL.std.450) 3(Trunc) 1442
-                              Store 1441(r046) 1443
-                              ReturnValue 1445
+            1443:          70 Transpose 1442
+            1445:          70 Load 73(inF0)
+            1446:          70 ExtInst 1(GLSL.std.450) 3(Trunc) 1445
+                              Store 1444(r046) 1446
+                              ReturnValue 1448
                               FunctionEnd
 84(PixelShaderFunction4x4(mf44;mf44;mf44;):          78 Function None 80
         81(inF0):     79(ptr) FunctionParameter
         82(inF1):     79(ptr) FunctionParameter
         83(inF2):     79(ptr) FunctionParameter
               85:             Label
-      1448(r000):    138(ptr) Variable Function
-      1453(r001):     79(ptr) Variable Function
-      1458(r003):    138(ptr) Variable Function
-      1462(r004):     79(ptr) Variable Function
-      1465(r005):     79(ptr) Variable Function
-      1468(r006):     79(ptr) Variable Function
-      1472(r007):     79(ptr) Variable Function
-      1482(r008):     79(ptr) Variable Function
-      1487(r009):     79(ptr) Variable Function
-      1490(r010):     79(ptr) Variable Function
-      1493(r011):     79(ptr) Variable Function
-      1496(r012):     79(ptr) Variable Function
-      1499(r013):     79(ptr) Variable Function
-      1502(r014):     79(ptr) Variable Function
-      1505(r015):     79(ptr) Variable Function
-      1508(r016):     79(ptr) Variable Function
-      1511(r017):     79(ptr) Variable Function
-      1514(r018):      7(ptr) Variable Function
-      1517(r019):     79(ptr) Variable Function
-      1520(R020):     79(ptr) Variable Function
-      1523(r021):     79(ptr) Variable Function
-      1526(r022):     79(ptr) Variable Function
-      1542(r023):     79(ptr) Variable Function
-      1545(r025):     79(ptr) Variable Function
-      1548(r026):     79(ptr) Variable Function
-     1552(r026a):     79(ptr) Variable Function
-      1557(r027):     79(ptr) Variable Function
-      1560(r028):     79(ptr) Variable Function
-      1564(r029):     79(ptr) Variable Function
-      1567(r030):     79(ptr) Variable Function
-      1571(r031):     79(ptr) Variable Function
-      1575(r032):     79(ptr) Variable Function
-      1579(r033):     79(ptr) Variable Function
-      1582(r034):     79(ptr) Variable Function
-      1585(r035):     79(ptr) Variable Function
-      1588(r036):     79(ptr) Variable Function
-      1593(r037):     79(ptr) Variable Function
-      1596(r038):     79(ptr) Variable Function
-      1603(r039):     79(ptr) Variable Function
-      1606(r049):     79(ptr) Variable Function
-      1611(r041):     79(ptr) Variable Function
-      1614(r042):     79(ptr) Variable Function
-      1618(r043):     79(ptr) Variable Function
-      1621(r044):     79(ptr) Variable Function
-      1626(r046):     79(ptr) Variable Function
-            1449:          78 Load 81(inF0)
-            1451:        1450 FOrdNotEqual 1449 141
-            1452:   137(bool) All 1451
-                              Store 1448(r000) 1452
-            1454:          78 Load 81(inF0)
-            1455:          78 ExtInst 1(GLSL.std.450) 4(FAbs) 1454
-                              Store 1453(r001) 1455
-            1456:          78 Load 81(inF0)
-            1457:          78 ExtInst 1(GLSL.std.450) 17(Acos) 1456
+      1451(r000):    138(ptr) Variable Function
+      1456(r001):     79(ptr) Variable Function
+      1461(r003):    138(ptr) Variable Function
+      1465(r004):     79(ptr) Variable Function
+      1468(r005):     79(ptr) Variable Function
+      1471(r006):     79(ptr) Variable Function
+      1475(r007):     79(ptr) Variable Function
+      1485(r008):     79(ptr) Variable Function
+      1490(r009):     79(ptr) Variable Function
+      1493(r010):     79(ptr) Variable Function
+      1496(r011):     79(ptr) Variable Function
+      1499(r012):     79(ptr) Variable Function
+      1502(r013):     79(ptr) Variable Function
+      1505(r014):     79(ptr) Variable Function
+      1508(r015):     79(ptr) Variable Function
+      1511(r016):     79(ptr) Variable Function
+      1514(r017):     79(ptr) Variable Function
+      1517(r018):      7(ptr) Variable Function
+      1520(r019):     79(ptr) Variable Function
+      1523(R020):     79(ptr) Variable Function
+      1526(r021):     79(ptr) Variable Function
+      1529(r022):     79(ptr) Variable Function
+      1545(r023):     79(ptr) Variable Function
+      1548(r025):     79(ptr) Variable Function
+      1551(r026):     79(ptr) Variable Function
+     1555(r026a):     79(ptr) Variable Function
+      1560(r027):     79(ptr) Variable Function
+      1563(r028):     79(ptr) Variable Function
+      1567(r029):     79(ptr) Variable Function
+      1570(r030):     79(ptr) Variable Function
+      1574(r031):     79(ptr) Variable Function
+      1578(r032):     79(ptr) Variable Function
+      1582(r033):     79(ptr) Variable Function
+      1585(r034):     79(ptr) Variable Function
+      1588(r035):     79(ptr) Variable Function
+      1591(r036):     79(ptr) Variable Function
+      1596(r037):     79(ptr) Variable Function
+      1599(r038):     79(ptr) Variable Function
+      1606(r039):     79(ptr) Variable Function
+      1609(r049):     79(ptr) Variable Function
+      1614(r041):     79(ptr) Variable Function
+      1617(r042):     79(ptr) Variable Function
+      1621(r043):     79(ptr) Variable Function
+      1624(r044):     79(ptr) Variable Function
+      1629(r046):     79(ptr) Variable Function
+            1452:          78 Load 81(inF0)
+            1454:        1453 FOrdNotEqual 1452 141
+            1455:   137(bool) All 1454
+                              Store 1451(r000) 1455
+            1457:          78 Load 81(inF0)
+            1458:          78 ExtInst 1(GLSL.std.450) 4(FAbs) 1457
+                              Store 1456(r001) 1458
             1459:          78 Load 81(inF0)
-            1460:        1450 FOrdNotEqual 1459 141
-            1461:   137(bool) Any 1460
-                              Store 1458(r003) 1461
-            1463:          78 Load 81(inF0)
-            1464:          78 ExtInst 1(GLSL.std.450) 16(Asin) 1463
-                              Store 1462(r004) 1464
+            1460:          78 ExtInst 1(GLSL.std.450) 17(Acos) 1459
+            1462:          78 Load 81(inF0)
+            1463:        1453 FOrdNotEqual 1462 141
+            1464:   137(bool) Any 1463
+                              Store 1461(r003) 1464
             1466:          78 Load 81(inF0)
-            1467:          78 ExtInst 1(GLSL.std.450) 18(Atan) 1466
-                              Store 1465(r005) 1467
+            1467:          78 ExtInst 1(GLSL.std.450) 16(Asin) 1466
+                              Store 1465(r004) 1467
             1469:          78 Load 81(inF0)
-            1470:          78 Load 82(inF1)
-            1471:          78 ExtInst 1(GLSL.std.450) 25(Atan2) 1469 1470
-                              Store 1468(r006) 1471
-            1473:          78 Load 81(inF0)
-            1474:          78 ExtInst 1(GLSL.std.450) 9(Ceil) 1473
-                              Store 1472(r007) 1474
-            1475:          78 Load 81(inF0)
-            1477:        1450 FOrdLessThan 1475 1476
-            1478:   137(bool) Any 1477
-                              SelectionMerge 1480 None
-                              BranchConditional 1478 1479 1480
-            1479:               Label
+            1470:          78 ExtInst 1(GLSL.std.450) 18(Atan) 1469
+                              Store 1468(r005) 1470
+            1472:          78 Load 81(inF0)
+            1473:          78 Load 82(inF1)
+            1474:          78 ExtInst 1(GLSL.std.450) 25(Atan2) 1472 1473
+                              Store 1471(r006) 1474
+            1476:          78 Load 81(inF0)
+            1477:          78 ExtInst 1(GLSL.std.450) 9(Ceil) 1476
+                              Store 1475(r007) 1477
+            1478:          78 Load 81(inF0)
+            1480:        1453 FOrdLessThan 1478 1479
+            1481:   137(bool) Any 1480
+                              SelectionMerge 1483 None
+                              BranchConditional 1481 1482 1483
+            1482:               Label
                                 Kill
-            1480:             Label
-            1483:          78 Load 81(inF0)
-            1484:          78 Load 82(inF1)
-            1485:          78 Load 83(inF2)
-            1486:          78 ExtInst 1(GLSL.std.450) 43(FClamp) 1483 1484 1485
-                              Store 1482(r008) 1486
-            1488:          78 Load 81(inF0)
-            1489:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1488
-                              Store 1487(r009) 1489
+            1483:             Label
+            1486:          78 Load 81(inF0)
+            1487:          78 Load 82(inF1)
+            1488:          78 Load 83(inF2)
+            1489:          78 ExtInst 1(GLSL.std.450) 43(FClamp) 1486 1487 1488
+                              Store 1485(r008) 1489
             1491:          78 Load 81(inF0)
-            1492:          78 ExtInst 1(GLSL.std.450) 20(Cosh) 1491
-                              Store 1490(r010) 1492
+            1492:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1491
+                              Store 1490(r009) 1492
             1494:          78 Load 81(inF0)
-            1495:          78 DPdx 1494
-                              Store 1493(r011) 1495
+            1495:          78 ExtInst 1(GLSL.std.450) 20(Cosh) 1494
+                              Store 1493(r010) 1495
             1497:          78 Load 81(inF0)
-            1498:          78 DPdxCoarse 1497
-                              Store 1496(r012) 1498
+            1498:          78 DPdx 1497
+                              Store 1496(r011) 1498
             1500:          78 Load 81(inF0)
-            1501:          78 DPdxFine 1500
-                              Store 1499(r013) 1501
+            1501:          78 DPdxCoarse 1500
+                              Store 1499(r012) 1501
             1503:          78 Load 81(inF0)
-            1504:          78 DPdy 1503
-                              Store 1502(r014) 1504
+            1504:          78 DPdxFine 1503
+                              Store 1502(r013) 1504
             1506:          78 Load 81(inF0)
-            1507:          78 DPdyCoarse 1506
-                              Store 1505(r015) 1507
+            1507:          78 DPdy 1506
+                              Store 1505(r014) 1507
             1509:          78 Load 81(inF0)
-            1510:          78 DPdyFine 1509
-                              Store 1508(r016) 1510
+            1510:          78 DPdyCoarse 1509
+                              Store 1508(r015) 1510
             1512:          78 Load 81(inF0)
-            1513:          78 ExtInst 1(GLSL.std.450) 12(Degrees) 1512
-                              Store 1511(r017) 1513
+            1513:          78 DPdyFine 1512
+                              Store 1511(r016) 1513
             1515:          78 Load 81(inF0)
-            1516:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1515
-                              Store 1514(r018) 1516
+            1516:          78 ExtInst 1(GLSL.std.450) 12(Degrees) 1515
+                              Store 1514(r017) 1516
             1518:          78 Load 81(inF0)
-            1519:          78 ExtInst 1(GLSL.std.450) 27(Exp) 1518
-                              Store 1517(r019) 1519
+            1519:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1518
+                              Store 1517(r018) 1519
             1521:          78 Load 81(inF0)
-            1522:          78 ExtInst 1(GLSL.std.450) 29(Exp2) 1521
-                              Store 1520(R020) 1522
+            1522:          78 ExtInst 1(GLSL.std.450) 27(Exp) 1521
+                              Store 1520(r019) 1522
             1524:          78 Load 81(inF0)
-            1525:          78 ExtInst 1(GLSL.std.450) 8(Floor) 1524
-                              Store 1523(r021) 1525
+            1525:          78 ExtInst 1(GLSL.std.450) 29(Exp2) 1524
+                              Store 1523(R020) 1525
             1527:          78 Load 81(inF0)
-            1528:          78 Load 82(inF1)
-            1529:   50(fvec4) CompositeExtract 1527 0
-            1530:   50(fvec4) CompositeExtract 1528 0
-            1531:   50(fvec4) FMod 1529 1530
-            1532:   50(fvec4) CompositeExtract 1527 1
-            1533:   50(fvec4) CompositeExtract 1528 1
+            1528:          78 ExtInst 1(GLSL.std.450) 8(Floor) 1527
+                              Store 1526(r021) 1528
+            1530:          78 Load 81(inF0)
+            1531:          78 Load 82(inF1)
+            1532:   50(fvec4) CompositeExtract 1530 0
+            1533:   50(fvec4) CompositeExtract 1531 0
             1534:   50(fvec4) FMod 1532 1533
-            1535:   50(fvec4) CompositeExtract 1527 2
-            1536:   50(fvec4) CompositeExtract 1528 2
+            1535:   50(fvec4) CompositeExtract 1530 1
+            1536:   50(fvec4) CompositeExtract 1531 1
             1537:   50(fvec4) FMod 1535 1536
-            1538:   50(fvec4) CompositeExtract 1527 3
-            1539:   50(fvec4) CompositeExtract 1528 3
+            1538:   50(fvec4) CompositeExtract 1530 2
+            1539:   50(fvec4) CompositeExtract 1531 2
             1540:   50(fvec4) FMod 1538 1539
-            1541:          78 CompositeConstruct 1531 1534 1537 1540
-                              Store 1526(r022) 1541
-            1543:          78 Load 81(inF0)
-            1544:          78 ExtInst 1(GLSL.std.450) 10(Fract) 1543
-                              Store 1542(r023) 1544
+            1541:   50(fvec4) CompositeExtract 1530 3
+            1542:   50(fvec4) CompositeExtract 1531 3
+            1543:   50(fvec4) FMod 1541 1542
+            1544:          78 CompositeConstruct 1534 1537 1540 1543
+                              Store 1529(r022) 1544
             1546:          78 Load 81(inF0)
-            1547:          78 Fwidth 1546
-                              Store 1545(r025) 1547
+            1547:          78 ExtInst 1(GLSL.std.450) 10(Fract) 1546
+                              Store 1545(r023) 1547
             1549:          78 Load 81(inF0)
-            1550:          78 Load 82(inF1)
-            1551:          78 ExtInst 1(GLSL.std.450) 53(Ldexp) 1549 1550
-                              Store 1548(r026) 1551
-            1553:          78 Load 81(inF0)
-            1554:          78 Load 82(inF1)
-            1555:          78 Load 83(inF2)
-            1556:          78 ExtInst 1(GLSL.std.450) 46(FMix) 1553 1554 1555
-                              Store 1552(r026a) 1556
-            1558:          78 Load 81(inF0)
-            1559:          78 ExtInst 1(GLSL.std.450) 28(Log) 1558
-                              Store 1557(r027) 1559
+            1550:          78 Fwidth 1549
+                              Store 1548(r025) 1550
+            1552:          78 Load 81(inF0)
+            1553:          78 Load 82(inF1)
+            1554:          78 ExtInst 1(GLSL.std.450) 53(Ldexp) 1552 1553
+                              Store 1551(r026) 1554
+            1556:          78 Load 81(inF0)
+            1557:          78 Load 82(inF1)
+            1558:          78 Load 83(inF2)
+            1559:          78 ExtInst 1(GLSL.std.450) 46(FMix) 1556 1557 1558
+                              Store 1555(r026a) 1559
             1561:          78 Load 81(inF0)
-            1562:          78 ExtInst 1(GLSL.std.450) 30(Log2) 1561
-            1563:          78 MatrixTimesScalar 1562 272
-                              Store 1560(r028) 1563
-            1565:          78 Load 81(inF0)
-            1566:          78 ExtInst 1(GLSL.std.450) 30(Log2) 1565
-                              Store 1564(r029) 1566
+            1562:          78 ExtInst 1(GLSL.std.450) 28(Log) 1561
+                              Store 1560(r027) 1562
+            1564:          78 Load 81(inF0)
+            1565:          78 ExtInst 1(GLSL.std.450) 30(Log2) 1564
+            1566:          78 MatrixTimesScalar 1565 276
+                              Store 1563(r028) 1566
             1568:          78 Load 81(inF0)
-            1569:          78 Load 82(inF1)
-            1570:          78 ExtInst 1(GLSL.std.450) 40(FMax) 1568 1569
-                              Store 1567(r030) 1570
-            1572:          78 Load 81(inF0)
-            1573:          78 Load 82(inF1)
-            1574:          78 ExtInst 1(GLSL.std.450) 37(FMin) 1572 1573
-                              Store 1571(r031) 1574
-            1576:          78 Load 81(inF0)
-            1577:          78 Load 82(inF1)
-            1578:          78 ExtInst 1(GLSL.std.450) 26(Pow) 1576 1577
-                              Store 1575(r032) 1578
-            1580:          78 Load 81(inF0)
-            1581:          78 ExtInst 1(GLSL.std.450) 11(Radians) 1580
-                              Store 1579(r033) 1581
+            1569:          78 ExtInst 1(GLSL.std.450) 30(Log2) 1568
+                              Store 1567(r029) 1569
+            1571:          78 Load 81(inF0)
+            1572:          78 Load 82(inF1)
+            1573:          78 ExtInst 1(GLSL.std.450) 40(FMax) 1571 1572
+                              Store 1570(r030) 1573
+            1575:          78 Load 81(inF0)
+            1576:          78 Load 82(inF1)
+            1577:          78 ExtInst 1(GLSL.std.450) 37(FMin) 1575 1576
+                              Store 1574(r031) 1577
+            1579:          78 Load 81(inF0)
+            1580:          78 Load 82(inF1)
+            1581:          78 ExtInst 1(GLSL.std.450) 26(Pow) 1579 1580
+                              Store 1578(r032) 1581
             1583:          78 Load 81(inF0)
-            1584:          78 ExtInst 1(GLSL.std.450) 2(RoundEven) 1583
-                              Store 1582(r034) 1584
+            1584:          78 ExtInst 1(GLSL.std.450) 11(Radians) 1583
+                              Store 1582(r033) 1584
             1586:          78 Load 81(inF0)
-            1587:          78 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1586
-                              Store 1585(r035) 1587
+            1587:          78 ExtInst 1(GLSL.std.450) 2(RoundEven) 1586
+                              Store 1585(r034) 1587
             1589:          78 Load 81(inF0)
-            1590:   50(fvec4) CompositeConstruct 141 141 141 141
-            1591:   50(fvec4) CompositeConstruct 293 293 293 293
-            1592:          78 ExtInst 1(GLSL.std.450) 43(FClamp) 1589 1590 1591
-                              Store 1588(r036) 1592
-            1594:          78 Load 81(inF0)
-            1595:          78 ExtInst 1(GLSL.std.450) 6(FSign) 1594
-                              Store 1593(r037) 1595
+            1590:          78 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1589
+                              Store 1588(r035) 1590
+            1592:          78 Load 81(inF0)
+            1593:   50(fvec4) CompositeConstruct 141 141 141 141
+            1594:   50(fvec4) CompositeConstruct 297 297 297 297
+            1595:          78 ExtInst 1(GLSL.std.450) 43(FClamp) 1592 1593 1594
+                              Store 1591(r036) 1595
             1597:          78 Load 81(inF0)
-            1598:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1597
-                              Store 1596(r038) 1598
-            1599:          78 Load 81(inF0)
-            1600:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1599
-                              Store 82(inF1) 1600
-            1601:          78 Load 81(inF0)
-            1602:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1601
-                              Store 83(inF2) 1602
+            1598:          78 ExtInst 1(GLSL.std.450) 6(FSign) 1597
+                              Store 1596(r037) 1598
+            1600:          78 Load 81(inF0)
+            1601:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1600
+                              Store 1599(r038) 1601
+            1602:          78 Load 81(inF0)
+            1603:          78 ExtInst 1(GLSL.std.450) 13(Sin) 1602
+                              Store 82(inF1) 1603
             1604:          78 Load 81(inF0)
-            1605:          78 ExtInst 1(GLSL.std.450) 19(Sinh) 1604
-                              Store 1603(r039) 1605
+            1605:          78 ExtInst 1(GLSL.std.450) 14(Cos) 1604
+                              Store 83(inF2) 1605
             1607:          78 Load 81(inF0)
-            1608:          78 Load 82(inF1)
-            1609:          78 Load 83(inF2)
-            1610:          78 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1607 1608 1609
-                              Store 1606(r049) 1610
-            1612:          78 Load 81(inF0)
-            1613:          78 ExtInst 1(GLSL.std.450) 31(Sqrt) 1612
-                              Store 1611(r041) 1613
+            1608:          78 ExtInst 1(GLSL.std.450) 19(Sinh) 1607
+                              Store 1606(r039) 1608
+            1610:          78 Load 81(inF0)
+            1611:          78 Load 82(inF1)
+            1612:          78 Load 83(inF2)
+            1613:          78 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1610 1611 1612
+                              Store 1609(r049) 1613
             1615:          78 Load 81(inF0)
-            1616:          78 Load 82(inF1)
-            1617:          78 ExtInst 1(GLSL.std.450) 48(Step) 1615 1616
-                              Store 1614(r042) 1617
-            1619:          78 Load 81(inF0)
-            1620:          78 ExtInst 1(GLSL.std.450) 15(Tan) 1619
-                              Store 1618(r043) 1620
+            1616:          78 ExtInst 1(GLSL.std.450) 31(Sqrt) 1615
+                              Store 1614(r041) 1616
+            1618:          78 Load 81(inF0)
+            1619:          78 Load 82(inF1)
+            1620:          78 ExtInst 1(GLSL.std.450) 48(Step) 1618 1619
+                              Store 1617(r042) 1620
             1622:          78 Load 81(inF0)
-            1623:          78 ExtInst 1(GLSL.std.450) 21(Tanh) 1622
-                              Store 1621(r044) 1623
-            1624:          78 Load 81(inF0)
-            1625:          78 Transpose 1624
+            1623:          78 ExtInst 1(GLSL.std.450) 15(Tan) 1622
+                              Store 1621(r043) 1623
+            1625:          78 Load 81(inF0)
+            1626:          78 ExtInst 1(GLSL.std.450) 21(Tanh) 1625
+                              Store 1624(r044) 1626
             1627:          78 Load 81(inF0)
-            1628:          78 ExtInst 1(GLSL.std.450) 3(Trunc) 1627
-                              Store 1626(r046) 1628
-                              ReturnValue 1630
+            1628:          78 Transpose 1627
+            1630:          78 Load 81(inF0)
+            1631:          78 ExtInst 1(GLSL.std.450) 3(Trunc) 1630
+                              Store 1629(r046) 1631
+                              ReturnValue 1633
                               FunctionEnd
 93(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 86
         87(inF0):      7(ptr) FunctionParameter
@@ -8212,51 +8231,51 @@
        91(inFM0):     63(ptr) FunctionParameter
        92(inFM1):     63(ptr) FunctionParameter
               94:             Label
-        1633(r0):      7(ptr) Variable Function
-        1637(r1):     27(ptr) Variable Function
-        1641(r2):     27(ptr) Variable Function
-        1645(r3):      7(ptr) Variable Function
-        1649(r4):     27(ptr) Variable Function
-        1653(r5):     27(ptr) Variable Function
-        1657(r6):     63(ptr) Variable Function
-        1661(r7):     63(ptr) Variable Function
-        1665(r8):     63(ptr) Variable Function
-            1634:    6(float) Load 88(inF1)
-            1635:    6(float) Load 87(inF0)
-            1636:    6(float) FMul 1634 1635
-                              Store 1633(r0) 1636
+        1636(r0):      7(ptr) Variable Function
+        1640(r1):     27(ptr) Variable Function
+        1644(r2):     27(ptr) Variable Function
+        1648(r3):      7(ptr) Variable Function
+        1652(r4):     27(ptr) Variable Function
+        1656(r5):     27(ptr) Variable Function
+        1660(r6):     63(ptr) Variable Function
+        1664(r7):     63(ptr) Variable Function
+        1668(r8):     63(ptr) Variable Function
+            1637:    6(float) Load 88(inF1)
             1638:    6(float) Load 87(inF0)
-            1639:   26(fvec2) Load 89(inFV0)
-            1640:   26(fvec2) VectorTimesScalar 1639 1638
-                              Store 1637(r1) 1640
+            1639:    6(float) FMul 1637 1638
+                              Store 1636(r0) 1639
+            1641:    6(float) Load 87(inF0)
             1642:   26(fvec2) Load 89(inFV0)
-            1643:    6(float) Load 87(inF0)
-            1644:   26(fvec2) VectorTimesScalar 1642 1643
-                              Store 1641(r2) 1644
-            1646:   26(fvec2) Load 89(inFV0)
-            1647:   26(fvec2) Load 90(inFV1)
-            1648:    6(float) Dot 1646 1647
-                              Store 1645(r3) 1648
-            1650:   26(fvec2) Load 89(inFV0)
-            1651:          62 Load 91(inFM0)
-            1652:   26(fvec2) VectorTimesMatrix 1650 1651
-                              Store 1649(r4) 1652
+            1643:   26(fvec2) VectorTimesScalar 1642 1641
+                              Store 1640(r1) 1643
+            1645:   26(fvec2) Load 89(inFV0)
+            1646:    6(float) Load 87(inF0)
+            1647:   26(fvec2) VectorTimesScalar 1645 1646
+                              Store 1644(r2) 1647
+            1649:   26(fvec2) Load 89(inFV0)
+            1650:   26(fvec2) Load 90(inFV1)
+            1651:    6(float) Dot 1649 1650
+                              Store 1648(r3) 1651
+            1653:   26(fvec2) Load 89(inFV0)
             1654:          62 Load 91(inFM0)
-            1655:   26(fvec2) Load 89(inFV0)
-            1656:   26(fvec2) MatrixTimesVector 1654 1655
-                              Store 1653(r5) 1656
-            1658:    6(float) Load 87(inF0)
-            1659:          62 Load 91(inFM0)
-            1660:          62 MatrixTimesScalar 1659 1658
-                              Store 1657(r6) 1660
+            1655:   26(fvec2) VectorTimesMatrix 1653 1654
+                              Store 1652(r4) 1655
+            1657:          62 Load 91(inFM0)
+            1658:   26(fvec2) Load 89(inFV0)
+            1659:   26(fvec2) MatrixTimesVector 1657 1658
+                              Store 1656(r5) 1659
+            1661:    6(float) Load 87(inF0)
             1662:          62 Load 91(inFM0)
-            1663:    6(float) Load 87(inF0)
-            1664:          62 MatrixTimesScalar 1662 1663
-                              Store 1661(r7) 1664
-            1666:          62 Load 92(inFM1)
-            1667:          62 Load 91(inFM0)
-            1668:          62 MatrixTimesMatrix 1666 1667
-                              Store 1665(r8) 1668
+            1663:          62 MatrixTimesScalar 1662 1661
+                              Store 1660(r6) 1663
+            1665:          62 Load 91(inFM0)
+            1666:    6(float) Load 87(inF0)
+            1667:          62 MatrixTimesScalar 1665 1666
+                              Store 1664(r7) 1667
+            1669:          62 Load 92(inFM1)
+            1670:          62 Load 91(inFM0)
+            1671:          62 MatrixTimesMatrix 1669 1670
+                              Store 1668(r8) 1671
                               Return
                               FunctionEnd
 102(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 95
@@ -8267,51 +8286,51 @@
       100(inFM0):     71(ptr) FunctionParameter
       101(inFM1):     71(ptr) FunctionParameter
              103:             Label
-        1669(r0):      7(ptr) Variable Function
-        1673(r1):     39(ptr) Variable Function
-        1677(r2):     39(ptr) Variable Function
-        1681(r3):      7(ptr) Variable Function
-        1685(r4):     39(ptr) Variable Function
-        1689(r5):     39(ptr) Variable Function
-        1693(r6):     71(ptr) Variable Function
-        1697(r7):     71(ptr) Variable Function
-        1701(r8):     71(ptr) Variable Function
-            1670:    6(float) Load 97(inF1)
-            1671:    6(float) Load 96(inF0)
-            1672:    6(float) FMul 1670 1671
-                              Store 1669(r0) 1672
+        1672(r0):      7(ptr) Variable Function
+        1676(r1):     39(ptr) Variable Function
+        1680(r2):     39(ptr) Variable Function
+        1684(r3):      7(ptr) Variable Function
+        1688(r4):     39(ptr) Variable Function
+        1692(r5):     39(ptr) Variable Function
+        1696(r6):     71(ptr) Variable Function
+        1700(r7):     71(ptr) Variable Function
+        1704(r8):     71(ptr) Variable Function
+            1673:    6(float) Load 97(inF1)
             1674:    6(float) Load 96(inF0)
-            1675:   38(fvec3) Load 98(inFV0)
-            1676:   38(fvec3) VectorTimesScalar 1675 1674
-                              Store 1673(r1) 1676
+            1675:    6(float) FMul 1673 1674
+                              Store 1672(r0) 1675
+            1677:    6(float) Load 96(inF0)
             1678:   38(fvec3) Load 98(inFV0)
-            1679:    6(float) Load 96(inF0)
-            1680:   38(fvec3) VectorTimesScalar 1678 1679
-                              Store 1677(r2) 1680
-            1682:   38(fvec3) Load 98(inFV0)
-            1683:   38(fvec3) Load 99(inFV1)
-            1684:    6(float) Dot 1682 1683
-                              Store 1681(r3) 1684
-            1686:   38(fvec3) Load 98(inFV0)
-            1687:          70 Load 100(inFM0)
-            1688:   38(fvec3) VectorTimesMatrix 1686 1687
-                              Store 1685(r4) 1688
+            1679:   38(fvec3) VectorTimesScalar 1678 1677
+                              Store 1676(r1) 1679
+            1681:   38(fvec3) Load 98(inFV0)
+            1682:    6(float) Load 96(inF0)
+            1683:   38(fvec3) VectorTimesScalar 1681 1682
+                              Store 1680(r2) 1683
+            1685:   38(fvec3) Load 98(inFV0)
+            1686:   38(fvec3) Load 99(inFV1)
+            1687:    6(float) Dot 1685 1686
+                              Store 1684(r3) 1687
+            1689:   38(fvec3) Load 98(inFV0)
             1690:          70 Load 100(inFM0)
-            1691:   38(fvec3) Load 98(inFV0)
-            1692:   38(fvec3) MatrixTimesVector 1690 1691
-                              Store 1689(r5) 1692
-            1694:    6(float) Load 96(inF0)
-            1695:          70 Load 100(inFM0)
-            1696:          70 MatrixTimesScalar 1695 1694
-                              Store 1693(r6) 1696
+            1691:   38(fvec3) VectorTimesMatrix 1689 1690
+                              Store 1688(r4) 1691
+            1693:          70 Load 100(inFM0)
+            1694:   38(fvec3) Load 98(inFV0)
+            1695:   38(fvec3) MatrixTimesVector 1693 1694
+                              Store 1692(r5) 1695
+            1697:    6(float) Load 96(inF0)
             1698:          70 Load 100(inFM0)
-            1699:    6(float) Load 96(inF0)
-            1700:          70 MatrixTimesScalar 1698 1699
-                              Store 1697(r7) 1700
-            1702:          70 Load 101(inFM1)
-            1703:          70 Load 100(inFM0)
-            1704:          70 MatrixTimesMatrix 1702 1703
-                              Store 1701(r8) 1704
+            1699:          70 MatrixTimesScalar 1698 1697
+                              Store 1696(r6) 1699
+            1701:          70 Load 100(inFM0)
+            1702:    6(float) Load 96(inF0)
+            1703:          70 MatrixTimesScalar 1701 1702
+                              Store 1700(r7) 1703
+            1705:          70 Load 101(inFM1)
+            1706:          70 Load 100(inFM0)
+            1707:          70 MatrixTimesMatrix 1705 1706
+                              Store 1704(r8) 1707
                               Return
                               FunctionEnd
 111(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 104
@@ -8322,51 +8341,51 @@
       109(inFM0):     79(ptr) FunctionParameter
       110(inFM1):     79(ptr) FunctionParameter
              112:             Label
-        1705(r0):      7(ptr) Variable Function
-        1709(r1):     51(ptr) Variable Function
-        1713(r2):     51(ptr) Variable Function
-        1717(r3):      7(ptr) Variable Function
-        1721(r4):     51(ptr) Variable Function
-        1725(r5):     51(ptr) Variable Function
-        1729(r6):     79(ptr) Variable Function
-        1733(r7):     79(ptr) Variable Function
-        1737(r8):     79(ptr) Variable Function
-            1706:    6(float) Load 106(inF1)
-            1707:    6(float) Load 105(inF0)
-            1708:    6(float) FMul 1706 1707
-                              Store 1705(r0) 1708
+        1708(r0):      7(ptr) Variable Function
+        1712(r1):     51(ptr) Variable Function
+        1716(r2):     51(ptr) Variable Function
+        1720(r3):      7(ptr) Variable Function
+        1724(r4):     51(ptr) Variable Function
+        1728(r5):     51(ptr) Variable Function
+        1732(r6):     79(ptr) Variable Function
+        1736(r7):     79(ptr) Variable Function
+        1740(r8):     79(ptr) Variable Function
+            1709:    6(float) Load 106(inF1)
             1710:    6(float) Load 105(inF0)
-            1711:   50(fvec4) Load 107(inFV0)
-            1712:   50(fvec4) VectorTimesScalar 1711 1710
-                              Store 1709(r1) 1712
+            1711:    6(float) FMul 1709 1710
+                              Store 1708(r0) 1711
+            1713:    6(float) Load 105(inF0)
             1714:   50(fvec4) Load 107(inFV0)
-            1715:    6(float) Load 105(inF0)
-            1716:   50(fvec4) VectorTimesScalar 1714 1715
-                              Store 1713(r2) 1716
-            1718:   50(fvec4) Load 107(inFV0)
-            1719:   50(fvec4) Load 108(inFV1)
-            1720:    6(float) Dot 1718 1719
-                              Store 1717(r3) 1720
-            1722:   50(fvec4) Load 107(inFV0)
-            1723:          78 Load 109(inFM0)
-            1724:   50(fvec4) VectorTimesMatrix 1722 1723
-                              Store 1721(r4) 1724
+            1715:   50(fvec4) VectorTimesScalar 1714 1713
+                              Store 1712(r1) 1715
+            1717:   50(fvec4) Load 107(inFV0)
+            1718:    6(float) Load 105(inF0)
+            1719:   50(fvec4) VectorTimesScalar 1717 1718
+                              Store 1716(r2) 1719
+            1721:   50(fvec4) Load 107(inFV0)
+            1722:   50(fvec4) Load 108(inFV1)
+            1723:    6(float) Dot 1721 1722
+                              Store 1720(r3) 1723
+            1725:   50(fvec4) Load 107(inFV0)
             1726:          78 Load 109(inFM0)
-            1727:   50(fvec4) Load 107(inFV0)
-            1728:   50(fvec4) MatrixTimesVector 1726 1727
-                              Store 1725(r5) 1728
-            1730:    6(float) Load 105(inF0)
-            1731:          78 Load 109(inFM0)
-            1732:          78 MatrixTimesScalar 1731 1730
-                              Store 1729(r6) 1732
+            1727:   50(fvec4) VectorTimesMatrix 1725 1726
+                              Store 1724(r4) 1727
+            1729:          78 Load 109(inFM0)
+            1730:   50(fvec4) Load 107(inFV0)
+            1731:   50(fvec4) MatrixTimesVector 1729 1730
+                              Store 1728(r5) 1731
+            1733:    6(float) Load 105(inF0)
             1734:          78 Load 109(inFM0)
-            1735:    6(float) Load 105(inF0)
-            1736:          78 MatrixTimesScalar 1734 1735
-                              Store 1733(r7) 1736
-            1738:          78 Load 110(inFM1)
-            1739:          78 Load 109(inFM0)
-            1740:          78 MatrixTimesMatrix 1738 1739
-                              Store 1737(r8) 1740
+            1735:          78 MatrixTimesScalar 1734 1733
+                              Store 1732(r6) 1735
+            1737:          78 Load 109(inFM0)
+            1738:    6(float) Load 105(inF0)
+            1739:          78 MatrixTimesScalar 1737 1738
+                              Store 1736(r7) 1739
+            1741:          78 Load 110(inFM1)
+            1742:          78 Load 109(inFM0)
+            1743:          78 MatrixTimesMatrix 1741 1742
+                              Store 1740(r8) 1743
                               Return
                               FunctionEnd
 131(TestGenMulNxM(f1;f1;vf2;vf3;mf23;mf32;mf33;mf34;mf24;):           2 Function None 121
@@ -8380,98 +8399,98 @@
     129(inFM3x4):    118(ptr) FunctionParameter
     130(inFM2x4):    120(ptr) FunctionParameter
              132:             Label
-       1741(r00):      7(ptr) Variable Function
-       1745(r01):     27(ptr) Variable Function
-       1749(r02):     39(ptr) Variable Function
-       1753(r03):     27(ptr) Variable Function
-       1757(r04):     39(ptr) Variable Function
-       1761(r05):      7(ptr) Variable Function
-       1765(r06):      7(ptr) Variable Function
-       1769(r07):     39(ptr) Variable Function
-       1773(r08):     27(ptr) Variable Function
-       1777(r09):     27(ptr) Variable Function
-       1781(r10):     39(ptr) Variable Function
-       1785(r11):    114(ptr) Variable Function
-       1789(r12):    116(ptr) Variable Function
-       1793(r13):     63(ptr) Variable Function
-       1797(r14):    114(ptr) Variable Function
-       1801(r15):    120(ptr) Variable Function
-       1805(r16):    118(ptr) Variable Function
-            1742:    6(float) Load 123(inF1)
-            1743:    6(float) Load 122(inF0)
-            1744:    6(float) FMul 1742 1743
-                              Store 1741(r00) 1744
+       1744(r00):      7(ptr) Variable Function
+       1748(r01):     27(ptr) Variable Function
+       1752(r02):     39(ptr) Variable Function
+       1756(r03):     27(ptr) Variable Function
+       1760(r04):     39(ptr) Variable Function
+       1764(r05):      7(ptr) Variable Function
+       1768(r06):      7(ptr) Variable Function
+       1772(r07):     39(ptr) Variable Function
+       1776(r08):     27(ptr) Variable Function
+       1780(r09):     27(ptr) Variable Function
+       1784(r10):     39(ptr) Variable Function
+       1788(r11):    114(ptr) Variable Function
+       1792(r12):    116(ptr) Variable Function
+       1796(r13):     63(ptr) Variable Function
+       1800(r14):    114(ptr) Variable Function
+       1804(r15):    120(ptr) Variable Function
+       1808(r16):    118(ptr) Variable Function
+            1745:    6(float) Load 123(inF1)
             1746:    6(float) Load 122(inF0)
-            1747:   26(fvec2) Load 124(inFV2)
-            1748:   26(fvec2) VectorTimesScalar 1747 1746
-                              Store 1745(r01) 1748
-            1750:    6(float) Load 122(inF0)
-            1751:   38(fvec3) Load 125(inFV3)
-            1752:   38(fvec3) VectorTimesScalar 1751 1750
-                              Store 1749(r02) 1752
-            1754:   26(fvec2) Load 124(inFV2)
-            1755:    6(float) Load 122(inF0)
-            1756:   26(fvec2) VectorTimesScalar 1754 1755
-                              Store 1753(r03) 1756
-            1758:   38(fvec3) Load 125(inFV3)
-            1759:    6(float) Load 122(inF0)
-            1760:   38(fvec3) VectorTimesScalar 1758 1759
-                              Store 1757(r04) 1760
-            1762:   26(fvec2) Load 124(inFV2)
-            1763:   26(fvec2) Load 124(inFV2)
-            1764:    6(float) Dot 1762 1763
-                              Store 1761(r05) 1764
-            1766:   38(fvec3) Load 125(inFV3)
-            1767:   38(fvec3) Load 125(inFV3)
-            1768:    6(float) Dot 1766 1767
-                              Store 1765(r06) 1768
-            1770:         113 Load 126(inFM2x3)
-            1771:   26(fvec2) Load 124(inFV2)
-            1772:   38(fvec3) MatrixTimesVector 1770 1771
-                              Store 1769(r07) 1772
-            1774:         115 Load 127(inFM3x2)
-            1775:   38(fvec3) Load 125(inFV3)
-            1776:   26(fvec2) MatrixTimesVector 1774 1775
-                              Store 1773(r08) 1776
+            1747:    6(float) FMul 1745 1746
+                              Store 1744(r00) 1747
+            1749:    6(float) Load 122(inF0)
+            1750:   26(fvec2) Load 124(inFV2)
+            1751:   26(fvec2) VectorTimesScalar 1750 1749
+                              Store 1748(r01) 1751
+            1753:    6(float) Load 122(inF0)
+            1754:   38(fvec3) Load 125(inFV3)
+            1755:   38(fvec3) VectorTimesScalar 1754 1753
+                              Store 1752(r02) 1755
+            1757:   26(fvec2) Load 124(inFV2)
+            1758:    6(float) Load 122(inF0)
+            1759:   26(fvec2) VectorTimesScalar 1757 1758
+                              Store 1756(r03) 1759
+            1761:   38(fvec3) Load 125(inFV3)
+            1762:    6(float) Load 122(inF0)
+            1763:   38(fvec3) VectorTimesScalar 1761 1762
+                              Store 1760(r04) 1763
+            1765:   26(fvec2) Load 124(inFV2)
+            1766:   26(fvec2) Load 124(inFV2)
+            1767:    6(float) Dot 1765 1766
+                              Store 1764(r05) 1767
+            1769:   38(fvec3) Load 125(inFV3)
+            1770:   38(fvec3) Load 125(inFV3)
+            1771:    6(float) Dot 1769 1770
+                              Store 1768(r06) 1771
+            1773:         113 Load 126(inFM2x3)
+            1774:   26(fvec2) Load 124(inFV2)
+            1775:   38(fvec3) MatrixTimesVector 1773 1774
+                              Store 1772(r07) 1775
+            1777:         115 Load 127(inFM3x2)
             1778:   38(fvec3) Load 125(inFV3)
-            1779:         113 Load 126(inFM2x3)
-            1780:   26(fvec2) VectorTimesMatrix 1778 1779
-                              Store 1777(r09) 1780
-            1782:   26(fvec2) Load 124(inFV2)
-            1783:         115 Load 127(inFM3x2)
-            1784:   38(fvec3) VectorTimesMatrix 1782 1783
-                              Store 1781(r10) 1784
-            1786:    6(float) Load 122(inF0)
-            1787:         113 Load 126(inFM2x3)
-            1788:         113 MatrixTimesScalar 1787 1786
-                              Store 1785(r11) 1788
-            1790:    6(float) Load 122(inF0)
-            1791:         115 Load 127(inFM3x2)
-            1792:         115 MatrixTimesScalar 1791 1790
-                              Store 1789(r12) 1792
+            1779:   26(fvec2) MatrixTimesVector 1777 1778
+                              Store 1776(r08) 1779
+            1781:   38(fvec3) Load 125(inFV3)
+            1782:         113 Load 126(inFM2x3)
+            1783:   26(fvec2) VectorTimesMatrix 1781 1782
+                              Store 1780(r09) 1783
+            1785:   26(fvec2) Load 124(inFV2)
+            1786:         115 Load 127(inFM3x2)
+            1787:   38(fvec3) VectorTimesMatrix 1785 1786
+                              Store 1784(r10) 1787
+            1789:    6(float) Load 122(inF0)
+            1790:         113 Load 126(inFM2x3)
+            1791:         113 MatrixTimesScalar 1790 1789
+                              Store 1788(r11) 1791
+            1793:    6(float) Load 122(inF0)
             1794:         115 Load 127(inFM3x2)
-            1795:         113 Load 126(inFM2x3)
-            1796:          62 MatrixTimesMatrix 1794 1795
-                              Store 1793(r13) 1796
-            1798:          70 Load 128(inFM3x3)
-            1799:         113 Load 126(inFM2x3)
-            1800:         113 MatrixTimesMatrix 1798 1799
-                              Store 1797(r14) 1800
-            1802:         117 Load 129(inFM3x4)
-            1803:         113 Load 126(inFM2x3)
-            1804:         119 MatrixTimesMatrix 1802 1803
-                              Store 1801(r15) 1804
-            1806:         119 Load 130(inFM2x4)
-            1807:         115 Load 127(inFM3x2)
-            1808:         117 MatrixTimesMatrix 1806 1807
-                              Store 1805(r16) 1808
+            1795:         115 MatrixTimesScalar 1794 1793
+                              Store 1792(r12) 1795
+            1797:         115 Load 127(inFM3x2)
+            1798:         113 Load 126(inFM2x3)
+            1799:          62 MatrixTimesMatrix 1797 1798
+                              Store 1796(r13) 1799
+            1801:          70 Load 128(inFM3x3)
+            1802:         113 Load 126(inFM2x3)
+            1803:         113 MatrixTimesMatrix 1801 1802
+                              Store 1800(r14) 1803
+            1805:         117 Load 129(inFM3x4)
+            1806:         113 Load 126(inFM2x3)
+            1807:         119 MatrixTimesMatrix 1805 1806
+                              Store 1804(r15) 1807
+            1809:         119 Load 130(inFM2x4)
+            1810:         115 Load 127(inFM3x2)
+            1811:         117 MatrixTimesMatrix 1809 1810
+                              Store 1808(r16) 1811
                               Return
                               FunctionEnd
      135(@main():133(PS_OUTPUT) Function None 134
              136:             Label
- 1810(ps_output):   1809(ptr) Variable Function
-            1812:     51(ptr) AccessChain 1810(ps_output) 187
-                              Store 1812 1811
-            1813:133(PS_OUTPUT) Load 1810(ps_output)
-                              ReturnValue 1813
+ 1813(ps_output):   1812(ptr) Variable Function
+            1815:     51(ptr) AccessChain 1813(ps_output) 187
+                              Store 1815 1814
+            1816:133(PS_OUTPUT) Load 1813(ps_output)
+                              ReturnValue 1816
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.lit.frag.out b/Test/baseResults/hlsl.intrinsics.lit.frag.out
index 8b1454b..9a8cb29 100644
--- a/Test/baseResults/hlsl.intrinsics.lit.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.lit.frag.out
@@ -118,7 +118,7 @@
 0:?     'm' (layout( location=2) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.negative.comp.out b/Test/baseResults/hlsl.intrinsics.negative.comp.out
index 97d6719..920038f 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.comp.out
@@ -180,7 +180,7 @@
 0:?     'inI0' (layout( location=3) in 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.negative.vert.out b/Test/baseResults/hlsl.intrinsics.negative.vert.out
index c2711c6..3b1bac8 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.vert.out
@@ -308,7 +308,7 @@
 0:?     'inI0' (layout( location=3) in 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
index 84ea6f4..2171698 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
@@ -104,7 +104,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.promote.frag.out b/Test/baseResults/hlsl.intrinsics.promote.frag.out
index 988432e..41b1c68 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.frag.out
@@ -888,7 +888,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 322
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
index 9f8ecf2..143fa72 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
@@ -204,7 +204,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out
index 460785e..28e8e41 100644
--- a/Test/baseResults/hlsl.intrinsics.vert.out
+++ b/Test/baseResults/hlsl.intrinsics.vert.out
@@ -2780,7 +2780,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1225
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.isfinite.frag.out b/Test/baseResults/hlsl.isfinite.frag.out
index 7b8287f..a68bd1b 100644
--- a/Test/baseResults/hlsl.isfinite.frag.out
+++ b/Test/baseResults/hlsl.isfinite.frag.out
@@ -172,7 +172,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 85
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.layout.frag.out b/Test/baseResults/hlsl.layout.frag.out
index 6a3eb04..1e4f171 100644
--- a/Test/baseResults/hlsl.layout.frag.out
+++ b/Test/baseResults/hlsl.layout.frag.out
@@ -88,7 +88,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.layoutOverride.vert.out b/Test/baseResults/hlsl.layoutOverride.vert.out
index 31593aa..cc09653 100644
--- a/Test/baseResults/hlsl.layoutOverride.vert.out
+++ b/Test/baseResults/hlsl.layoutOverride.vert.out
@@ -52,7 +52,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
index 8d7f70f..9597762 100644
--- a/Test/baseResults/hlsl.load.2dms.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 130
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.array.dx10.frag.out b/Test/baseResults/hlsl.load.array.dx10.frag.out
index e5c0f6e..f26d7df 100644
--- a/Test/baseResults/hlsl.load.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.array.dx10.frag.out
@@ -388,7 +388,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 159
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.basic.dx10.frag.out b/Test/baseResults/hlsl.load.basic.dx10.frag.out
index b47e037..895a109 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.frag.out
@@ -490,7 +490,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 179
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.basic.dx10.vert.out b/Test/baseResults/hlsl.load.basic.dx10.vert.out
index 99f3667..99a57a7 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.vert.out
@@ -452,7 +452,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 171
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.buffer.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
index 969a99f..2255cf5 100644
--- a/Test/baseResults/hlsl.load.buffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
@@ -166,7 +166,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
index d404b27..08a1c56 100644
--- a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
@@ -172,7 +172,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 75
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out
index 089329e..ebf1bd3 100644
--- a/Test/baseResults/hlsl.load.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offset.dx10.frag.out
@@ -562,7 +562,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 201
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
index 7df846b..297c737 100644
--- a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
@@ -436,7 +436,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 174
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
index 62009e1..7ad197c 100644
--- a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
@@ -110,7 +110,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
index f05b335..77344ac 100644
--- a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
@@ -208,7 +208,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 119
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
index c6e00ff..bf9ea2d 100644
--- a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
@@ -244,7 +244,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 132
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logical.binary.frag.out b/Test/baseResults/hlsl.logical.binary.frag.out
index 5b23a62..1df3966 100644
--- a/Test/baseResults/hlsl.logical.binary.frag.out
+++ b/Test/baseResults/hlsl.logical.binary.frag.out
@@ -124,7 +124,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logical.binary.vec.frag.out b/Test/baseResults/hlsl.logical.binary.vec.frag.out
index 0e4f852..bc469dc 100644
--- a/Test/baseResults/hlsl.logical.binary.vec.frag.out
+++ b/Test/baseResults/hlsl.logical.binary.vec.frag.out
@@ -254,7 +254,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 115
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logical.unary.frag.out b/Test/baseResults/hlsl.logical.unary.frag.out
index b342c34..57247c6 100644
--- a/Test/baseResults/hlsl.logical.unary.frag.out
+++ b/Test/baseResults/hlsl.logical.unary.frag.out
@@ -184,7 +184,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.logicalConvert.frag.out b/Test/baseResults/hlsl.logicalConvert.frag.out
index 6c595f8..4757f33 100644
--- a/Test/baseResults/hlsl.logicalConvert.frag.out
+++ b/Test/baseResults/hlsl.logicalConvert.frag.out
@@ -254,7 +254,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.loopattr.frag.out b/Test/baseResults/hlsl.loopattr.frag.out
index cc0073a..c6130f7 100644
--- a/Test/baseResults/hlsl.loopattr.frag.out
+++ b/Test/baseResults/hlsl.loopattr.frag.out
@@ -136,7 +136,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matNx1.frag.out b/Test/baseResults/hlsl.matNx1.frag.out
index e8e0a7b..1d92d5f 100644
--- a/Test/baseResults/hlsl.matNx1.frag.out
+++ b/Test/baseResults/hlsl.matNx1.frag.out
@@ -153,7 +153,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 77
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matType.bool.frag.out b/Test/baseResults/hlsl.matType.bool.frag.out
index b5543d8..1362ee7 100644
--- a/Test/baseResults/hlsl.matType.bool.frag.out
+++ b/Test/baseResults/hlsl.matType.bool.frag.out
@@ -233,7 +233,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 130
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matType.frag.out b/Test/baseResults/hlsl.matType.frag.out
index 80bb216..ed08983 100644
--- a/Test/baseResults/hlsl.matType.frag.out
+++ b/Test/baseResults/hlsl.matType.frag.out
@@ -32,7 +32,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matType.int.frag.out b/Test/baseResults/hlsl.matType.int.frag.out
index a1854aa..ad0c314 100644
--- a/Test/baseResults/hlsl.matType.int.frag.out
+++ b/Test/baseResults/hlsl.matType.int.frag.out
@@ -399,7 +399,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 232
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matpack-1.frag.out b/Test/baseResults/hlsl.matpack-1.frag.out
index c022587..829d0b1 100644
--- a/Test/baseResults/hlsl.matpack-1.frag.out
+++ b/Test/baseResults/hlsl.matpack-1.frag.out
@@ -100,7 +100,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matpack-pragma.frag.out b/Test/baseResults/hlsl.matpack-pragma.frag.out
index 86e945e..a5e351e 100644
--- a/Test/baseResults/hlsl.matpack-pragma.frag.out
+++ b/Test/baseResults/hlsl.matpack-pragma.frag.out
@@ -170,7 +170,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matrixSwizzle.vert.out b/Test/baseResults/hlsl.matrixSwizzle.vert.out
index 237ce5d..7bc0c17 100644
--- a/Test/baseResults/hlsl.matrixSwizzle.vert.out
+++ b/Test/baseResults/hlsl.matrixSwizzle.vert.out
@@ -677,7 +677,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 118
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matrixindex.frag.out b/Test/baseResults/hlsl.matrixindex.frag.out
index 63ddc4d..1e5fbb9 100644
--- a/Test/baseResults/hlsl.matrixindex.frag.out
+++ b/Test/baseResults/hlsl.matrixindex.frag.out
@@ -272,7 +272,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 83
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.max.frag.out b/Test/baseResults/hlsl.max.frag.out
index db215a2..14cd8bf 100644
--- a/Test/baseResults/hlsl.max.frag.out
+++ b/Test/baseResults/hlsl.max.frag.out
@@ -66,7 +66,7 @@
 0:?     'input2' (layout( location=1) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.memberFunCall.frag.out b/Test/baseResults/hlsl.memberFunCall.frag.out
index 01cb99a..83dc86f 100644
--- a/Test/baseResults/hlsl.memberFunCall.frag.out
+++ b/Test/baseResults/hlsl.memberFunCall.frag.out
@@ -152,7 +152,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.mintypes.frag.out b/Test/baseResults/hlsl.mintypes.frag.out
index 4824bcb..2ce899b 100644
--- a/Test/baseResults/hlsl.mintypes.frag.out
+++ b/Test/baseResults/hlsl.mintypes.frag.out
@@ -98,7 +98,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.mip.operator.frag.out b/Test/baseResults/hlsl.mip.operator.frag.out
index 478e808..4123d23 100644
--- a/Test/baseResults/hlsl.mip.operator.frag.out
+++ b/Test/baseResults/hlsl.mip.operator.frag.out
@@ -128,7 +128,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.mul-truncate.frag.out b/Test/baseResults/hlsl.mul-truncate.frag.out
index a7de28c..c337ed4 100644
--- a/Test/baseResults/hlsl.mul-truncate.frag.out
+++ b/Test/baseResults/hlsl.mul-truncate.frag.out
@@ -383,7 +383,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 190
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.multiDescriptorSet.frag.out b/Test/baseResults/hlsl.multiDescriptorSet.frag.out
index 8bd1ad8..fa48092 100644
--- a/Test/baseResults/hlsl.multiDescriptorSet.frag.out
+++ b/Test/baseResults/hlsl.multiDescriptorSet.frag.out
@@ -1,6 +1,6 @@
 hlsl.multiDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 92
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.multiEntry.vert.out b/Test/baseResults/hlsl.multiEntry.vert.out
index c051591..d641512 100644
--- a/Test/baseResults/hlsl.multiEntry.vert.out
+++ b/Test/baseResults/hlsl.multiEntry.vert.out
@@ -70,7 +70,7 @@
 0:?     'Index' ( in uint VertexIndex)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 41
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.multiReturn.frag.out b/Test/baseResults/hlsl.multiReturn.frag.out
index 6c41c77..54b5107 100644
--- a/Test/baseResults/hlsl.multiReturn.frag.out
+++ b/Test/baseResults/hlsl.multiReturn.frag.out
@@ -48,7 +48,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform structure{ temp float f,  temp 3-component vector of float v,  temp 3X3 matrix of float m} s})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.namespace.frag.out b/Test/baseResults/hlsl.namespace.frag.out
index 8df43ad..9431f66 100644
--- a/Test/baseResults/hlsl.namespace.frag.out
+++ b/Test/baseResults/hlsl.namespace.frag.out
@@ -103,7 +103,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.noSemantic.functionality1.comp.out b/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
index 3ede90e..fc51e9c 100644
--- a/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
+++ b/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
@@ -1,6 +1,6 @@
 hlsl.noSemantic.functionality1.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.nonint-index.frag.out b/Test/baseResults/hlsl.nonint-index.frag.out
index 131c1ec..0b6bdbc 100644
--- a/Test/baseResults/hlsl.nonint-index.frag.out
+++ b/Test/baseResults/hlsl.nonint-index.frag.out
@@ -88,7 +88,7 @@
 0:?     'input' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
index 1927a4c..268e563 100644
--- a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
+++ b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out
@@ -268,7 +268,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 111
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.numericsuffixes.frag.out b/Test/baseResults/hlsl.numericsuffixes.frag.out
index b1fa856..b433266 100644
--- a/Test/baseResults/hlsl.numericsuffixes.frag.out
+++ b/Test/baseResults/hlsl.numericsuffixes.frag.out
@@ -192,7 +192,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.numthreads.comp.out b/Test/baseResults/hlsl.numthreads.comp.out
index fd7de34..95cf29f 100644
--- a/Test/baseResults/hlsl.numthreads.comp.out
+++ b/Test/baseResults/hlsl.numthreads.comp.out
@@ -44,7 +44,7 @@
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.opaque-type-bug.frag.out b/Test/baseResults/hlsl.opaque-type-bug.frag.out
index 918b462..4ac7a91 100644
--- a/Test/baseResults/hlsl.opaque-type-bug.frag.out
+++ b/Test/baseResults/hlsl.opaque-type-bug.frag.out
@@ -58,7 +58,7 @@
 0:?     'MyTexture' (layout( binding=0) uniform texture2D)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.overload.frag.out b/Test/baseResults/hlsl.overload.frag.out
index 5960d3d..d93c305 100644
--- a/Test/baseResults/hlsl.overload.frag.out
+++ b/Test/baseResults/hlsl.overload.frag.out
@@ -734,7 +734,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 520
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.params.default.frag.out b/Test/baseResults/hlsl.params.default.frag.out
index d1ecfa6..5d054bf 100644
--- a/Test/baseResults/hlsl.params.default.frag.out
+++ b/Test/baseResults/hlsl.params.default.frag.out
@@ -376,7 +376,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 178
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.partialFlattenLocal.vert.out b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
index 46df206..c3ed3a2 100644
--- a/Test/baseResults/hlsl.partialFlattenLocal.vert.out
+++ b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
@@ -237,7 +237,7 @@
 0:?     'pos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 90
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.partialFlattenMixed.vert.out b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
index da832b4..520a0fb 100644
--- a/Test/baseResults/hlsl.partialFlattenMixed.vert.out
+++ b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
@@ -91,7 +91,7 @@
 0:?     'pos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.partialInit.frag.out b/Test/baseResults/hlsl.partialInit.frag.out
index 6881671..551c579 100644
--- a/Test/baseResults/hlsl.partialInit.frag.out
+++ b/Test/baseResults/hlsl.partialInit.frag.out
@@ -400,7 +400,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 104
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.line.frag.out b/Test/baseResults/hlsl.pp.line.frag.out
index 2c06fe9..0416cf4 100644
--- a/Test/baseResults/hlsl.pp.line.frag.out
+++ b/Test/baseResults/hlsl.pp.line.frag.out
@@ -120,7 +120,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.line2.frag.out b/Test/baseResults/hlsl.pp.line2.frag.out
index 10bbf6a..338884a 100644
--- a/Test/baseResults/hlsl.pp.line2.frag.out
+++ b/Test/baseResults/hlsl.pp.line2.frag.out
@@ -1,6 +1,6 @@
 hlsl.pp.line2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.line3.frag.out b/Test/baseResults/hlsl.pp.line3.frag.out
index 33e5d55..e94547c 100644
--- a/Test/baseResults/hlsl.pp.line3.frag.out
+++ b/Test/baseResults/hlsl.pp.line3.frag.out
@@ -1,6 +1,6 @@
 hlsl.pp.line3.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.line4.frag.out b/Test/baseResults/hlsl.pp.line4.frag.out
index ff92b52..1ddb98b 100644
--- a/Test/baseResults/hlsl.pp.line4.frag.out
+++ b/Test/baseResults/hlsl.pp.line4.frag.out
@@ -1,6 +1,6 @@
 hlsl.pp.line4.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 115
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.pp.vert.out b/Test/baseResults/hlsl.pp.vert.out
index 24ddfd1..5d4e943 100644
--- a/Test/baseResults/hlsl.pp.vert.out
+++ b/Test/baseResults/hlsl.pp.vert.out
@@ -26,7 +26,7 @@
 0:?     'anon@0' (layout( row_major std140) uniform block{ uniform int goodGlobal1,  uniform int goodGlobal2})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 13
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.precedence.frag.out b/Test/baseResults/hlsl.precedence.frag.out
index f4c5338..b51be0d 100644
--- a/Test/baseResults/hlsl.precedence.frag.out
+++ b/Test/baseResults/hlsl.precedence.frag.out
@@ -148,7 +148,7 @@
 0:?     'a4' (layout( location=3) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.precedence2.frag.out b/Test/baseResults/hlsl.precedence2.frag.out
index 9ce674d..7dd21a6 100644
--- a/Test/baseResults/hlsl.precedence2.frag.out
+++ b/Test/baseResults/hlsl.precedence2.frag.out
@@ -114,7 +114,7 @@
 0:?     'a4' (layout( location=3) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.precise.frag.out b/Test/baseResults/hlsl.precise.frag.out
index dd45069..84b2648 100644
--- a/Test/baseResults/hlsl.precise.frag.out
+++ b/Test/baseResults/hlsl.precise.frag.out
@@ -76,7 +76,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) noContraction out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.preprocessor.frag.out b/Test/baseResults/hlsl.preprocessor.frag.out
index 3c36530..11ec1ad 100644
--- a/Test/baseResults/hlsl.preprocessor.frag.out
+++ b/Test/baseResults/hlsl.preprocessor.frag.out
@@ -94,7 +94,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promote.atomic.frag.out b/Test/baseResults/hlsl.promote.atomic.frag.out
index bd781bd..4d56fba 100644
--- a/Test/baseResults/hlsl.promote.atomic.frag.out
+++ b/Test/baseResults/hlsl.promote.atomic.frag.out
@@ -64,7 +64,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promote.binary.frag.out b/Test/baseResults/hlsl.promote.binary.frag.out
index 624a506..f63fc3e 100644
--- a/Test/baseResults/hlsl.promote.binary.frag.out
+++ b/Test/baseResults/hlsl.promote.binary.frag.out
@@ -172,7 +172,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 83
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promote.vec1.frag.out b/Test/baseResults/hlsl.promote.vec1.frag.out
index b92d740..a6ad7ca 100644
--- a/Test/baseResults/hlsl.promote.vec1.frag.out
+++ b/Test/baseResults/hlsl.promote.vec1.frag.out
@@ -80,7 +80,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.promotions.frag.out b/Test/baseResults/hlsl.promotions.frag.out
index cb79983..0a17395 100644
--- a/Test/baseResults/hlsl.promotions.frag.out
+++ b/Test/baseResults/hlsl.promotions.frag.out
@@ -1582,7 +1582,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 596
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.atomics.frag.out b/Test/baseResults/hlsl.rw.atomics.frag.out
index 02aa00c..77b140b 100644
--- a/Test/baseResults/hlsl.rw.atomics.frag.out
+++ b/Test/baseResults/hlsl.rw.atomics.frag.out
@@ -3946,7 +3946,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1147
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out
index dc60a29..70f8bbe 100644
--- a/Test/baseResults/hlsl.rw.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.bracket.frag.out
@@ -1744,7 +1744,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 607
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.register.frag.out b/Test/baseResults/hlsl.rw.register.frag.out
index 01f6c89..6004512 100644
--- a/Test/baseResults/hlsl.rw.register.frag.out
+++ b/Test/baseResults/hlsl.rw.register.frag.out
@@ -98,7 +98,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
index aabee59..a8e33dd 100644
--- a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
@@ -1690,7 +1690,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 571
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.swizzle.frag.out b/Test/baseResults/hlsl.rw.swizzle.frag.out
index 089c603..267d733 100644
--- a/Test/baseResults/hlsl.rw.swizzle.frag.out
+++ b/Test/baseResults/hlsl.rw.swizzle.frag.out
@@ -202,7 +202,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
index a3b5237..06c24e7 100644
--- a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
@@ -1708,7 +1708,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 605
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.array.dx10.frag.out b/Test/baseResults/hlsl.sample.array.dx10.frag.out
index 9066a1d..2d00531 100644
--- a/Test/baseResults/hlsl.sample.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.array.dx10.frag.out
@@ -322,7 +322,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 146
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
index 0940e10..1760902 100644
--- a/Test/baseResults/hlsl.sample.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
@@ -550,7 +550,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.dx9.frag.out b/Test/baseResults/hlsl.sample.dx9.frag.out
index 7b3432a..ce6d546 100644
--- a/Test/baseResults/hlsl.sample.dx9.frag.out
+++ b/Test/baseResults/hlsl.sample.dx9.frag.out
@@ -378,7 +378,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 135
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.dx9.vert.out b/Test/baseResults/hlsl.sample.dx9.vert.out
index 732b043..2b29c0c 100644
--- a/Test/baseResults/hlsl.sample.dx9.vert.out
+++ b/Test/baseResults/hlsl.sample.dx9.vert.out
@@ -154,7 +154,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 64
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.offset.dx10.frag.out b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
index 5eadb4a..b641ad2 100644
--- a/Test/baseResults/hlsl.sample.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
@@ -364,7 +364,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 161
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
index edc5d31..54dc467 100644
--- a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
@@ -274,7 +274,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 118
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
index cc44567..8aa0e7f 100644
--- a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
@@ -154,7 +154,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
index c229502..aec493d 100644
--- a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 146
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
index c840fa4..9a29c6d 100644
--- a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
@@ -424,7 +424,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 170
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index be4b4f8..fb78b6c 100644
--- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
@@ -401,7 +401,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 161
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index ae33f40..8b7bd37 100644
--- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
@@ -299,7 +299,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 118
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
index 54cbc04..8d0ff46 100644
--- a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
@@ -399,7 +399,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 209
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
index 90e1173..c44f16b 100644
--- a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
@@ -381,7 +381,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
index 7bcf085..fd5dd3e 100644
--- a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
@@ -85,7 +85,7 @@
 0:?     'g_tTex' (layout( binding=3) uniform texture1D)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
index 29d02da..ca0fb8c 100644
--- a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
@@ -327,7 +327,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 167
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
index bf7b6f0..3d0b8fd 100644
--- a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
@@ -339,7 +339,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 178
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
index 5b21f70..ce13388 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
@@ -435,7 +435,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 210
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
index fae6899..4bf15ec 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
@@ -417,7 +417,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 199
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
index 0987ea8..b85daf0 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
@@ -351,7 +351,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 168
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
index 7434514..6f460d0 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
@@ -363,7 +363,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 179
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
index 67b5692..b2922a1 100644
--- a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
@@ -430,7 +430,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 140
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
index 7edb8da..161821e 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
@@ -532,7 +532,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 175
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
index 979d48f..b683d98 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
@@ -494,7 +494,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 166
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
index 2620a67..81fbc0b 100644
--- a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
@@ -472,7 +472,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 166
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
index 87ad78b..01ca547 100644
--- a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
@@ -340,7 +340,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 120
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
index 4f07950..a5ff45a 100644
--- a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
@@ -358,7 +358,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 147
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
index ee982cc..6b91c17 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
@@ -426,7 +426,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 172
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
index 0a8ae49..8f395ed 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
@@ -386,7 +386,7 @@
 0:?     '@entryPointOutput.Pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
index b007ee1..10b48ec 100644
--- a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
@@ -400,7 +400,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
index 302bc81..5fb25a0 100644
--- a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
@@ -298,7 +298,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 119
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scalar-length.frag.out b/Test/baseResults/hlsl.scalar-length.frag.out
index aa11af5..ec80897 100644
--- a/Test/baseResults/hlsl.scalar-length.frag.out
+++ b/Test/baseResults/hlsl.scalar-length.frag.out
@@ -64,7 +64,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scalar2matrix.frag.out b/Test/baseResults/hlsl.scalar2matrix.frag.out
index 57d250e..cb996f6 100644
--- a/Test/baseResults/hlsl.scalar2matrix.frag.out
+++ b/Test/baseResults/hlsl.scalar2matrix.frag.out
@@ -374,7 +374,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scalarCast.vert.out b/Test/baseResults/hlsl.scalarCast.vert.out
index 0e07c9f..40f0f20 100644
--- a/Test/baseResults/hlsl.scalarCast.vert.out
+++ b/Test/baseResults/hlsl.scalarCast.vert.out
@@ -322,7 +322,7 @@
 0:?     '@entryPointOutput.texCoord' (layout( location=0) out 2-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 120
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.scope.frag.out b/Test/baseResults/hlsl.scope.frag.out
index b563380..882158e 100644
--- a/Test/baseResults/hlsl.scope.frag.out
+++ b/Test/baseResults/hlsl.scope.frag.out
@@ -102,7 +102,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 49
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.self_cast.frag.out b/Test/baseResults/hlsl.self_cast.frag.out
index 9d398ed..6f0e1dd 100644
--- a/Test/baseResults/hlsl.self_cast.frag.out
+++ b/Test/baseResults/hlsl.self_cast.frag.out
@@ -68,7 +68,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.semantic-1.vert.out b/Test/baseResults/hlsl.semantic-1.vert.out
index b5e4091..96c14a9 100644
--- a/Test/baseResults/hlsl.semantic-1.vert.out
+++ b/Test/baseResults/hlsl.semantic-1.vert.out
@@ -242,7 +242,7 @@
 0:?     'v' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.semantic.geom.out b/Test/baseResults/hlsl.semantic.geom.out
index 773c8aa..29ec235 100644
--- a/Test/baseResults/hlsl.semantic.geom.out
+++ b/Test/baseResults/hlsl.semantic.geom.out
@@ -66,6 +66,58 @@
 0:13      Function Call: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
 0:?         'VertexID' ( temp 3-element array of uint)
 0:?         'OutputStream' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:21  Function Definition: notmain(u1[2];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
+0:21    Function Parameters: 
+0:21      'VertexID' ( in 2-element array of uint)
+0:21      'OutputStream' ( out structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:?     Sequence
+0:23      Sequence
+0:23        Sequence
+0:23          move second child to first child ( temp float)
+0:?             'OutputStream.clip0' ( out float Position)
+0:23            clip0: direct index for structure ( temp float)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                0 (const int)
+0:?           Sequence
+0:23            move second child to first child ( temp float)
+0:23              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip0' ( out 1-element array of float ClipDistance)
+0:23                Constant:
+0:23                  0 (const int)
+0:23              clip0: direct index for structure ( temp float)
+0:23                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23                Constant:
+0:23                  1 (const int)
+0:?           Sequence
+0:23            move second child to first child ( temp float)
+0:23              direct index ( out float CullDistance)
+0:?                 'OutputStream.cull0' ( out 1-element array of float CullDistance)
+0:23                Constant:
+0:23                  0 (const int)
+0:23              cull0: direct index for structure ( temp float)
+0:23                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23                Constant:
+0:23                  2 (const int)
+0:23          move second child to first child ( temp uint)
+0:?             'OutputStream.vpai' ( out uint ViewportIndex)
+0:23            vpai: direct index for structure ( temp uint)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                3 (const int)
+0:23          move second child to first child ( temp uint)
+0:?             'OutputStream.rtai' ( out uint Layer)
+0:23            rtai: direct index for structure ( temp uint)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                4 (const int)
+0:23          move second child to first child ( temp int)
+0:?             'OutputStream.ii' (layout( location=0) out int)
+0:23            ii: direct index for structure ( temp int)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                5 (const int)
+0:23        EmitVertex ( temp void)
 0:?   Linker Objects
 0:?     'VertexID' (layout( location=0) in 3-element array of uint)
 0:?     'OutputStream.clip0' ( out float Position)
@@ -146,6 +198,58 @@
 0:13      Function Call: @main(u1[3];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
 0:?         'VertexID' ( temp 3-element array of uint)
 0:?         'OutputStream' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:21  Function Definition: notmain(u1[2];struct-S-f1-f1-f1-u1-u1-i11; ( temp void)
+0:21    Function Parameters: 
+0:21      'VertexID' ( in 2-element array of uint)
+0:21      'OutputStream' ( out structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:?     Sequence
+0:23      Sequence
+0:23        Sequence
+0:23          move second child to first child ( temp float)
+0:?             'OutputStream.clip0' ( out float Position)
+0:23            clip0: direct index for structure ( temp float)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                0 (const int)
+0:?           Sequence
+0:23            move second child to first child ( temp float)
+0:23              direct index ( out float ClipDistance)
+0:?                 'OutputStream.clip0' ( out 1-element array of float ClipDistance)
+0:23                Constant:
+0:23                  0 (const int)
+0:23              clip0: direct index for structure ( temp float)
+0:23                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23                Constant:
+0:23                  1 (const int)
+0:?           Sequence
+0:23            move second child to first child ( temp float)
+0:23              direct index ( out float CullDistance)
+0:?                 'OutputStream.cull0' ( out 1-element array of float CullDistance)
+0:23                Constant:
+0:23                  0 (const int)
+0:23              cull0: direct index for structure ( temp float)
+0:23                's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23                Constant:
+0:23                  2 (const int)
+0:23          move second child to first child ( temp uint)
+0:?             'OutputStream.vpai' ( out uint ViewportIndex)
+0:23            vpai: direct index for structure ( temp uint)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                3 (const int)
+0:23          move second child to first child ( temp uint)
+0:?             'OutputStream.rtai' ( out uint Layer)
+0:23            rtai: direct index for structure ( temp uint)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                4 (const int)
+0:23          move second child to first child ( temp int)
+0:?             'OutputStream.ii' (layout( location=0) out int)
+0:23            ii: direct index for structure ( temp int)
+0:23              's' ( temp structure{ temp float clip0,  temp float clip0,  temp float cull0,  temp uint vpai,  temp uint rtai,  temp int ii})
+0:23              Constant:
+0:23                5 (const int)
+0:23        EmitVertex ( temp void)
 0:?   Linker Objects
 0:?     'VertexID' (layout( location=0) in 3-element array of uint)
 0:?     'OutputStream.clip0' ( out float Position)
@@ -157,8 +261,8 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 65
+// Generated by (magic number): 80008
+// Id's are bound by 88
 
                               Capability Geometry
                               Capability ClipDistance
@@ -166,7 +270,7 @@
                               Capability MultiViewport
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Geometry 4  "main" 20 29 34 40 45 50 57
+                              EntryPoint Geometry 4  "main" 28 37 42 48 53 58 65
                               ExecutionMode 4 Triangles
                               ExecutionMode 4 Invocations 1
                               ExecutionMode 4 OutputLineStrip
@@ -183,25 +287,29 @@
                               Name 17  "@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;"
                               Name 15  "VertexID"
                               Name 16  "OutputStream"
-                              Name 20  "OutputStream.clip0"
-                              Name 21  "s"
-                              Name 29  "OutputStream.clip0"
-                              Name 34  "OutputStream.cull0"
-                              Name 40  "OutputStream.vpai"
-                              Name 45  "OutputStream.rtai"
-                              Name 50  "OutputStream.ii"
-                              Name 55  "VertexID"
-                              Name 57  "VertexID"
-                              Name 59  "OutputStream"
-                              Name 60  "param"
-                              Name 62  "param"
-                              Decorate 20(OutputStream.clip0) BuiltIn Position
-                              Decorate 29(OutputStream.clip0) BuiltIn ClipDistance
-                              Decorate 34(OutputStream.cull0) BuiltIn CullDistance
-                              Decorate 40(OutputStream.vpai) BuiltIn ViewportIndex
-                              Decorate 45(OutputStream.rtai) BuiltIn Layer
-                              Decorate 50(OutputStream.ii) Location 0
-                              Decorate 57(VertexID) Location 0
+                              Name 25  "notmain(u1[2];struct-S-f1-f1-f1-u1-u1-i11;"
+                              Name 23  "VertexID"
+                              Name 24  "OutputStream"
+                              Name 28  "OutputStream.clip0"
+                              Name 29  "s"
+                              Name 37  "OutputStream.clip0"
+                              Name 42  "OutputStream.cull0"
+                              Name 48  "OutputStream.vpai"
+                              Name 53  "OutputStream.rtai"
+                              Name 58  "OutputStream.ii"
+                              Name 63  "VertexID"
+                              Name 65  "VertexID"
+                              Name 67  "OutputStream"
+                              Name 68  "param"
+                              Name 70  "param"
+                              Name 73  "s"
+                              Decorate 28(OutputStream.clip0) BuiltIn Position
+                              Decorate 37(OutputStream.clip0) BuiltIn ClipDistance
+                              Decorate 42(OutputStream.cull0) BuiltIn CullDistance
+                              Decorate 48(OutputStream.vpai) BuiltIn ViewportIndex
+                              Decorate 53(OutputStream.rtai) BuiltIn Layer
+                              Decorate 58(OutputStream.ii) Location 0
+                              Decorate 65(VertexID) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -213,69 +321,101 @@
            12(S):             TypeStruct 10(float) 10(float) 10(float) 6(int) 6(int) 11(int)
               13:             TypePointer Function 12(S)
               14:             TypeFunction 2 9(ptr) 13(ptr)
-              19:             TypePointer Output 10(float)
-20(OutputStream.clip0):     19(ptr) Variable Output
-              22:     11(int) Constant 0
-              23:             TypePointer Function 10(float)
-              26:      6(int) Constant 1
-              27:             TypeArray 10(float) 26
-              28:             TypePointer Output 27
-29(OutputStream.clip0):     28(ptr) Variable Output
-              30:     11(int) Constant 1
-34(OutputStream.cull0):     28(ptr) Variable Output
-              35:     11(int) Constant 2
-              39:             TypePointer Output 6(int)
-40(OutputStream.vpai):     39(ptr) Variable Output
-              41:     11(int) Constant 3
-              42:             TypePointer Function 6(int)
-45(OutputStream.rtai):     39(ptr) Variable Output
-              46:     11(int) Constant 4
-              49:             TypePointer Output 11(int)
-50(OutputStream.ii):     49(ptr) Variable Output
-              51:     11(int) Constant 5
-              52:             TypePointer Function 11(int)
-              56:             TypePointer Input 8
-    57(VertexID):     56(ptr) Variable Input
+              19:      6(int) Constant 2
+              20:             TypeArray 6(int) 19
+              21:             TypePointer Function 20
+              22:             TypeFunction 2 21(ptr) 13(ptr)
+              27:             TypePointer Output 10(float)
+28(OutputStream.clip0):     27(ptr) Variable Output
+              30:     11(int) Constant 0
+              31:             TypePointer Function 10(float)
+              34:      6(int) Constant 1
+              35:             TypeArray 10(float) 34
+              36:             TypePointer Output 35
+37(OutputStream.clip0):     36(ptr) Variable Output
+              38:     11(int) Constant 1
+42(OutputStream.cull0):     36(ptr) Variable Output
+              43:     11(int) Constant 2
+              47:             TypePointer Output 6(int)
+48(OutputStream.vpai):     47(ptr) Variable Output
+              49:     11(int) Constant 3
+              50:             TypePointer Function 6(int)
+53(OutputStream.rtai):     47(ptr) Variable Output
+              54:     11(int) Constant 4
+              57:             TypePointer Output 11(int)
+58(OutputStream.ii):     57(ptr) Variable Output
+              59:     11(int) Constant 5
+              60:             TypePointer Function 11(int)
+              64:             TypePointer Input 8
+    65(VertexID):     64(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-    55(VertexID):      9(ptr) Variable Function
-59(OutputStream):     13(ptr) Variable Function
-       60(param):      9(ptr) Variable Function
-       62(param):     13(ptr) Variable Function
-              58:           8 Load 57(VertexID)
-                              Store 55(VertexID) 58
-              61:           8 Load 55(VertexID)
-                              Store 60(param) 61
-              63:           2 FunctionCall 17(@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;) 60(param) 62(param)
-              64:       12(S) Load 62(param)
-                              Store 59(OutputStream) 64
+    63(VertexID):      9(ptr) Variable Function
+67(OutputStream):     13(ptr) Variable Function
+       68(param):      9(ptr) Variable Function
+       70(param):     13(ptr) Variable Function
+              66:           8 Load 65(VertexID)
+                              Store 63(VertexID) 66
+              69:           8 Load 63(VertexID)
+                              Store 68(param) 69
+              71:           2 FunctionCall 17(@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;) 68(param) 70(param)
+              72:       12(S) Load 70(param)
+                              Store 67(OutputStream) 72
                               Return
                               FunctionEnd
 17(@main(u1[3];struct-S-f1-f1-f1-u1-u1-i11;):           2 Function None 14
     15(VertexID):      9(ptr) FunctionParameter
 16(OutputStream):     13(ptr) FunctionParameter
               18:             Label
-           21(s):     13(ptr) Variable Function
-              24:     23(ptr) AccessChain 21(s) 22
-              25:   10(float) Load 24
-                              Store 20(OutputStream.clip0) 25
-              31:     23(ptr) AccessChain 21(s) 30
-              32:   10(float) Load 31
-              33:     19(ptr) AccessChain 29(OutputStream.clip0) 22
-                              Store 33 32
-              36:     23(ptr) AccessChain 21(s) 35
-              37:   10(float) Load 36
-              38:     19(ptr) AccessChain 34(OutputStream.cull0) 22
-                              Store 38 37
-              43:     42(ptr) AccessChain 21(s) 41
-              44:      6(int) Load 43
-                              Store 40(OutputStream.vpai) 44
-              47:     42(ptr) AccessChain 21(s) 46
-              48:      6(int) Load 47
-                              Store 45(OutputStream.rtai) 48
-              53:     52(ptr) AccessChain 21(s) 51
-              54:     11(int) Load 53
-                              Store 50(OutputStream.ii) 54
+           29(s):     13(ptr) Variable Function
+              32:     31(ptr) AccessChain 29(s) 30
+              33:   10(float) Load 32
+                              Store 28(OutputStream.clip0) 33
+              39:     31(ptr) AccessChain 29(s) 38
+              40:   10(float) Load 39
+              41:     27(ptr) AccessChain 37(OutputStream.clip0) 30
+                              Store 41 40
+              44:     31(ptr) AccessChain 29(s) 43
+              45:   10(float) Load 44
+              46:     27(ptr) AccessChain 42(OutputStream.cull0) 30
+                              Store 46 45
+              51:     50(ptr) AccessChain 29(s) 49
+              52:      6(int) Load 51
+                              Store 48(OutputStream.vpai) 52
+              55:     50(ptr) AccessChain 29(s) 54
+              56:      6(int) Load 55
+                              Store 53(OutputStream.rtai) 56
+              61:     60(ptr) AccessChain 29(s) 59
+              62:     11(int) Load 61
+                              Store 58(OutputStream.ii) 62
+                              EmitVertex
+                              Return
+                              FunctionEnd
+25(notmain(u1[2];struct-S-f1-f1-f1-u1-u1-i11;):           2 Function None 22
+    23(VertexID):     21(ptr) FunctionParameter
+24(OutputStream):     13(ptr) FunctionParameter
+              26:             Label
+           73(s):     13(ptr) Variable Function
+              74:     31(ptr) AccessChain 73(s) 30
+              75:   10(float) Load 74
+                              Store 28(OutputStream.clip0) 75
+              76:     31(ptr) AccessChain 73(s) 38
+              77:   10(float) Load 76
+              78:     27(ptr) AccessChain 37(OutputStream.clip0) 30
+                              Store 78 77
+              79:     31(ptr) AccessChain 73(s) 43
+              80:   10(float) Load 79
+              81:     27(ptr) AccessChain 42(OutputStream.cull0) 30
+                              Store 81 80
+              82:     50(ptr) AccessChain 73(s) 49
+              83:      6(int) Load 82
+                              Store 48(OutputStream.vpai) 83
+              84:     50(ptr) AccessChain 73(s) 54
+              85:      6(int) Load 84
+                              Store 53(OutputStream.rtai) 85
+              86:     60(ptr) AccessChain 73(s) 59
+              87:     11(int) Load 86
+                              Store 58(OutputStream.ii) 87
                               EmitVertex
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.semantic.vert.out b/Test/baseResults/hlsl.semantic.vert.out
index 2dbcd57..144df05 100644
--- a/Test/baseResults/hlsl.semantic.vert.out
+++ b/Test/baseResults/hlsl.semantic.vert.out
@@ -210,7 +210,7 @@
 0:?     '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.semicolons.frag.out b/Test/baseResults/hlsl.semicolons.frag.out
index 94307a6..b45f59d 100644
--- a/Test/baseResults/hlsl.semicolons.frag.out
+++ b/Test/baseResults/hlsl.semicolons.frag.out
@@ -74,7 +74,7 @@
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.shapeConv.frag.out b/Test/baseResults/hlsl.shapeConv.frag.out
index d283809..8da8d48 100644
--- a/Test/baseResults/hlsl.shapeConv.frag.out
+++ b/Test/baseResults/hlsl.shapeConv.frag.out
@@ -319,7 +319,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 127
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.shapeConvRet.frag.out b/Test/baseResults/hlsl.shapeConvRet.frag.out
index fc12f7f..efcbe04 100644
--- a/Test/baseResults/hlsl.shapeConvRet.frag.out
+++ b/Test/baseResults/hlsl.shapeConvRet.frag.out
@@ -68,7 +68,7 @@
 0:?     'f' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.sin.frag.out b/Test/baseResults/hlsl.sin.frag.out
index b92085e..3128cec 100644
--- a/Test/baseResults/hlsl.sin.frag.out
+++ b/Test/baseResults/hlsl.sin.frag.out
@@ -52,7 +52,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.singleArgIntPromo.vert.out b/Test/baseResults/hlsl.singleArgIntPromo.vert.out
new file mode 100755
index 0000000..71c1bb2
--- /dev/null
+++ b/Test/baseResults/hlsl.singleArgIntPromo.vert.out
@@ -0,0 +1,312 @@
+hlsl.singleArgIntPromo.vert
+Shader version: 500
+0:? Sequence
+0:2  Function Definition: @main( ( temp float)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Sequence
+0:3        move second child to first child ( temp int)
+0:3          'd' ( temp int)
+0:3          Constant:
+0:3            4 (const int)
+0:4      Sequence
+0:4        move second child to first child ( temp 2-component vector of int)
+0:4          'd2' ( temp 2-component vector of int)
+0:?           Construct ivec2 ( temp 2-component vector of int)
+0:4            Constant:
+0:4              5 (const int)
+0:4            'd' ( temp int)
+0:5      Sequence
+0:5        move second child to first child ( temp float)
+0:5          'f1' ( temp float)
+0:5          Constant:
+0:5            2.321928
+0:6      Sequence
+0:6        move second child to first child ( temp 2-component vector of float)
+0:6          'f2' ( temp 2-component vector of float)
+0:6          log ( temp 2-component vector of float)
+0:6            Convert int to float ( temp 2-component vector of float)
+0:6              'd2' ( temp 2-component vector of int)
+0:7      Sequence
+0:7        move second child to first child ( temp 3-component vector of float)
+0:7          'f3' ( temp 3-component vector of float)
+0:?           Constant:
+0:?             1.945910
+0:?             0.693147
+0:?             1.098612
+0:8      Sequence
+0:8        move second child to first child ( temp 2-component vector of float)
+0:8          'f22' ( temp 2-component vector of float)
+0:8          Constant:
+0:8            0.000000
+0:8            0.000000
+0:10      Sequence
+0:10        move second child to first child ( temp int)
+0:10          'a' ( temp int)
+0:10          Constant:
+0:10            5 (const int)
+0:11      Sequence
+0:11        move second child to first child ( temp mediump float)
+0:11          'b' ( temp mediump float)
+0:11          direct index ( temp mediump float)
+0:11            unpackHalf2x16 ( temp mediump 2-component vector of float)
+0:11              Convert int to uint ( temp mediump uint)
+0:11                'a' ( temp mediump int)
+0:11            Constant:
+0:11              0 (const int)
+0:12      multiply second child into first child ( temp mediump float)
+0:12        'b' ( temp mediump float)
+0:12        'b' ( temp mediump float)
+0:13      Sequence
+0:13        move second child to first child ( temp uint)
+0:13          'c' ( temp uint)
+0:13          packHalf2x16 ( temp uint)
+0:13            Construct vec2 ( temp 2-component vector of float)
+0:13              'b' ( temp mediump float)
+0:13              Constant:
+0:13                0.000000
+0:15      Branch: Return with expression
+0:15        add ( temp float)
+0:15          add ( temp float)
+0:15            add ( temp float)
+0:15              add ( temp float)
+0:15                'f1' ( temp float)
+0:15                direct index ( temp float)
+0:15                  'f2' ( temp 2-component vector of float)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              direct index ( temp float)
+0:15                'f3' ( temp 3-component vector of float)
+0:15                Constant:
+0:15                  2 (const int)
+0:15            direct index ( temp float)
+0:15              'f22' ( temp 2-component vector of float)
+0:15              Constant:
+0:15                1 (const int)
+0:15          Convert uint to float ( temp float)
+0:15            'c' ( temp uint)
+0:2  Function Definition: main( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child ( temp float)
+0:?         '@entryPointOutput' (layout( location=0) out float)
+0:2        Function Call: @main( ( temp float)
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout( location=0) out float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:2  Function Definition: @main( ( temp float)
+0:2    Function Parameters: 
+0:?     Sequence
+0:3      Sequence
+0:3        move second child to first child ( temp int)
+0:3          'd' ( temp int)
+0:3          Constant:
+0:3            4 (const int)
+0:4      Sequence
+0:4        move second child to first child ( temp 2-component vector of int)
+0:4          'd2' ( temp 2-component vector of int)
+0:?           Construct ivec2 ( temp 2-component vector of int)
+0:4            Constant:
+0:4              5 (const int)
+0:4            'd' ( temp int)
+0:5      Sequence
+0:5        move second child to first child ( temp float)
+0:5          'f1' ( temp float)
+0:5          Constant:
+0:5            2.321928
+0:6      Sequence
+0:6        move second child to first child ( temp 2-component vector of float)
+0:6          'f2' ( temp 2-component vector of float)
+0:6          log ( temp 2-component vector of float)
+0:6            Convert int to float ( temp 2-component vector of float)
+0:6              'd2' ( temp 2-component vector of int)
+0:7      Sequence
+0:7        move second child to first child ( temp 3-component vector of float)
+0:7          'f3' ( temp 3-component vector of float)
+0:?           Constant:
+0:?             1.945910
+0:?             0.693147
+0:?             1.098612
+0:8      Sequence
+0:8        move second child to first child ( temp 2-component vector of float)
+0:8          'f22' ( temp 2-component vector of float)
+0:8          Constant:
+0:8            0.000000
+0:8            0.000000
+0:10      Sequence
+0:10        move second child to first child ( temp int)
+0:10          'a' ( temp int)
+0:10          Constant:
+0:10            5 (const int)
+0:11      Sequence
+0:11        move second child to first child ( temp mediump float)
+0:11          'b' ( temp mediump float)
+0:11          direct index ( temp mediump float)
+0:11            unpackHalf2x16 ( temp mediump 2-component vector of float)
+0:11              Convert int to uint ( temp mediump uint)
+0:11                'a' ( temp mediump int)
+0:11            Constant:
+0:11              0 (const int)
+0:12      multiply second child into first child ( temp mediump float)
+0:12        'b' ( temp mediump float)
+0:12        'b' ( temp mediump float)
+0:13      Sequence
+0:13        move second child to first child ( temp uint)
+0:13          'c' ( temp uint)
+0:13          packHalf2x16 ( temp uint)
+0:13            Construct vec2 ( temp 2-component vector of float)
+0:13              'b' ( temp mediump float)
+0:13              Constant:
+0:13                0.000000
+0:15      Branch: Return with expression
+0:15        add ( temp float)
+0:15          add ( temp float)
+0:15            add ( temp float)
+0:15              add ( temp float)
+0:15                'f1' ( temp float)
+0:15                direct index ( temp float)
+0:15                  'f2' ( temp 2-component vector of float)
+0:15                  Constant:
+0:15                    0 (const int)
+0:15              direct index ( temp float)
+0:15                'f3' ( temp 3-component vector of float)
+0:15                Constant:
+0:15                  2 (const int)
+0:15            direct index ( temp float)
+0:15              'f22' ( temp 2-component vector of float)
+0:15              Constant:
+0:15                1 (const int)
+0:15          Convert uint to float ( temp float)
+0:15            'c' ( temp uint)
+0:2  Function Definition: main( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      move second child to first child ( temp float)
+0:?         '@entryPointOutput' (layout( location=0) out float)
+0:2        Function Call: @main( ( temp float)
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout( location=0) out float)
+
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 75
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 73
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 8  "@main("
+                              Name 12  "d"
+                              Name 16  "d2"
+                              Name 21  "f1"
+                              Name 25  "f2"
+                              Name 31  "f3"
+                              Name 36  "f22"
+                              Name 39  "a"
+                              Name 40  "b"
+                              Name 51  "c"
+                              Name 73  "@entryPointOutput"
+                              Decorate 40(b) RelaxedPrecision
+                              Decorate 41 RelaxedPrecision
+                              Decorate 43 RelaxedPrecision
+                              Decorate 44 RelaxedPrecision
+                              Decorate 46 RelaxedPrecision
+                              Decorate 47 RelaxedPrecision
+                              Decorate 48 RelaxedPrecision
+                              Decorate 49 RelaxedPrecision
+                              Decorate 52 RelaxedPrecision
+                              Decorate 73(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeFunction 6(float)
+              10:             TypeInt 32 1
+              11:             TypePointer Function 10(int)
+              13:     10(int) Constant 4
+              14:             TypeVector 10(int) 2
+              15:             TypePointer Function 14(ivec2)
+              17:     10(int) Constant 5
+              20:             TypePointer Function 6(float)
+              22:    6(float) Constant 1075092088
+              23:             TypeVector 6(float) 2
+              24:             TypePointer Function 23(fvec2)
+              29:             TypeVector 6(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:    6(float) Constant 1073288085
+              33:    6(float) Constant 1060205080
+              34:    6(float) Constant 1066180436
+              35:   29(fvec3) ConstantComposite 32 33 34
+              37:    6(float) Constant 0
+              38:   23(fvec2) ConstantComposite 37 37
+              42:             TypeInt 32 0
+              45:     42(int) Constant 0
+              50:             TypePointer Function 42(int)
+              59:     42(int) Constant 2
+              63:     42(int) Constant 1
+              72:             TypePointer Output 6(float)
+73(@entryPointOutput):     72(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              74:    6(float) FunctionCall 8(@main()
+                              Store 73(@entryPointOutput) 74
+                              Return
+                              FunctionEnd
+       8(@main():    6(float) Function None 7
+               9:             Label
+           12(d):     11(ptr) Variable Function
+          16(d2):     15(ptr) Variable Function
+          21(f1):     20(ptr) Variable Function
+          25(f2):     24(ptr) Variable Function
+          31(f3):     30(ptr) Variable Function
+         36(f22):     24(ptr) Variable Function
+           39(a):     11(ptr) Variable Function
+           40(b):     20(ptr) Variable Function
+           51(c):     50(ptr) Variable Function
+                              Store 12(d) 13
+              18:     10(int) Load 12(d)
+              19:   14(ivec2) CompositeConstruct 17 18
+                              Store 16(d2) 19
+                              Store 21(f1) 22
+              26:   14(ivec2) Load 16(d2)
+              27:   23(fvec2) ConvertSToF 26
+              28:   23(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 27
+                              Store 25(f2) 28
+                              Store 31(f3) 35
+                              Store 36(f22) 38
+                              Store 39(a) 17
+              41:     10(int) Load 39(a)
+              43:     42(int) Bitcast 41
+              44:   23(fvec2) ExtInst 1(GLSL.std.450) 62(UnpackHalf2x16) 43
+              46:    6(float) CompositeExtract 44 0
+                              Store 40(b) 46
+              47:    6(float) Load 40(b)
+              48:    6(float) Load 40(b)
+              49:    6(float) FMul 48 47
+                              Store 40(b) 49
+              52:    6(float) Load 40(b)
+              53:   23(fvec2) CompositeConstruct 52 37
+              54:     42(int) ExtInst 1(GLSL.std.450) 58(PackHalf2x16) 53
+                              Store 51(c) 54
+              55:    6(float) Load 21(f1)
+              56:     20(ptr) AccessChain 25(f2) 45
+              57:    6(float) Load 56
+              58:    6(float) FAdd 55 57
+              60:     20(ptr) AccessChain 31(f3) 59
+              61:    6(float) Load 60
+              62:    6(float) FAdd 58 61
+              64:     20(ptr) AccessChain 36(f22) 63
+              65:    6(float) Load 64
+              66:    6(float) FAdd 62 65
+              67:     42(int) Load 51(c)
+              68:    6(float) ConvertUToF 67
+              69:    6(float) FAdd 66 68
+                              ReturnValue 69
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.snorm.uav.comp.out b/Test/baseResults/hlsl.snorm.uav.comp.out
index 4c5e603..739d77d 100644
--- a/Test/baseResults/hlsl.snorm.uav.comp.out
+++ b/Test/baseResults/hlsl.snorm.uav.comp.out
@@ -112,7 +112,7 @@
 0:?     'tid' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.specConstant.frag.out b/Test/baseResults/hlsl.specConstant.frag.out
index c2942e3..fdcc2a0 100755
--- a/Test/baseResults/hlsl.specConstant.frag.out
+++ b/Test/baseResults/hlsl.specConstant.frag.out
@@ -136,7 +136,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.staticFuncInit.frag.out b/Test/baseResults/hlsl.staticFuncInit.frag.out
index d468cec..04924ed 100644
--- a/Test/baseResults/hlsl.staticFuncInit.frag.out
+++ b/Test/baseResults/hlsl.staticFuncInit.frag.out
@@ -130,7 +130,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.staticMemberFunction.frag.out b/Test/baseResults/hlsl.staticMemberFunction.frag.out
index 2c7e418..5ae189d 100644
--- a/Test/baseResults/hlsl.staticMemberFunction.frag.out
+++ b/Test/baseResults/hlsl.staticMemberFunction.frag.out
@@ -118,7 +118,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
index 29a14c4..f5e004d 100644
--- a/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
+++ b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
@@ -96,7 +96,7 @@
 0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.string.frag.out b/Test/baseResults/hlsl.string.frag.out
index 9181b93..6ee1945 100644
--- a/Test/baseResults/hlsl.string.frag.out
+++ b/Test/baseResults/hlsl.string.frag.out
@@ -50,7 +50,7 @@
 0:?     'f' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.stringtoken.frag.out b/Test/baseResults/hlsl.stringtoken.frag.out
index 15263c5..1b6e0a8 100644
--- a/Test/baseResults/hlsl.stringtoken.frag.out
+++ b/Test/baseResults/hlsl.stringtoken.frag.out
@@ -70,7 +70,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out
index 192041f..a255b36 100644
--- a/Test/baseResults/hlsl.struct.frag.out
+++ b/Test/baseResults/hlsl.struct.frag.out
@@ -213,7 +213,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 102
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split-1.vert.out b/Test/baseResults/hlsl.struct.split-1.vert.out
index d7d6e92..8c25ca2 100644
--- a/Test/baseResults/hlsl.struct.split-1.vert.out
+++ b/Test/baseResults/hlsl.struct.split-1.vert.out
@@ -196,7 +196,7 @@
 0:?     'Pos_loose' (layout( location=3) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split.array.geom.out b/Test/baseResults/hlsl.struct.split.array.geom.out
index 081b05c..c489ffb 100644
--- a/Test/baseResults/hlsl.struct.split.array.geom.out
+++ b/Test/baseResults/hlsl.struct.split.array.geom.out
@@ -160,7 +160,7 @@
 0:?     'OutputStream.VertexID' (layout( location=2) out uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 82
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.assign.frag.out b/Test/baseResults/hlsl.struct.split.assign.frag.out
index 24c8879..3209ab7 100644
--- a/Test/baseResults/hlsl.struct.split.assign.frag.out
+++ b/Test/baseResults/hlsl.struct.split.assign.frag.out
@@ -209,7 +209,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split.call.vert.out b/Test/baseResults/hlsl.struct.split.call.vert.out
index 50d1d2b..7c65c06 100644
--- a/Test/baseResults/hlsl.struct.split.call.vert.out
+++ b/Test/baseResults/hlsl.struct.split.call.vert.out
@@ -214,7 +214,7 @@
 0:?     'vsin.x1_in' (layout( location=2) in int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 77
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.struct.split.nested.geom.out b/Test/baseResults/hlsl.struct.split.nested.geom.out
index 7a72a3f..75b5003 100644
--- a/Test/baseResults/hlsl.struct.split.nested.geom.out
+++ b/Test/baseResults/hlsl.struct.split.nested.geom.out
@@ -448,7 +448,7 @@
 0:?     'ts.contains_no_builtin_io.m1' (layout( location=3) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 100
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.trivial.geom.out b/Test/baseResults/hlsl.struct.split.trivial.geom.out
index 477fbd2..ecb929e 100644
--- a/Test/baseResults/hlsl.struct.split.trivial.geom.out
+++ b/Test/baseResults/hlsl.struct.split.trivial.geom.out
@@ -192,7 +192,7 @@
 0:?     'ts.pos' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 67
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.trivial.vert.out b/Test/baseResults/hlsl.struct.split.trivial.vert.out
index 8bf477e..f516ea0 100644
--- a/Test/baseResults/hlsl.struct.split.trivial.vert.out
+++ b/Test/baseResults/hlsl.struct.split.trivial.vert.out
@@ -98,7 +98,7 @@
 0:?     'Pos_loose' (layout( location=1) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structIoFourWay.frag.out b/Test/baseResults/hlsl.structIoFourWay.frag.out
index 9938be8..ae47037 100644
--- a/Test/baseResults/hlsl.structIoFourWay.frag.out
+++ b/Test/baseResults/hlsl.structIoFourWay.frag.out
@@ -162,7 +162,7 @@
 0:?     't.normal' (layout( location=3) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structStructName.frag.out b/Test/baseResults/hlsl.structStructName.frag.out
index 183dcf6..6e767e4 100644
--- a/Test/baseResults/hlsl.structStructName.frag.out
+++ b/Test/baseResults/hlsl.structStructName.frag.out
@@ -44,7 +44,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structarray.flatten.frag.out b/Test/baseResults/hlsl.structarray.flatten.frag.out
index 5d34aec..b654c32 100644
--- a/Test/baseResults/hlsl.structarray.flatten.frag.out
+++ b/Test/baseResults/hlsl.structarray.flatten.frag.out
@@ -157,7 +157,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structarray.flatten.geom.out b/Test/baseResults/hlsl.structarray.flatten.geom.out
index f88118d..426214b 100644
--- a/Test/baseResults/hlsl.structarray.flatten.geom.out
+++ b/Test/baseResults/hlsl.structarray.flatten.geom.out
@@ -170,7 +170,7 @@
 0:?     'outStream.uv' (layout( location=1) out 2-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 58
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
index 36050fb..c61b1d8 100644
--- a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
@@ -151,7 +151,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.append.frag.out b/Test/baseResults/hlsl.structbuffer.append.frag.out
index 2e5c564..e213b4b 100644
--- a/Test/baseResults/hlsl.structbuffer.append.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.frag.out
@@ -124,7 +124,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
index e242cf6..d038fbd 100644
--- a/Test/baseResults/hlsl.structbuffer.atomics.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
@@ -475,7 +475,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 87
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.byte.frag.out b/Test/baseResults/hlsl.structbuffer.byte.frag.out
index 26c7a06..e0f1131 100644
--- a/Test/baseResults/hlsl.structbuffer.byte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.byte.frag.out
@@ -324,7 +324,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 114
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
index b33b44d..34b029b 100644
--- a/Test/baseResults/hlsl.structbuffer.coherent.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
@@ -176,7 +176,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader
@@ -305,6 +305,5 @@
               66:    9(fvec4)   CompositeConstruct 65 65 65 65
                                 ReturnValue 66
               45:             Label
-              68:    9(fvec4) Undef
-                              ReturnValue 68
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
index fbb07c2..e1c5466 100644
--- a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
@@ -180,7 +180,7 @@
 0:?     'nThreadId' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 85
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.fn.frag.out b/Test/baseResults/hlsl.structbuffer.fn.frag.out
index 085d9dd..1df5880 100644
--- a/Test/baseResults/hlsl.structbuffer.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.fn.frag.out
@@ -139,7 +139,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.fn2.comp.out b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
index 517b48c..d25446b 100644
--- a/Test/baseResults/hlsl.structbuffer.fn2.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
@@ -136,7 +136,7 @@
 0:?     'dispatchId' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out
index 9a67fd7..38e915d 100644
--- a/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.frag.out
@@ -188,7 +188,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 96
 
                               Capability Shader
@@ -344,6 +344,5 @@
               84:    9(fvec4)   CompositeConstruct 83 83 83 83
                                 ReturnValue 84
               53:             Label
-              86:    9(fvec4) Undef
-                              ReturnValue 86
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
index 5c73619..57f387c 100644
--- a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
+++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
@@ -1,6 +1,6 @@
 hlsl.structbuffer.incdec.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.out
index 452e9ee..b9c1630 100644
--- a/Test/baseResults/hlsl.structbuffer.incdec.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.out
@@ -204,7 +204,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.rw.frag.out b/Test/baseResults/hlsl.structbuffer.rw.frag.out
index ceccd5b..fbd48a2 100644
--- a/Test/baseResults/hlsl.structbuffer.rw.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rw.frag.out
@@ -176,7 +176,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader
@@ -303,6 +303,5 @@
               66:    9(fvec4)   CompositeConstruct 65 65 65 65
                                 ReturnValue 66
               45:             Label
-              68:    9(fvec4) Undef
-                              ReturnValue 68
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
index 00a055e..a061eac 100644
--- a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
@@ -1004,7 +1004,7 @@
 0:?     'pos' (layout( location=0) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 239
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structin.vert.out b/Test/baseResults/hlsl.structin.vert.out
index d7f539d..ad9c0d4 100644
--- a/Test/baseResults/hlsl.structin.vert.out
+++ b/Test/baseResults/hlsl.structin.vert.out
@@ -340,7 +340,7 @@
 0:?     'e' (layout( location=5) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 94
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.subpass.frag.out b/Test/baseResults/hlsl.subpass.frag.out
index ad5a013..8d48028 100644
--- a/Test/baseResults/hlsl.subpass.frag.out
+++ b/Test/baseResults/hlsl.subpass.frag.out
@@ -430,7 +430,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 204
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.switch.frag.out b/Test/baseResults/hlsl.switch.frag.out
index b72891e..b94187d 100644
--- a/Test/baseResults/hlsl.switch.frag.out
+++ b/Test/baseResults/hlsl.switch.frag.out
@@ -296,7 +296,7 @@
 0:?     'd' (layout( location=2) flat in int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 106
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.swizzle.frag.out b/Test/baseResults/hlsl.swizzle.frag.out
index c734d50..87ccdc7 100644
--- a/Test/baseResults/hlsl.swizzle.frag.out
+++ b/Test/baseResults/hlsl.swizzle.frag.out
@@ -77,7 +77,7 @@
 0:?     'AmbientColor' ( global 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.synthesizeInput.frag.out b/Test/baseResults/hlsl.synthesizeInput.frag.out
index bbe9743..31f7b7a 100644
--- a/Test/baseResults/hlsl.synthesizeInput.frag.out
+++ b/Test/baseResults/hlsl.synthesizeInput.frag.out
@@ -98,7 +98,7 @@
 0:?     'input.no_interp' (layout( location=1) flat in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.target.frag.out b/Test/baseResults/hlsl.target.frag.out
index 0001796..0ab23e8 100644
--- a/Test/baseResults/hlsl.target.frag.out
+++ b/Test/baseResults/hlsl.target.frag.out
@@ -114,7 +114,7 @@
 0:?     'out2' (layout( location=3) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.targetStruct1.frag.out b/Test/baseResults/hlsl.targetStruct1.frag.out
index 371ce2a..93d787c 100644
--- a/Test/baseResults/hlsl.targetStruct1.frag.out
+++ b/Test/baseResults/hlsl.targetStruct1.frag.out
@@ -184,7 +184,7 @@
 0:?     'po' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.targetStruct2.frag.out b/Test/baseResults/hlsl.targetStruct2.frag.out
index e6099c9..0fae66f 100644
--- a/Test/baseResults/hlsl.targetStruct2.frag.out
+++ b/Test/baseResults/hlsl.targetStruct2.frag.out
@@ -184,7 +184,7 @@
 0:?     'po' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.templatetypes.frag.out b/Test/baseResults/hlsl.templatetypes.frag.out
index 3fc5846..1dcfc46 100644
--- a/Test/baseResults/hlsl.templatetypes.frag.out
+++ b/Test/baseResults/hlsl.templatetypes.frag.out
@@ -508,7 +508,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 153
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.texture.struct.frag.out b/Test/baseResults/hlsl.texture.struct.frag.out
index 6fc5428..7835d32 100644
--- a/Test/baseResults/hlsl.texture.struct.frag.out
+++ b/Test/baseResults/hlsl.texture.struct.frag.out
@@ -839,7 +839,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 240
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.texture.subvec4.frag.out b/Test/baseResults/hlsl.texture.subvec4.frag.out
index 1beb027..01f32da 100644
--- a/Test/baseResults/hlsl.texture.subvec4.frag.out
+++ b/Test/baseResults/hlsl.texture.subvec4.frag.out
@@ -356,7 +356,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 130
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.texturebuffer.frag.out b/Test/baseResults/hlsl.texturebuffer.frag.out
index 0f761af..1aa9dbc 100644
--- a/Test/baseResults/hlsl.texturebuffer.frag.out
+++ b/Test/baseResults/hlsl.texturebuffer.frag.out
@@ -70,7 +70,7 @@
 0:?     'pos' ( in 4-component vector of float FragCoord)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.this.frag.out b/Test/baseResults/hlsl.this.frag.out
index ac5fde8..f32f109 100644
--- a/Test/baseResults/hlsl.this.frag.out
+++ b/Test/baseResults/hlsl.this.frag.out
@@ -240,7 +240,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.tristream-append.geom.out b/Test/baseResults/hlsl.tristream-append.geom.out
index 94344cd..514ce16 100644
--- a/Test/baseResults/hlsl.tristream-append.geom.out
+++ b/Test/baseResults/hlsl.tristream-append.geom.out
@@ -107,7 +107,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.tx.bracket.frag.out b/Test/baseResults/hlsl.tx.bracket.frag.out
index f5c8288..0e8fb5c 100644
--- a/Test/baseResults/hlsl.tx.bracket.frag.out
+++ b/Test/baseResults/hlsl.tx.bracket.frag.out
@@ -422,7 +422,7 @@
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 188
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.tx.overload.frag.out b/Test/baseResults/hlsl.tx.overload.frag.out
index 3277954..8556b9e 100644
--- a/Test/baseResults/hlsl.tx.overload.frag.out
+++ b/Test/baseResults/hlsl.tx.overload.frag.out
@@ -134,7 +134,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 73
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.type.half.frag.out b/Test/baseResults/hlsl.type.half.frag.out
index 6b5a945..719b139 100644
--- a/Test/baseResults/hlsl.type.half.frag.out
+++ b/Test/baseResults/hlsl.type.half.frag.out
@@ -164,7 +164,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.type.identifier.frag.out b/Test/baseResults/hlsl.type.identifier.frag.out
index 2eaa2ae..adec4a3 100644
--- a/Test/baseResults/hlsl.type.identifier.frag.out
+++ b/Test/baseResults/hlsl.type.identifier.frag.out
@@ -266,7 +266,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 105
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.type.type.conversion.valid.frag.out b/Test/baseResults/hlsl.type.type.conversion.valid.frag.out
index fc67200..3e511ff 100644
--- a/Test/baseResults/hlsl.type.type.conversion.valid.frag.out
+++ b/Test/baseResults/hlsl.type.type.conversion.valid.frag.out
@@ -1364,7 +1364,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 122
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.typeGraphCopy.vert.out b/Test/baseResults/hlsl.typeGraphCopy.vert.out
index 8509cc4..1ca93bb 100644
--- a/Test/baseResults/hlsl.typeGraphCopy.vert.out
+++ b/Test/baseResults/hlsl.typeGraphCopy.vert.out
@@ -62,7 +62,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.typedef.frag.out b/Test/baseResults/hlsl.typedef.frag.out
index 11fd107..d4ab66e 100644
--- a/Test/baseResults/hlsl.typedef.frag.out
+++ b/Test/baseResults/hlsl.typedef.frag.out
@@ -79,7 +79,7 @@
 0:?   Linker Objects
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.void.frag.out b/Test/baseResults/hlsl.void.frag.out
index 30edd63..99de9d9 100644
--- a/Test/baseResults/hlsl.void.frag.out
+++ b/Test/baseResults/hlsl.void.frag.out
@@ -54,7 +54,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavebroadcast.comp.out b/Test/baseResults/hlsl.wavebroadcast.comp.out
index f1c9679..a9fc9b4 100644
--- a/Test/baseResults/hlsl.wavebroadcast.comp.out
+++ b/Test/baseResults/hlsl.wavebroadcast.comp.out
@@ -2298,7 +2298,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 359
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.waveprefix.comp.out b/Test/baseResults/hlsl.waveprefix.comp.out
index a9a4b75..3fc8497 100644
--- a/Test/baseResults/hlsl.waveprefix.comp.out
+++ b/Test/baseResults/hlsl.waveprefix.comp.out
@@ -2322,7 +2322,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 369
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavequad.comp.out b/Test/baseResults/hlsl.wavequad.comp.out
index e7e10f1..e237e15 100644
--- a/Test/baseResults/hlsl.wavequad.comp.out
+++ b/Test/baseResults/hlsl.wavequad.comp.out
@@ -8026,7 +8026,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1120
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavequery.comp.out b/Test/baseResults/hlsl.wavequery.comp.out
index 67da71d..09cba4d 100644
--- a/Test/baseResults/hlsl.wavequery.comp.out
+++ b/Test/baseResults/hlsl.wavequery.comp.out
@@ -60,7 +60,7 @@
 0:?     'data' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data})
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavequery.frag.out b/Test/baseResults/hlsl.wavequery.frag.out
index 52304a6..8848a15 100644
--- a/Test/baseResults/hlsl.wavequery.frag.out
+++ b/Test/baseResults/hlsl.wavequery.frag.out
@@ -72,7 +72,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
@@ -118,6 +118,5 @@
               23:               Label
                                 ReturnValue 24
               16:             Label
-              26:    7(fvec4) Undef
-                              ReturnValue 26
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.wavereduction.comp.out b/Test/baseResults/hlsl.wavereduction.comp.out
index 3e0d3fb..c31f7f5 100644
--- a/Test/baseResults/hlsl.wavereduction.comp.out
+++ b/Test/baseResults/hlsl.wavereduction.comp.out
@@ -6186,7 +6186,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 901
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavevote.comp.out b/Test/baseResults/hlsl.wavevote.comp.out
index 7b671bf..b5c095d 100644
--- a/Test/baseResults/hlsl.wavevote.comp.out
+++ b/Test/baseResults/hlsl.wavevote.comp.out
@@ -204,7 +204,7 @@
 0:?     'dti' ( in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 75
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.whileLoop.frag.out b/Test/baseResults/hlsl.whileLoop.frag.out
index babc77d..a63d006 100644
--- a/Test/baseResults/hlsl.whileLoop.frag.out
+++ b/Test/baseResults/hlsl.whileLoop.frag.out
@@ -96,7 +96,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.y-negate-1.vert.out b/Test/baseResults/hlsl.y-negate-1.vert.out
index c086cc0..08413d2 100644
--- a/Test/baseResults/hlsl.y-negate-1.vert.out
+++ b/Test/baseResults/hlsl.y-negate-1.vert.out
@@ -72,7 +72,7 @@
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.y-negate-2.vert.out b/Test/baseResults/hlsl.y-negate-2.vert.out
index 4e6f189..9e90d3b 100644
--- a/Test/baseResults/hlsl.y-negate-2.vert.out
+++ b/Test/baseResults/hlsl.y-negate-2.vert.out
@@ -80,7 +80,7 @@
 0:?     'position' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.y-negate-3.vert.out b/Test/baseResults/hlsl.y-negate-3.vert.out
index 6374551..29f63f1 100644
--- a/Test/baseResults/hlsl.y-negate-3.vert.out
+++ b/Test/baseResults/hlsl.y-negate-3.vert.out
@@ -126,7 +126,7 @@
 0:?     '@entryPointOutput.somethingelse' (layout( location=0) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out
new file mode 100755
index 0000000..b8ba789
--- /dev/null
+++ b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out
@@ -0,0 +1,177 @@
+link.multiAnonBlocksInvalid.0.0.vert
+ERROR: 0:22: 'ColorBlock' : nameless block contains a member that already has a name at global scope 
+ERROR: 0:42: 'v1' : redefinition 
+ERROR: 0:43: 'uProj' : redefinition 
+ERROR: 3 compilation errors.  No code generated.
+
+
+Shader version: 430
+ERROR: node is still EOpNull!
+0:46  Function Definition: main( ( global void)
+0:46    Function Parameters: 
+0:48    Sequence
+0:48      move second child to first child ( temp 4-component vector of float)
+0:48        'oColor' ( smooth out 4-component vector of float)
+0:48        component-wise multiply ( temp 4-component vector of float)
+0:48          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:48            'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2, layout( column_major std140 offset=32) uniform 4-component vector of float v1})
+0:48            Constant:
+0:48              0 (const uint)
+0:48          Function Call: getColor2( ( global 4-component vector of float)
+0:49      move second child to first child ( temp 4-component vector of float)
+0:49        v1: direct index for structure ( out 4-component vector of float)
+0:49          'anon@2' ( out block{ out 4-component vector of float v1})
+0:49          Constant:
+0:49            0 (const uint)
+0:49        color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:49          'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2, layout( column_major std140 offset=32) uniform 4-component vector of float v1})
+0:49          Constant:
+0:49            0 (const uint)
+0:51      move second child to first child ( temp 4-component vector of float)
+0:51        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:51          'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:51          Constant:
+0:51            0 (const uint)
+0:51        matrix-times-vector ( temp 4-component vector of float)
+0:51          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:51            'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:51            Constant:
+0:51              0 (const uint)
+0:51          Function Call: getWorld( ( global 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:?     'anon@1' (layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float b})
+0:?     'anon@2' ( out block{ out 4-component vector of float v1})
+0:?     'myName' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+link.multiAnonBlocksInvalid.0.1.vert
+Shader version: 430
+0:? Sequence
+0:38  Function Definition: getColor2( ( global 4-component vector of float)
+0:38    Function Parameters: 
+0:40    Sequence
+0:40      Branch: Return with expression
+0:40        color2: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:40          'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:40          Constant:
+0:40            0 (const uint)
+0:43  Function Definition: getWorld( ( global 4-component vector of float)
+0:43    Function Parameters: 
+0:45    Sequence
+0:45      Branch: Return with expression
+0:45        matrix-times-vector ( temp 4-component vector of float)
+0:45          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform 4X4 matrix of float)
+0:45            'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:45            Constant:
+0:45              1 (const uint)
+0:45          'P' ( in 4-component vector of float)
+0:46      move second child to first child ( temp 4-component vector of float)
+0:46        v2: direct index for structure ( out 4-component vector of float)
+0:46          'anon@2' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:46          Constant:
+0:46            1 (const uint)
+0:46        Constant:
+0:46          1.000000
+0:46          1.000000
+0:46          1.000000
+0:46          1.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'anon@2' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'anon@3' (layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float a})
+0:?     'anon@4' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m})
+0:?     'P' ( in 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Types must match:
+    anon@0: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj}" versus anon@1: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}"
+ERROR: Linking vertex stage: Types must match:
+    anon@2: " out block{ out 4-component vector of float v1}" versus " out block{ out 4-component vector of float v1,  out 4-component vector of float v2}"
+ERROR: Linking vertex stage: Types must match:
+    anon@1: "layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float b}" versus anon@3: "layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float a}"
+ERROR: Linking vertex stage: Matched Uniform or Storage blocks must all be anonymous, or all be named:
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    myName: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m}" versus anon@4: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m}"
+
+Shader version: 430
+ERROR: node is still EOpNull!
+0:46  Function Definition: main( ( global void)
+0:46    Function Parameters: 
+0:48    Sequence
+0:48      move second child to first child ( temp 4-component vector of float)
+0:48        'oColor' ( smooth out 4-component vector of float)
+0:48        component-wise multiply ( temp 4-component vector of float)
+0:48          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:48            'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2, layout( column_major std140 offset=32) uniform 4-component vector of float v1})
+0:48            Constant:
+0:48              0 (const uint)
+0:48          Function Call: getColor2( ( global 4-component vector of float)
+0:49      move second child to first child ( temp 4-component vector of float)
+0:49        v1: direct index for structure ( out 4-component vector of float)
+0:49          'anon@2' ( out block{ out 4-component vector of float v1})
+0:49          Constant:
+0:49            0 (const uint)
+0:49        color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:49          'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2, layout( column_major std140 offset=32) uniform 4-component vector of float v1})
+0:49          Constant:
+0:49            0 (const uint)
+0:51      move second child to first child ( temp 4-component vector of float)
+0:51        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:51          'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:51          Constant:
+0:51            0 (const uint)
+0:51        matrix-times-vector ( temp 4-component vector of float)
+0:51          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:51            'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:51            Constant:
+0:51              0 (const uint)
+0:51          Function Call: getWorld( ( global 4-component vector of float)
+0:38  Function Definition: getColor2( ( global 4-component vector of float)
+0:38    Function Parameters: 
+0:40    Sequence
+0:40      Branch: Return with expression
+0:40        color2: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:40          'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:40          Constant:
+0:40            0 (const uint)
+0:43  Function Definition: getWorld( ( global 4-component vector of float)
+0:43    Function Parameters: 
+0:45    Sequence
+0:45      Branch: Return with expression
+0:45        matrix-times-vector ( temp 4-component vector of float)
+0:45          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform 4X4 matrix of float)
+0:45            'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:45            Constant:
+0:45              1 (const uint)
+0:45          'P' ( in 4-component vector of float)
+0:46      move second child to first child ( temp 4-component vector of float)
+0:46        v2: direct index for structure ( out 4-component vector of float)
+0:46          'anon@2' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:46          Constant:
+0:46            1 (const uint)
+0:46        Constant:
+0:46          1.000000
+0:46          1.000000
+0:46          1.000000
+0:46          1.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:?     'anon@1' (layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float b})
+0:?     'anon@2' ( out block{ out 4-component vector of float v1})
+0:?     'myName' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:?     'P' ( in 4-component vector of float)
+
diff --git a/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out
new file mode 100755
index 0000000..87c31b1
--- /dev/null
+++ b/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out
@@ -0,0 +1,157 @@
+link.multiAnonBlocksValid.0.0.vert
+Shader version: 430
+0:? Sequence
+0:32  Function Definition: main( ( global void)
+0:32    Function Parameters: 
+0:34    Sequence
+0:34      move second child to first child ( temp 4-component vector of float)
+0:34        'oColor' ( smooth out 4-component vector of float)
+0:34        component-wise multiply ( temp 4-component vector of float)
+0:34          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:34            'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:34            Constant:
+0:34              0 (const uint)
+0:34          Function Call: getColor2( ( global 4-component vector of float)
+0:35      move second child to first child ( temp 4-component vector of float)
+0:35        v1: direct index for structure ( out 4-component vector of float)
+0:35          'anon@1' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:35          Constant:
+0:35            0 (const uint)
+0:35        color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:35          'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:35          Constant:
+0:35            0 (const uint)
+0:37      move second child to first child ( temp 4-component vector of float)
+0:37        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:37          'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:37          Constant:
+0:37            0 (const uint)
+0:37        matrix-times-vector ( temp 4-component vector of float)
+0:37          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:37            'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:37            Constant:
+0:37              0 (const uint)
+0:37          Function Call: getWorld( ( global 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'anon@1' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+link.multiAnonBlocksValid.0.1.vert
+Shader version: 430
+0:? Sequence
+0:24  Function Definition: getColor2( ( global 4-component vector of float)
+0:24    Function Parameters: 
+0:26    Sequence
+0:26      Branch: Return with expression
+0:26        color2: direct index for structure (layout( column_major std140 offset=16) uniform 4-component vector of float)
+0:26          'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:26          Constant:
+0:26            1 (const uint)
+0:29  Function Definition: getWorld( ( global 4-component vector of float)
+0:29    Function Parameters: 
+0:31    Sequence
+0:31      Branch: Return with expression
+0:31        matrix-times-vector ( temp 4-component vector of float)
+0:31          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform 4X4 matrix of float)
+0:31            'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:31            Constant:
+0:31              1 (const uint)
+0:31          'P' ( in 4-component vector of float)
+0:32      move second child to first child ( temp 4-component vector of float)
+0:32        v2: direct index for structure ( out 4-component vector of float)
+0:32          'anon@2' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:32          Constant:
+0:32            1 (const uint)
+0:32        Constant:
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'anon@2' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'P' ( in 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 430
+0:? Sequence
+0:32  Function Definition: main( ( global void)
+0:32    Function Parameters: 
+0:34    Sequence
+0:34      move second child to first child ( temp 4-component vector of float)
+0:34        'oColor' ( smooth out 4-component vector of float)
+0:34        component-wise multiply ( temp 4-component vector of float)
+0:34          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:34            'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:34            Constant:
+0:34              0 (const uint)
+0:34          Function Call: getColor2( ( global 4-component vector of float)
+0:35      move second child to first child ( temp 4-component vector of float)
+0:35        v1: direct index for structure ( out 4-component vector of float)
+0:35          'anon@1' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:35          Constant:
+0:35            0 (const uint)
+0:35        color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:35          'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:35          Constant:
+0:35            0 (const uint)
+0:37      move second child to first child ( temp 4-component vector of float)
+0:37        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:37          'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:37          Constant:
+0:37            0 (const uint)
+0:37        matrix-times-vector ( temp 4-component vector of float)
+0:37          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:37            'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:37            Constant:
+0:37              0 (const uint)
+0:37          Function Call: getWorld( ( global 4-component vector of float)
+0:24  Function Definition: getColor2( ( global 4-component vector of float)
+0:24    Function Parameters: 
+0:26    Sequence
+0:26      Branch: Return with expression
+0:26        color2: direct index for structure (layout( column_major std140 offset=16) uniform 4-component vector of float)
+0:26          'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:26          Constant:
+0:26            1 (const uint)
+0:29  Function Definition: getWorld( ( global 4-component vector of float)
+0:29    Function Parameters: 
+0:31    Sequence
+0:31      Branch: Return with expression
+0:31        matrix-times-vector ( temp 4-component vector of float)
+0:31          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform 4X4 matrix of float)
+0:31            'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:31            Constant:
+0:31              1 (const uint)
+0:31          'P' ( in 4-component vector of float)
+0:32      move second child to first child ( temp 4-component vector of float)
+0:32        v2: direct index for structure ( out 4-component vector of float)
+0:32          'anon@2' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:32          Constant:
+0:32            1 (const uint)
+0:32        Constant:
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'anon@1' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+0:?     'P' ( in 4-component vector of float)
+
diff --git a/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out
new file mode 100755
index 0000000..12b5c43
--- /dev/null
+++ b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out
@@ -0,0 +1,182 @@
+link.multiBlocksInvalid.0.0.vert
+Shader version: 430
+0:? Sequence
+0:34  Function Definition: main( ( global void)
+0:34    Function Parameters: 
+0:36    Sequence
+0:36      move second child to first child ( temp 4-component vector of float)
+0:36        'oColor' ( smooth out 4-component vector of float)
+0:36        component-wise multiply ( temp 4-component vector of float)
+0:36          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:36            'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1})
+0:36            Constant:
+0:36              0 (const int)
+0:36          Function Call: getColor2( ( global 4-component vector of float)
+0:37      move second child to first child ( temp 4-component vector of float)
+0:37        v1: direct index for structure ( out 4-component vector of float)
+0:37          'oV' ( out block{ out 4-component vector of float v1})
+0:37          Constant:
+0:37            0 (const int)
+0:37        add ( temp 4-component vector of float)
+0:37          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:37            'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1})
+0:37            Constant:
+0:37              0 (const int)
+0:37          color1: direct index for structure (layout( column_major std430 offset=0) buffer 4-component vector of float)
+0:37            'uBufC' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1})
+0:37            Constant:
+0:37              0 (const int)
+0:39      move second child to first child ( temp 4-component vector of float)
+0:39        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:39          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:39          Constant:
+0:39            0 (const uint)
+0:39        matrix-times-vector ( temp 4-component vector of float)
+0:39          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:39            'uD' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:39            Constant:
+0:39              0 (const int)
+0:39          Function Call: getWorld( ( global 4-component vector of float)
+0:?   Linker Objects
+0:?     'uD' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:?     'oV' ( out block{ out 4-component vector of float v1})
+0:?     'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1})
+0:?     'uBufC' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+link.multiBlocksInvalid.0.1.vert
+Shader version: 430
+0:? Sequence
+0:21  Function Definition: getColor2( ( global 4-component vector of float)
+0:21    Function Parameters: 
+0:23    Sequence
+0:23      Branch: Return with expression
+0:23        color2: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:23          'uColorB' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:23          Constant:
+0:23            0 (const int)
+0:26  Function Definition: getWorld( ( global 4-component vector of float)
+0:26    Function Parameters: 
+0:28    Sequence
+0:28      Branch: Return with expression
+0:28        matrix-times-vector ( temp 4-component vector of float)
+0:28          uWorld: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:28            'uDefaultB' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uWorld})
+0:28            Constant:
+0:28              0 (const int)
+0:28          'P' ( in 4-component vector of float)
+0:29      move second child to first child ( temp 4-component vector of float)
+0:29        v2: direct index for structure ( out 4-component vector of float)
+0:29          'oVert' ( out block{ out 4-component vector of float v2})
+0:29          Constant:
+0:29            0 (const int)
+0:29        Constant:
+0:29          1.000000
+0:29          1.000000
+0:29          1.000000
+0:29          1.000000
+0:?   Linker Objects
+0:?     'uColorB' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:?     'uDefaultB' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uWorld})
+0:?     'oVert' ( out block{ out 4-component vector of float v2})
+0:?     'P' ( in 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Types must match:
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    uC: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1}" versus uColorB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2}"
+ERROR: Linking vertex stage: Types must match:
+ERROR: Linking vertex stage: Storage qualifiers must match:
+ERROR: Linking vertex stage: Layout qualification must match:
+    uBufC: "layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1}" versus uColorB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2}"
+ERROR: Linking vertex stage: Types must match:
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    uD: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj}" versus uDefaultB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uWorld}"
+ERROR: Linking vertex stage: Types must match:
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    oV: " out block{ out 4-component vector of float v1}" versus oVert: " out block{ out 4-component vector of float v2}"
+
+Shader version: 430
+0:? Sequence
+0:34  Function Definition: main( ( global void)
+0:34    Function Parameters: 
+0:36    Sequence
+0:36      move second child to first child ( temp 4-component vector of float)
+0:36        'oColor' ( smooth out 4-component vector of float)
+0:36        component-wise multiply ( temp 4-component vector of float)
+0:36          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:36            'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1})
+0:36            Constant:
+0:36              0 (const int)
+0:36          Function Call: getColor2( ( global 4-component vector of float)
+0:37      move second child to first child ( temp 4-component vector of float)
+0:37        v1: direct index for structure ( out 4-component vector of float)
+0:37          'oV' ( out block{ out 4-component vector of float v1})
+0:37          Constant:
+0:37            0 (const int)
+0:37        add ( temp 4-component vector of float)
+0:37          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:37            'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1})
+0:37            Constant:
+0:37              0 (const int)
+0:37          color1: direct index for structure (layout( column_major std430 offset=0) buffer 4-component vector of float)
+0:37            'uBufC' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1})
+0:37            Constant:
+0:37              0 (const int)
+0:39      move second child to first child ( temp 4-component vector of float)
+0:39        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:39          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:39          Constant:
+0:39            0 (const uint)
+0:39        matrix-times-vector ( temp 4-component vector of float)
+0:39          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:39            'uD' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:39            Constant:
+0:39              0 (const int)
+0:39          Function Call: getWorld( ( global 4-component vector of float)
+0:21  Function Definition: getColor2( ( global 4-component vector of float)
+0:21    Function Parameters: 
+0:23    Sequence
+0:23      Branch: Return with expression
+0:23        color2: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:23          'uColorB' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2})
+0:23          Constant:
+0:23            0 (const int)
+0:26  Function Definition: getWorld( ( global 4-component vector of float)
+0:26    Function Parameters: 
+0:28    Sequence
+0:28      Branch: Return with expression
+0:28        matrix-times-vector ( temp 4-component vector of float)
+0:28          uWorld: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:28            'uDefaultB' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uWorld})
+0:28            Constant:
+0:28              0 (const int)
+0:28          'P' ( in 4-component vector of float)
+0:29      move second child to first child ( temp 4-component vector of float)
+0:29        v2: direct index for structure ( out 4-component vector of float)
+0:29          'oVert' ( out block{ out 4-component vector of float v2})
+0:29          Constant:
+0:29            0 (const int)
+0:29        Constant:
+0:29          1.000000
+0:29          1.000000
+0:29          1.000000
+0:29          1.000000
+0:?   Linker Objects
+0:?     'uD' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj})
+0:?     'oV' ( out block{ out 4-component vector of float v1})
+0:?     'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1})
+0:?     'uBufC' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+0:?     'P' ( in 4-component vector of float)
+
diff --git a/Test/baseResults/link.multiBlocksValid.1.0.vert.out b/Test/baseResults/link.multiBlocksValid.1.0.vert.out
new file mode 100755
index 0000000..2f32abd
--- /dev/null
+++ b/Test/baseResults/link.multiBlocksValid.1.0.vert.out
@@ -0,0 +1,163 @@
+link.multiBlocksValid.1.0.vert
+Shader version: 430
+0:? Sequence
+0:26  Function Definition: main( ( global void)
+0:26    Function Parameters: 
+0:28    Sequence
+0:28      move second child to first child ( temp 4-component vector of float)
+0:28        'oColor' ( smooth out 4-component vector of float)
+0:28        component-wise multiply ( temp 4-component vector of float)
+0:28          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:28            'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:28            Constant:
+0:28              0 (const int)
+0:28          Function Call: getColor2( ( global 4-component vector of float)
+0:29      move second child to first child ( temp 4-component vector of float)
+0:29        v1: direct index for structure ( out 4-component vector of float)
+0:29          'b' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:29          Constant:
+0:29            0 (const int)
+0:29        color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:29          'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:29          Constant:
+0:29            0 (const int)
+0:31      move second child to first child ( temp 4-component vector of float)
+0:31        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:31          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:31          Constant:
+0:31            0 (const uint)
+0:31        matrix-times-vector ( temp 4-component vector of float)
+0:31          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:31            'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:31            Constant:
+0:31              0 (const int)
+0:31          Function Call: getWorld( ( global 4-component vector of float)
+0:?   Linker Objects
+0:?     'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'b' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+link.multiBlocksValid.1.1.vert
+Shader version: 430
+0:? Sequence
+0:24  Function Definition: getColor2( ( global 4-component vector of float)
+0:24    Function Parameters: 
+0:26    Sequence
+0:26      Branch: Return with expression
+0:26        color2: direct index for structure (layout( column_major std140 offset=16) uniform 4-component vector of float)
+0:26          'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:26          Constant:
+0:26            1 (const int)
+0:29  Function Definition: getWorld( ( global 4-component vector of float)
+0:29    Function Parameters: 
+0:31    Sequence
+0:31      Branch: Return with expression
+0:31        matrix-times-vector ( temp 4-component vector of float)
+0:31          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform 4X4 matrix of float)
+0:31            'b' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:31            Constant:
+0:31              1 (const int)
+0:31          'P' ( in 4-component vector of float)
+0:32      move second child to first child ( temp 4-component vector of float)
+0:32        v2: direct index for structure ( out 4-component vector of float)
+0:32          'c' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:32          Constant:
+0:32            1 (const int)
+0:32        Constant:
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:?   Linker Objects
+0:?     'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:?     'b' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'c' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'P' ( in 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    c: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}" versus a: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}"
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    a: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}" versus b: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}"
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    b: " out block{ out 4-component vector of float v1,  out 4-component vector of float v2}" versus c: " out block{ out 4-component vector of float v1,  out 4-component vector of float v2}"
+
+Shader version: 430
+0:? Sequence
+0:26  Function Definition: main( ( global void)
+0:26    Function Parameters: 
+0:28    Sequence
+0:28      move second child to first child ( temp 4-component vector of float)
+0:28        'oColor' ( smooth out 4-component vector of float)
+0:28        component-wise multiply ( temp 4-component vector of float)
+0:28          color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:28            'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:28            Constant:
+0:28              0 (const int)
+0:28          Function Call: getColor2( ( global 4-component vector of float)
+0:29      move second child to first child ( temp 4-component vector of float)
+0:29        v1: direct index for structure ( out 4-component vector of float)
+0:29          'b' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:29          Constant:
+0:29            0 (const int)
+0:29        color1: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:29          'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:29          Constant:
+0:29            0 (const int)
+0:31      move second child to first child ( temp 4-component vector of float)
+0:31        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:31          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:31          Constant:
+0:31            0 (const uint)
+0:31        matrix-times-vector ( temp 4-component vector of float)
+0:31          uProj: direct index for structure (layout( column_major std140 offset=0) uniform 4X4 matrix of float)
+0:31            'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:31            Constant:
+0:31              0 (const int)
+0:31          Function Call: getWorld( ( global 4-component vector of float)
+0:24  Function Definition: getColor2( ( global 4-component vector of float)
+0:24    Function Parameters: 
+0:26    Sequence
+0:26      Branch: Return with expression
+0:26        color2: direct index for structure (layout( column_major std140 offset=16) uniform 4-component vector of float)
+0:26          'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:26          Constant:
+0:26            1 (const int)
+0:29  Function Definition: getWorld( ( global 4-component vector of float)
+0:29    Function Parameters: 
+0:31    Sequence
+0:31      Branch: Return with expression
+0:31        matrix-times-vector ( temp 4-component vector of float)
+0:31          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform 4X4 matrix of float)
+0:31            'b' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:31            Constant:
+0:31              1 (const int)
+0:31          'P' ( in 4-component vector of float)
+0:32      move second child to first child ( temp 4-component vector of float)
+0:32        v2: direct index for structure ( out 4-component vector of float)
+0:32          'c' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:32          Constant:
+0:32            1 (const int)
+0:32        Constant:
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:32          1.000000
+0:?   Linker Objects
+0:?     'a' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld})
+0:?     'b' ( out block{ out 4-component vector of float v1,  out 4-component vector of float v2})
+0:?     'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2})
+0:?     'oColor' ( smooth out 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex,  out 4-component vector of float FrontColor gl_FrontColor,  out 4-component vector of float BackColor gl_BackColor,  out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor,  out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor,  out 1-element array of 4-component vector of float TexCoord gl_TexCoord,  out float FogFragCoord gl_FogFragCoord})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+0:?     'P' ( in 4-component vector of float)
+
diff --git a/Test/baseResults/link.vk.differentPC.0.0.frag.out b/Test/baseResults/link.vk.differentPC.0.0.frag.out
new file mode 100755
index 0000000..d7cfd22
--- /dev/null
+++ b/Test/baseResults/link.vk.differentPC.0.0.frag.out
@@ -0,0 +1,95 @@
+link.vk.differentPC.0.0.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp highp 4-component vector of float)
+0:17        'color' (layout( location=0) out highp 4-component vector of float)
+0:17        add ( temp highp 4-component vector of float)
+0:17          color: direct index for structure (layout( column_major std430 offset=0) uniform highp 4-component vector of float)
+0:17            'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:17            Constant:
+0:17              0 (const int)
+0:17          vector-scale ( temp highp 4-component vector of float)
+0:17            Function Call: getColor2( ( global highp 4-component vector of float)
+0:17            Function Call: getScale( ( global highp float)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+link.vk.differentPC.0.1.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        color2: direct index for structure (layout( column_major std430 offset=16) uniform highp 4-component vector of float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            1 (const int)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+link.vk.differentPC.0.2.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: getScale( ( global highp float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        scale2: direct index for structure (layout( column_major std430 offset=32) uniform highp float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale2})
+0:13          Constant:
+0:13            2 (const int)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale2})
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Types must match:
+    uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale2}"
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp highp 4-component vector of float)
+0:17        'color' (layout( location=0) out highp 4-component vector of float)
+0:17        add ( temp highp 4-component vector of float)
+0:17          color: direct index for structure (layout( column_major std430 offset=0) uniform highp 4-component vector of float)
+0:17            'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:17            Constant:
+0:17              0 (const int)
+0:17          vector-scale ( temp highp 4-component vector of float)
+0:17            Function Call: getColor2( ( global highp 4-component vector of float)
+0:17            Function Call: getScale( ( global highp float)
+0:11  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        color2: direct index for structure (layout( column_major std430 offset=16) uniform highp 4-component vector of float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            1 (const int)
+0:11  Function Definition: getScale( ( global highp float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        scale2: direct index for structure (layout( column_major std430 offset=32) uniform highp float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale2})
+0:13          Constant:
+0:13            2 (const int)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+Validation failed
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/link.vk.differentPC.1.0.frag.out b/Test/baseResults/link.vk.differentPC.1.0.frag.out
new file mode 100755
index 0000000..632f18b
--- /dev/null
+++ b/Test/baseResults/link.vk.differentPC.1.0.frag.out
@@ -0,0 +1,97 @@
+link.vk.differentPC.1.0.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: getScale( ( global highp float)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      Branch: Return with expression
+0:14        scale: direct index for structure (layout( column_major std430 offset=32) uniform highp float)
+0:14          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2})
+0:14          Constant:
+0:14            2 (const int)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2})
+
+link.vk.differentPC.1.1.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        color2: direct index for structure (layout( column_major std430 offset=16) uniform highp 4-component vector of float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            1 (const int)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+link.vk.differentPC.1.2.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp highp 4-component vector of float)
+0:17        'color' (layout( location=0) out highp 4-component vector of float)
+0:17        add ( temp highp 4-component vector of float)
+0:17          color: direct index for structure (layout( column_major std430 offset=0) uniform highp 4-component vector of float)
+0:17            'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:17            Constant:
+0:17              0 (const int)
+0:17          vector-scale ( temp highp 4-component vector of float)
+0:17            Function Call: getColor2( ( global highp 4-component vector of float)
+0:17            Function Call: getScale( ( global highp float)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: Types must match:
+    uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}"
+ERROR: Linking fragment stage: Types must match:
+    uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}"
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: getScale( ( global highp float)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      Branch: Return with expression
+0:14        scale: direct index for structure (layout( column_major std430 offset=32) uniform highp float)
+0:14          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2})
+0:14          Constant:
+0:14            2 (const int)
+0:11  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        color2: direct index for structure (layout( column_major std430 offset=16) uniform highp 4-component vector of float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            1 (const int)
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp highp 4-component vector of float)
+0:17        'color' (layout( location=0) out highp 4-component vector of float)
+0:17        add ( temp highp 4-component vector of float)
+0:17          color: direct index for structure (layout( column_major std430 offset=0) uniform highp 4-component vector of float)
+0:17            'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:17            Constant:
+0:17              0 (const int)
+0:17          vector-scale ( temp highp 4-component vector of float)
+0:17            Function Call: getColor2( ( global highp 4-component vector of float)
+0:17            Function Call: getScale( ( global highp float)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2})
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+
+Validation failed
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/link.vk.matchingPC.0.0.frag.out b/Test/baseResults/link.vk.matchingPC.0.0.frag.out
new file mode 100755
index 0000000..1d6875a
--- /dev/null
+++ b/Test/baseResults/link.vk.matchingPC.0.0.frag.out
@@ -0,0 +1,155 @@
+link.vk.matchingPC.0.0.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp highp 4-component vector of float)
+0:17        'color' (layout( location=0) out highp 4-component vector of float)
+0:17        add ( temp highp 4-component vector of float)
+0:17          color: direct index for structure (layout( column_major std430 offset=0) uniform highp 4-component vector of float)
+0:17            'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:17            Constant:
+0:17              0 (const int)
+0:17          vector-scale ( temp highp 4-component vector of float)
+0:17            Function Call: getColor2( ( global highp 4-component vector of float)
+0:17            Function Call: getScale( ( global highp float)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+link.vk.matchingPC.0.1.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        color2: direct index for structure (layout( column_major std430 offset=16) uniform highp 4-component vector of float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            1 (const int)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+link.vk.matchingPC.0.2.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:11  Function Definition: getScale( ( global highp float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        scale: direct index for structure (layout( column_major std430 offset=32) uniform highp float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            2 (const int)
+0:?   Linker Objects
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:17    Sequence
+0:17      move second child to first child ( temp highp 4-component vector of float)
+0:17        'color' (layout( location=0) out highp 4-component vector of float)
+0:17        add ( temp highp 4-component vector of float)
+0:17          color: direct index for structure (layout( column_major std430 offset=0) uniform highp 4-component vector of float)
+0:17            'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:17            Constant:
+0:17              0 (const int)
+0:17          vector-scale ( temp highp 4-component vector of float)
+0:17            Function Call: getColor2( ( global highp 4-component vector of float)
+0:17            Function Call: getScale( ( global highp float)
+0:11  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        color2: direct index for structure (layout( column_major std430 offset=16) uniform highp 4-component vector of float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            1 (const int)
+0:11  Function Definition: getScale( ( global highp float)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      Branch: Return with expression
+0:13        scale: direct index for structure (layout( column_major std430 offset=32) uniform highp float)
+0:13          'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+0:13          Constant:
+0:13            2 (const int)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out highp 4-component vector of float)
+0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
+
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 39
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 15
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "getColor2("
+                              Name 12  "getScale("
+                              Name 15  "color"
+                              Name 16  "PushConstantBlock"
+                              MemberName 16(PushConstantBlock) 0  "color"
+                              MemberName 16(PushConstantBlock) 1  "color2"
+                              MemberName 16(PushConstantBlock) 2  "scale"
+                              Name 18  "uPC"
+                              Decorate 15(color) Location 0
+                              MemberDecorate 16(PushConstantBlock) 0 Offset 0
+                              MemberDecorate 16(PushConstantBlock) 1 Offset 16
+                              MemberDecorate 16(PushConstantBlock) 2 Offset 32
+                              Decorate 16(PushConstantBlock) Block
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeFunction 6(float)
+              14:             TypePointer Output 7(fvec4)
+       15(color):     14(ptr) Variable Output
+16(PushConstantBlock):             TypeStruct 7(fvec4) 7(fvec4) 6(float)
+              17:             TypePointer PushConstant 16(PushConstantBlock)
+         18(uPC):     17(ptr) Variable PushConstant
+              19:             TypeInt 32 1
+              20:     19(int) Constant 0
+              21:             TypePointer PushConstant 7(fvec4)
+              28:     19(int) Constant 1
+              33:     19(int) Constant 2
+              34:             TypePointer PushConstant 6(float)
+         4(main):           2 Function None 3
+               5:             Label
+              22:     21(ptr) AccessChain 18(uPC) 20
+              23:    7(fvec4) Load 22
+              24:    7(fvec4) FunctionCall 9(getColor2()
+              25:    6(float) FunctionCall 12(getScale()
+              26:    7(fvec4) VectorTimesScalar 24 25
+              27:    7(fvec4) FAdd 23 26
+                              Store 15(color) 27
+                              Return
+                              FunctionEnd
+   9(getColor2():    7(fvec4) Function None 8
+              10:             Label
+              29:     21(ptr) AccessChain 18(uPC) 28
+              30:    7(fvec4) Load 29
+                              ReturnValue 30
+                              FunctionEnd
+   12(getScale():    6(float) Function None 11
+              13:             Label
+              35:     34(ptr) AccessChain 18(uPC) 33
+              36:    6(float) Load 35
+                              ReturnValue 36
+                              FunctionEnd
diff --git a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
new file mode 100755
index 0000000..6440a3b
--- /dev/null
+++ b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
@@ -0,0 +1,321 @@
+link.vk.multiBlocksValid.0.0.vert
+Shader version: 430
+0:? Sequence
+0:43  Function Definition: main( ( global void)
+0:43    Function Parameters: 
+0:45    Sequence
+0:45      move second child to first child ( temp highp 4-component vector of float)
+0:45        'oColor' ( smooth out highp 4-component vector of float)
+0:45        component-wise multiply ( temp highp 4-component vector of float)
+0:45          component-wise multiply ( temp highp 4-component vector of float)
+0:45            color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:45              'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:45              Constant:
+0:45                0 (const int)
+0:45            Function Call: getColor2( ( global highp 4-component vector of float)
+0:45          c: direct index for structure (layout( column_major std430 offset=0) buffer highp 4-component vector of float)
+0:45            'uColorBuf' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4-component vector of float c})
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp highp 4-component vector of float)
+0:46        v1: direct index for structure ( out highp 4-component vector of float)
+0:46          'oV' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:46          Constant:
+0:46            0 (const int)
+0:46        color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:46          'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:46          Constant:
+0:46            0 (const int)
+0:48      move second child to first child ( temp highp 4-component vector of float)
+0:48        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:48          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:48          Constant:
+0:48            0 (const uint)
+0:48        matrix-times-vector ( temp highp 4-component vector of float)
+0:48          uProj: direct index for structure (layout( column_major std140 offset=0) uniform highp 4X4 matrix of float)
+0:48            'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:48            Constant:
+0:48              0 (const int)
+0:48          Function Call: getWorld( ( global highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:?     'oV' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:?     'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:?     'uBuf' (layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p})
+0:?     'uColorBuf' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4-component vector of float c})
+0:?     'oColor' ( smooth out highp 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
+
+link.vk.multiBlocksValid.0.1.vert
+Shader version: 430
+0:? Sequence
+0:36  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:36    Function Parameters: 
+0:38    Sequence
+0:38      Branch: Return with expression
+0:38        color2: direct index for structure (layout( column_major std140 offset=32) uniform highp 4-component vector of float)
+0:38          'uColor' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:38          Constant:
+0:38            2 (const int)
+0:41  Function Definition: getWorld( ( global highp 4-component vector of float)
+0:41    Function Parameters: 
+0:43    Sequence
+0:43      move second child to first child ( temp highp 4-component vector of float)
+0:43        v1: direct index for structure ( out highp 4-component vector of float)
+0:43          'anon@0' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:43          Constant:
+0:43            0 (const uint)
+0:43        Constant:
+0:43          1.000000
+0:43          1.000000
+0:43          1.000000
+0:43          1.000000
+0:44      Branch: Return with expression
+0:44        matrix-times-vector ( temp highp 4-component vector of float)
+0:44          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform highp 4X4 matrix of float)
+0:44            'uMatrix' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:44            Constant:
+0:44              1 (const int)
+0:44          'P' ( in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'uColor' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:?     'uBuffer' (layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p})
+0:?     'uMatrix' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:?     'anon@0' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:?     'P' ( in highp 4-component vector of float)
+
+
+Linked vertex stage:
+
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    uC: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}" versus uColor: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}"
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    uBuf: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}" versus uBuffer: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}"
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    uM: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}" versus uMatrix: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}"
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    oV: " out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2}" versus anon@0: " out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2}"
+
+Shader version: 430
+0:? Sequence
+0:43  Function Definition: main( ( global void)
+0:43    Function Parameters: 
+0:45    Sequence
+0:45      move second child to first child ( temp highp 4-component vector of float)
+0:45        'oColor' ( smooth out highp 4-component vector of float)
+0:45        component-wise multiply ( temp highp 4-component vector of float)
+0:45          component-wise multiply ( temp highp 4-component vector of float)
+0:45            color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:45              'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:45              Constant:
+0:45                0 (const int)
+0:45            Function Call: getColor2( ( global highp 4-component vector of float)
+0:45          c: direct index for structure (layout( column_major std430 offset=0) buffer highp 4-component vector of float)
+0:45            'uColorBuf' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4-component vector of float c})
+0:45            Constant:
+0:45              0 (const int)
+0:46      move second child to first child ( temp highp 4-component vector of float)
+0:46        v1: direct index for structure ( out highp 4-component vector of float)
+0:46          'oV' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:46          Constant:
+0:46            0 (const int)
+0:46        color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:46          'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:46          Constant:
+0:46            0 (const int)
+0:48      move second child to first child ( temp highp 4-component vector of float)
+0:48        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:48          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:48          Constant:
+0:48            0 (const uint)
+0:48        matrix-times-vector ( temp highp 4-component vector of float)
+0:48          uProj: direct index for structure (layout( column_major std140 offset=0) uniform highp 4X4 matrix of float)
+0:48            'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:48            Constant:
+0:48              0 (const int)
+0:48          Function Call: getWorld( ( global highp 4-component vector of float)
+0:36  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:36    Function Parameters: 
+0:38    Sequence
+0:38      Branch: Return with expression
+0:38        color2: direct index for structure (layout( column_major std140 offset=32) uniform highp 4-component vector of float)
+0:38          'uColor' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:38          Constant:
+0:38            2 (const int)
+0:41  Function Definition: getWorld( ( global highp 4-component vector of float)
+0:41    Function Parameters: 
+0:43    Sequence
+0:43      move second child to first child ( temp highp 4-component vector of float)
+0:43        v1: direct index for structure ( out highp 4-component vector of float)
+0:43          'anon@0' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:43          Constant:
+0:43            0 (const uint)
+0:43        Constant:
+0:43          1.000000
+0:43          1.000000
+0:43          1.000000
+0:43          1.000000
+0:44      Branch: Return with expression
+0:44        matrix-times-vector ( temp highp 4-component vector of float)
+0:44          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform highp 4X4 matrix of float)
+0:44            'uMatrix' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:44            Constant:
+0:44              1 (const int)
+0:44          'P' ( in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:?     'oV' ( out block{ out highp 4-component vector of float v1,  out highp 4-component vector of float v2})
+0:?     'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:?     'uBuf' (layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p})
+0:?     'uColorBuf' (layout( binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4-component vector of float c})
+0:?     'oColor' ( smooth out highp 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'P' ( in highp 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 73
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 14 34 42 65
+                              Source GLSL 430
+                              Name 4  "main"
+                              Name 9  "getColor2("
+                              Name 11  "getWorld("
+                              Name 14  "oColor"
+                              Name 16  "ColorBlock"
+                              MemberName 16(ColorBlock) 0  "color1"
+                              MemberName 16(ColorBlock) 1  "b"
+                              MemberName 16(ColorBlock) 2  "color2"
+                              MemberName 16(ColorBlock) 3  "color3"
+                              Name 18  "uC"
+                              Name 26  "SecondaryColorBlock"
+                              MemberName 26(SecondaryColorBlock) 0  "c"
+                              Name 28  "uColorBuf"
+                              Name 32  "Vertex"
+                              MemberName 32(Vertex) 0  "v1"
+                              MemberName 32(Vertex) 1  "v2"
+                              Name 34  "oV"
+                              Name 40  "gl_PerVertex"
+                              MemberName 40(gl_PerVertex) 0  "gl_Position"
+                              MemberName 40(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 40(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 42  ""
+                              Name 44  "MatrixBlock"
+                              MemberName 44(MatrixBlock) 0  "uProj"
+                              MemberName 44(MatrixBlock) 1  "uWorld"
+                              Name 46  "uM"
+                              Name 65  "P"
+                              Name 70  "BufferBlock"
+                              MemberName 70(BufferBlock) 0  "p"
+                              Name 72  "uBuf"
+                              MemberDecorate 16(ColorBlock) 0 Offset 0
+                              MemberDecorate 16(ColorBlock) 1 Offset 16
+                              MemberDecorate 16(ColorBlock) 2 Offset 32
+                              MemberDecorate 16(ColorBlock) 3 Offset 48
+                              Decorate 16(ColorBlock) Block
+                              Decorate 18(uC) DescriptorSet 0
+                              Decorate 18(uC) Binding 1
+                              MemberDecorate 26(SecondaryColorBlock) 0 Offset 0
+                              Decorate 26(SecondaryColorBlock) BufferBlock
+                              Decorate 28(uColorBuf) DescriptorSet 0
+                              Decorate 28(uColorBuf) Binding 0
+                              Decorate 32(Vertex) Block
+                              MemberDecorate 40(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 40(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 40(gl_PerVertex) 2 BuiltIn ClipDistance
+                              Decorate 40(gl_PerVertex) Block
+                              MemberDecorate 44(MatrixBlock) 0 ColMajor
+                              MemberDecorate 44(MatrixBlock) 0 Offset 0
+                              MemberDecorate 44(MatrixBlock) 0 MatrixStride 16
+                              MemberDecorate 44(MatrixBlock) 1 ColMajor
+                              MemberDecorate 44(MatrixBlock) 1 Offset 64
+                              MemberDecorate 44(MatrixBlock) 1 MatrixStride 16
+                              Decorate 44(MatrixBlock) Block
+                              Decorate 46(uM) DescriptorSet 0
+                              Decorate 46(uM) Binding 0
+                              MemberDecorate 70(BufferBlock) 0 ColMajor
+                              MemberDecorate 70(BufferBlock) 0 Offset 0
+                              MemberDecorate 70(BufferBlock) 0 MatrixStride 16
+                              Decorate 70(BufferBlock) BufferBlock
+                              Decorate 72(uBuf) DescriptorSet 0
+                              Decorate 72(uBuf) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              13:             TypePointer Output 7(fvec4)
+      14(oColor):     13(ptr) Variable Output
+              15:             TypeInt 32 0
+  16(ColorBlock):             TypeStruct 7(fvec4) 15(int) 7(fvec4) 7(fvec4)
+              17:             TypePointer Uniform 16(ColorBlock)
+          18(uC):     17(ptr) Variable Uniform
+              19:             TypeInt 32 1
+              20:     19(int) Constant 0
+              21:             TypePointer Uniform 7(fvec4)
+26(SecondaryColorBlock):             TypeStruct 7(fvec4)
+              27:             TypePointer Uniform 26(SecondaryColorBlock)
+   28(uColorBuf):     27(ptr) Variable Uniform
+      32(Vertex):             TypeStruct 7(fvec4) 7(fvec4)
+              33:             TypePointer Output 32(Vertex)
+          34(oV):     33(ptr) Variable Output
+              38:     15(int) Constant 1
+              39:             TypeArray 6(float) 38
+40(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 39
+              41:             TypePointer Output 40(gl_PerVertex)
+              42:     41(ptr) Variable Output
+              43:             TypeMatrix 7(fvec4) 4
+ 44(MatrixBlock):             TypeStruct 43 43
+              45:             TypePointer Uniform 44(MatrixBlock)
+          46(uM):     45(ptr) Variable Uniform
+              47:             TypePointer Uniform 43
+              53:     19(int) Constant 2
+              58:    6(float) Constant 1065353216
+              59:    7(fvec4) ConstantComposite 58 58 58 58
+              61:     19(int) Constant 1
+              64:             TypePointer Input 7(fvec4)
+           65(P):     64(ptr) Variable Input
+ 70(BufferBlock):             TypeStruct 43
+              71:             TypePointer Uniform 70(BufferBlock)
+        72(uBuf):     71(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+              22:     21(ptr) AccessChain 18(uC) 20
+              23:    7(fvec4) Load 22
+              24:    7(fvec4) FunctionCall 9(getColor2()
+              25:    7(fvec4) FMul 23 24
+              29:     21(ptr) AccessChain 28(uColorBuf) 20
+              30:    7(fvec4) Load 29
+              31:    7(fvec4) FMul 25 30
+                              Store 14(oColor) 31
+              35:     21(ptr) AccessChain 18(uC) 20
+              36:    7(fvec4) Load 35
+              37:     13(ptr) AccessChain 34(oV) 20
+                              Store 37 36
+              48:     47(ptr) AccessChain 46(uM) 20
+              49:          43 Load 48
+              50:    7(fvec4) FunctionCall 11(getWorld()
+              51:    7(fvec4) MatrixTimesVector 49 50
+              52:     13(ptr) AccessChain 42 20
+                              Store 52 51
+                              Return
+                              FunctionEnd
+   9(getColor2():    7(fvec4) Function None 8
+              10:             Label
+              54:     21(ptr) AccessChain 18(uC) 53
+              55:    7(fvec4) Load 54
+                              ReturnValue 55
+                              FunctionEnd
+   11(getWorld():    7(fvec4) Function None 8
+              12:             Label
+              60:     13(ptr) AccessChain 34(oV) 20
+                              Store 60 59
+              62:     47(ptr) AccessChain 46(uM) 61
+              63:          43 Load 62
+              66:    7(fvec4) Load 65(P)
+              67:    7(fvec4) MatrixTimesVector 63 66
+                              ReturnValue 67
+                              FunctionEnd
diff --git a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
new file mode 100755
index 0000000..413da7e
--- /dev/null
+++ b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
@@ -0,0 +1,451 @@
+link.vk.multiBlocksValid.1.0.geom
+Shader version: 430
+invocations = -1
+max_vertices = 3
+input primitive = triangles
+output primitive = triangle_strip
+0:? Sequence
+0:48  Function Definition: main( ( global void)
+0:48    Function Parameters: 
+0:50    Sequence
+0:50      move second child to first child ( temp highp 4-component vector of float)
+0:50        'oColor' (layout( stream=0) out highp 4-component vector of float)
+0:50        component-wise multiply ( temp highp 4-component vector of float)
+0:50          color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:50            'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:50            Constant:
+0:50              0 (const int)
+0:50          Function Call: getColor2( ( global highp 4-component vector of float)
+0:52      move second child to first child ( temp highp float)
+0:52        'globalF' ( global highp float)
+0:52        Constant:
+0:52          1.000000
+0:54      Sequence
+0:54        Sequence
+0:54          move second child to first child ( temp highp int)
+0:54            'i' ( temp highp int)
+0:54            Constant:
+0:54              0 (const int)
+0:54        Loop with condition tested first
+0:54          Loop Condition
+0:54          Compare Less Than ( temp bool)
+0:54            'i' ( temp highp int)
+0:54            Constant:
+0:54              3 (const int)
+0:54          Loop Body
+0:56          Sequence
+0:56            move second child to first child ( temp highp 4-component vector of float)
+0:56              gl_Position: direct index for structure (layout( stream=0) gl_Position highp 4-component vector of float Position)
+0:56                'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance})
+0:56                Constant:
+0:56                  0 (const uint)
+0:56              matrix-times-vector ( temp highp 4-component vector of float)
+0:56                uProj: direct index for structure (layout( column_major std140 offset=0) uniform highp 4X4 matrix of float)
+0:56                  'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:56                  Constant:
+0:56                    0 (const int)
+0:56                Function Call: getWorld(i1; ( global highp 4-component vector of float)
+0:56                  'i' ( temp highp int)
+0:57            move second child to first child ( temp highp 4-component vector of float)
+0:57              val1: direct index for structure (layout( stream=0) out highp 4-component vector of float)
+0:57                'oV' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:57                Constant:
+0:57                  0 (const int)
+0:57              add ( temp highp 4-component vector of float)
+0:57                color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:57                  'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:57                  Constant:
+0:57                    0 (const int)
+0:57                vector-scale ( temp highp 4-component vector of float)
+0:57                  v2: direct index for structure ( in highp 4-component vector of float)
+0:57                    indirect index ( temp block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:57                      'iV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:57                      'i' ( temp highp int)
+0:57                    Constant:
+0:57                      1 (const int)
+0:57                  'globalF' ( global highp float)
+0:58            EmitVertex ( global void)
+0:54          Loop Terminal Expression
+0:54          Post-Increment ( temp highp int)
+0:54            'i' ( temp highp int)
+0:61      EndPrimitive ( global void)
+0:?   Linker Objects
+0:?     'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:?     'iV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:?     'oV' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:?     'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:?     'uBuf' (layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p})
+0:?     'oColor' (layout( stream=0) out highp 4-component vector of float)
+0:?     'globalF' ( global highp float)
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance})
+
+link.vk.multiBlocksValid.1.1.geom
+Shader version: 430
+invocations = -1
+max_vertices = 3
+input primitive = triangles
+output primitive = triangle_strip
+0:? Sequence
+0:44  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:44    Function Parameters: 
+0:46    Sequence
+0:46      Branch: Return with expression
+0:46        color2: direct index for structure (layout( column_major std140 offset=32) uniform highp 4-component vector of float)
+0:46          'uColor' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:46          Constant:
+0:46            2 (const int)
+0:49  Function Definition: getWorld(i1; ( global highp 4-component vector of float)
+0:49    Function Parameters: 
+0:49      'i' ( in highp int)
+0:51    Sequence
+0:51      move second child to first child ( temp highp 4-component vector of float)
+0:51        val1: direct index for structure (layout( stream=0) out highp 4-component vector of float)
+0:51          'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:51          Constant:
+0:51            0 (const uint)
+0:51        Constant:
+0:51          1.000000
+0:51          1.000000
+0:51          1.000000
+0:51          1.000000
+0:52      Branch: Return with expression
+0:52        matrix-times-vector ( temp highp 4-component vector of float)
+0:52          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform highp 4X4 matrix of float)
+0:52            'uMatrix' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:52            Constant:
+0:52              1 (const int)
+0:52          v1: direct index for structure ( in highp 4-component vector of float)
+0:52            indirect index ( temp block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:52              'iVV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:52              'i' ( in highp int)
+0:52            Constant:
+0:52              0 (const int)
+0:?   Linker Objects
+0:?     'uColor' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:?     'uBuffer' (layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p})
+0:?     'uMatrix' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:?     'iVV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:?     'P' ( in 3-element array of highp 4-component vector of float)
+
+
+Linked geometry stage:
+
+WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
+    uC: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}" versus uColor: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}"
+WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
+    uBuf: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}" versus uBuffer: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}"
+WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
+    uM: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}" versus uMatrix: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}"
+WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
+    oV: "layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1}" versus anon@0: "layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1}"
+WARNING: Linking geometry stage: Matched shader interfaces are using different instance names.
+    iV: " in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2}" versus iVV: " in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2}"
+
+Shader version: 430
+invocations = 1
+max_vertices = 3
+input primitive = triangles
+output primitive = triangle_strip
+0:? Sequence
+0:48  Function Definition: main( ( global void)
+0:48    Function Parameters: 
+0:50    Sequence
+0:50      move second child to first child ( temp highp 4-component vector of float)
+0:50        'oColor' (layout( stream=0) out highp 4-component vector of float)
+0:50        component-wise multiply ( temp highp 4-component vector of float)
+0:50          color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:50            'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:50            Constant:
+0:50              0 (const int)
+0:50          Function Call: getColor2( ( global highp 4-component vector of float)
+0:52      move second child to first child ( temp highp float)
+0:52        'globalF' ( global highp float)
+0:52        Constant:
+0:52          1.000000
+0:54      Sequence
+0:54        Sequence
+0:54          move second child to first child ( temp highp int)
+0:54            'i' ( temp highp int)
+0:54            Constant:
+0:54              0 (const int)
+0:54        Loop with condition tested first
+0:54          Loop Condition
+0:54          Compare Less Than ( temp bool)
+0:54            'i' ( temp highp int)
+0:54            Constant:
+0:54              3 (const int)
+0:54          Loop Body
+0:56          Sequence
+0:56            move second child to first child ( temp highp 4-component vector of float)
+0:56              gl_Position: direct index for structure (layout( stream=0) gl_Position highp 4-component vector of float Position)
+0:56                'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance})
+0:56                Constant:
+0:56                  0 (const uint)
+0:56              matrix-times-vector ( temp highp 4-component vector of float)
+0:56                uProj: direct index for structure (layout( column_major std140 offset=0) uniform highp 4X4 matrix of float)
+0:56                  'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:56                  Constant:
+0:56                    0 (const int)
+0:56                Function Call: getWorld(i1; ( global highp 4-component vector of float)
+0:56                  'i' ( temp highp int)
+0:57            move second child to first child ( temp highp 4-component vector of float)
+0:57              val1: direct index for structure (layout( stream=0) out highp 4-component vector of float)
+0:57                'oV' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:57                Constant:
+0:57                  0 (const int)
+0:57              add ( temp highp 4-component vector of float)
+0:57                color1: direct index for structure (layout( column_major std140 offset=0) uniform highp 4-component vector of float)
+0:57                  'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:57                  Constant:
+0:57                    0 (const int)
+0:57                vector-scale ( temp highp 4-component vector of float)
+0:57                  v2: direct index for structure ( in highp 4-component vector of float)
+0:57                    indirect index ( temp block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:57                      'iV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:57                      'i' ( temp highp int)
+0:57                    Constant:
+0:57                      1 (const int)
+0:57                  'globalF' ( global highp float)
+0:58            EmitVertex ( global void)
+0:54          Loop Terminal Expression
+0:54          Post-Increment ( temp highp int)
+0:54            'i' ( temp highp int)
+0:61      EndPrimitive ( global void)
+0:44  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:44    Function Parameters: 
+0:46    Sequence
+0:46      Branch: Return with expression
+0:46        color2: direct index for structure (layout( column_major std140 offset=32) uniform highp 4-component vector of float)
+0:46          'uColor' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:46          Constant:
+0:46            2 (const int)
+0:49  Function Definition: getWorld(i1; ( global highp 4-component vector of float)
+0:49    Function Parameters: 
+0:49      'i' ( in highp int)
+0:51    Sequence
+0:51      move second child to first child ( temp highp 4-component vector of float)
+0:51        val1: direct index for structure (layout( stream=0) out highp 4-component vector of float)
+0:51          'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:51          Constant:
+0:51            0 (const uint)
+0:51        Constant:
+0:51          1.000000
+0:51          1.000000
+0:51          1.000000
+0:51          1.000000
+0:52      Branch: Return with expression
+0:52        matrix-times-vector ( temp highp 4-component vector of float)
+0:52          uWorld: direct index for structure (layout( column_major std140 offset=64) uniform highp 4X4 matrix of float)
+0:52            'uMatrix' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:52            Constant:
+0:52              1 (const int)
+0:52          v1: direct index for structure ( in highp 4-component vector of float)
+0:52            indirect index ( temp block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:52              'iVV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:52              'i' ( in highp int)
+0:52            Constant:
+0:52              0 (const int)
+0:?   Linker Objects
+0:?     'uM' (layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld})
+0:?     'iV' ( in 3-element array of block{ in highp 4-component vector of float v1,  in highp 4-component vector of float v2})
+0:?     'oV' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1})
+0:?     'uC' (layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3})
+0:?     'uBuf' (layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p})
+0:?     'oColor' (layout( stream=0) out highp 4-component vector of float)
+0:?     'globalF' ( global highp float)
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance})
+0:?     'P' ( in 3-element array of highp 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 101
+
+                              Capability Geometry
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Geometry 4  "main" 18 46 61 68 100
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 Invocations 1
+                              ExecutionMode 4 OutputTriangleStrip
+                              ExecutionMode 4 OutputVertices 3
+                              Source GLSL 430
+                              Name 4  "main"
+                              Name 9  "getColor2("
+                              Name 15  "getWorld(i1;"
+                              Name 14  "i"
+                              Name 18  "oColor"
+                              Name 20  "ColorBlock"
+                              MemberName 20(ColorBlock) 0  "color1"
+                              MemberName 20(ColorBlock) 1  "b"
+                              MemberName 20(ColorBlock) 2  "color2"
+                              MemberName 20(ColorBlock) 3  "color3"
+                              Name 22  "uC"
+                              Name 30  "globalF"
+                              Name 32  "i"
+                              Name 44  "gl_PerVertex"
+                              MemberName 44(gl_PerVertex) 0  "gl_Position"
+                              MemberName 44(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 44(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 46  ""
+                              Name 48  "MatrixBlock"
+                              MemberName 48(MatrixBlock) 0  "uProj"
+                              MemberName 48(MatrixBlock) 1  "uWorld"
+                              Name 50  "uM"
+                              Name 54  "param"
+                              Name 59  "Vertex"
+                              MemberName 59(Vertex) 0  "val1"
+                              Name 61  "oV"
+                              Name 64  "Vertex"
+                              MemberName 64(Vertex) 0  "v1"
+                              MemberName 64(Vertex) 1  "v2"
+                              Name 68  "iV"
+                              Name 95  "BufferBlock"
+                              MemberName 95(BufferBlock) 0  "p"
+                              Name 97  "uBuf"
+                              Name 100  "P"
+                              MemberDecorate 20(ColorBlock) 0 Offset 0
+                              MemberDecorate 20(ColorBlock) 1 Offset 16
+                              MemberDecorate 20(ColorBlock) 2 Offset 32
+                              MemberDecorate 20(ColorBlock) 3 Offset 48
+                              Decorate 20(ColorBlock) Block
+                              Decorate 22(uC) DescriptorSet 0
+                              Decorate 22(uC) Binding 1
+                              MemberDecorate 44(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 44(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 44(gl_PerVertex) 2 BuiltIn ClipDistance
+                              Decorate 44(gl_PerVertex) Block
+                              MemberDecorate 48(MatrixBlock) 0 ColMajor
+                              MemberDecorate 48(MatrixBlock) 0 Offset 0
+                              MemberDecorate 48(MatrixBlock) 0 MatrixStride 16
+                              MemberDecorate 48(MatrixBlock) 1 ColMajor
+                              MemberDecorate 48(MatrixBlock) 1 Offset 64
+                              MemberDecorate 48(MatrixBlock) 1 MatrixStride 16
+                              Decorate 48(MatrixBlock) Block
+                              Decorate 50(uM) DescriptorSet 0
+                              Decorate 50(uM) Binding 0
+                              Decorate 59(Vertex) Block
+                              Decorate 64(Vertex) Block
+                              MemberDecorate 95(BufferBlock) 0 ColMajor
+                              MemberDecorate 95(BufferBlock) 0 Offset 0
+                              MemberDecorate 95(BufferBlock) 0 MatrixStride 16
+                              Decorate 95(BufferBlock) BufferBlock
+                              Decorate 97(uBuf) DescriptorSet 0
+                              Decorate 97(uBuf) Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeInt 32 1
+              12:             TypePointer Function 11(int)
+              13:             TypeFunction 7(fvec4) 12(ptr)
+              17:             TypePointer Output 7(fvec4)
+      18(oColor):     17(ptr) Variable Output
+              19:             TypeInt 32 0
+  20(ColorBlock):             TypeStruct 7(fvec4) 19(int) 7(fvec4) 7(fvec4)
+              21:             TypePointer Uniform 20(ColorBlock)
+          22(uC):     21(ptr) Variable Uniform
+              23:     11(int) Constant 0
+              24:             TypePointer Uniform 7(fvec4)
+              29:             TypePointer Private 6(float)
+     30(globalF):     29(ptr) Variable Private
+              31:    6(float) Constant 1065353216
+              39:     11(int) Constant 3
+              40:             TypeBool
+              42:     19(int) Constant 1
+              43:             TypeArray 6(float) 42
+44(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 43
+              45:             TypePointer Output 44(gl_PerVertex)
+              46:     45(ptr) Variable Output
+              47:             TypeMatrix 7(fvec4) 4
+ 48(MatrixBlock):             TypeStruct 47 47
+              49:             TypePointer Uniform 48(MatrixBlock)
+          50(uM):     49(ptr) Variable Uniform
+              51:             TypePointer Uniform 47
+      59(Vertex):             TypeStruct 7(fvec4)
+              60:             TypePointer Output 59(Vertex)
+          61(oV):     60(ptr) Variable Output
+      64(Vertex):             TypeStruct 7(fvec4) 7(fvec4)
+              65:     19(int) Constant 3
+              66:             TypeArray 64(Vertex) 65
+              67:             TypePointer Input 66
+          68(iV):     67(ptr) Variable Input
+              70:     11(int) Constant 1
+              71:             TypePointer Input 7(fvec4)
+              80:     11(int) Constant 2
+              85:    7(fvec4) ConstantComposite 31 31 31 31
+ 95(BufferBlock):             TypeStruct 47
+              96:             TypePointer Uniform 95(BufferBlock)
+        97(uBuf):     96(ptr) Variable Uniform
+              98:             TypeArray 7(fvec4) 65
+              99:             TypePointer Input 98
+          100(P):     99(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+           32(i):     12(ptr) Variable Function
+       54(param):     12(ptr) Variable Function
+              25:     24(ptr) AccessChain 22(uC) 23
+              26:    7(fvec4) Load 25
+              27:    7(fvec4) FunctionCall 9(getColor2()
+              28:    7(fvec4) FMul 26 27
+                              Store 18(oColor) 28
+                              Store 30(globalF) 31
+                              Store 32(i) 23
+                              Branch 33
+              33:             Label
+                              LoopMerge 35 36 None
+                              Branch 37
+              37:             Label
+              38:     11(int) Load 32(i)
+              41:    40(bool) SLessThan 38 39
+                              BranchConditional 41 34 35
+              34:               Label
+              52:     51(ptr)   AccessChain 50(uM) 23
+              53:          47   Load 52
+              55:     11(int)   Load 32(i)
+                                Store 54(param) 55
+              56:    7(fvec4)   FunctionCall 15(getWorld(i1;) 54(param)
+              57:    7(fvec4)   MatrixTimesVector 53 56
+              58:     17(ptr)   AccessChain 46 23
+                                Store 58 57
+              62:     24(ptr)   AccessChain 22(uC) 23
+              63:    7(fvec4)   Load 62
+              69:     11(int)   Load 32(i)
+              72:     71(ptr)   AccessChain 68(iV) 69 70
+              73:    7(fvec4)   Load 72
+              74:    6(float)   Load 30(globalF)
+              75:    7(fvec4)   VectorTimesScalar 73 74
+              76:    7(fvec4)   FAdd 63 75
+              77:     17(ptr)   AccessChain 61(oV) 23
+                                Store 77 76
+                                EmitVertex
+                                Branch 36
+              36:               Label
+              78:     11(int)   Load 32(i)
+              79:     11(int)   IAdd 78 70
+                                Store 32(i) 79
+                                Branch 33
+              35:             Label
+                              EndPrimitive
+                              Return
+                              FunctionEnd
+   9(getColor2():    7(fvec4) Function None 8
+              10:             Label
+              81:     24(ptr) AccessChain 22(uC) 80
+              82:    7(fvec4) Load 81
+                              ReturnValue 82
+                              FunctionEnd
+15(getWorld(i1;):    7(fvec4) Function None 13
+           14(i):     12(ptr) FunctionParameter
+              16:             Label
+              86:     17(ptr) AccessChain 61(oV) 23
+                              Store 86 85
+              87:     51(ptr) AccessChain 50(uM) 70
+              88:          47 Load 87
+              89:     11(int) Load 14(i)
+              90:     71(ptr) AccessChain 68(iV) 89 23
+              91:    7(fvec4) Load 90
+              92:    7(fvec4) MatrixTimesVector 88 91
+                              ReturnValue 92
+                              FunctionEnd
diff --git a/Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out
new file mode 100755
index 0000000..45f6a39
--- /dev/null
+++ b/Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out
@@ -0,0 +1,111 @@
+link.vk.pcNamingInvalid.0.0.vert
+Shader version: 450
+0:? Sequence
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:18    Sequence
+0:18      move second child to first child ( temp highp 4-component vector of float)
+0:18        'oColor' ( smooth out highp 4-component vector of float)
+0:18        component-wise multiply ( temp highp 4-component vector of float)
+0:18          color1: direct index for structure (layout( column_major std430 offset=128) uniform highp 4-component vector of float)
+0:18            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:18            Constant:
+0:18              2 (const int)
+0:18          Function Call: getColor2( ( global highp 4-component vector of float)
+0:20      move second child to first child ( temp highp 4-component vector of float)
+0:20        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:20          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  out unsized 1-element array of float CullDistance gl_CullDistance})
+0:20          Constant:
+0:20            0 (const uint)
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uProj: direct index for structure (layout( column_major std430 offset=64) uniform highp 4X4 matrix of float)
+0:20            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              1 (const int)
+0:20          Function Call: getWorld( ( global highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'oColor' ( smooth out highp 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  out unsized 1-element array of float CullDistance gl_CullDistance})
+
+link.vk.pcNamingInvalid.0.1.vert
+Shader version: 450
+0:? Sequence
+0:13  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:13    Function Parameters: 
+0:15    Sequence
+0:15      Branch: Return with expression
+0:15        color2: direct index for structure (layout( column_major std430 offset=144) uniform highp 4-component vector of float)
+0:15          'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:15          Constant:
+0:15            3 (const int)
+0:18  Function Definition: getWorld( ( global highp 4-component vector of float)
+0:18    Function Parameters: 
+0:20    Sequence
+0:20      Branch: Return with expression
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uWorld: direct index for structure (layout( column_major std430 offset=0) uniform highp 4X4 matrix of float)
+0:20            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              0 (const int)
+0:20          'P' ( in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'P' ( in highp 4-component vector of float)
+
+
+Linked vertex stage:
+
+ERROR: Linking vertex stage: Only one push_constant block is allowed per stage
+
+Shader version: 450
+0:? Sequence
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:18    Sequence
+0:18      move second child to first child ( temp highp 4-component vector of float)
+0:18        'oColor' ( smooth out highp 4-component vector of float)
+0:18        component-wise multiply ( temp highp 4-component vector of float)
+0:18          color1: direct index for structure (layout( column_major std430 offset=128) uniform highp 4-component vector of float)
+0:18            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:18            Constant:
+0:18              2 (const int)
+0:18          Function Call: getColor2( ( global highp 4-component vector of float)
+0:20      move second child to first child ( temp highp 4-component vector of float)
+0:20        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:20          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  out 1-element array of float CullDistance gl_CullDistance})
+0:20          Constant:
+0:20            0 (const uint)
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uProj: direct index for structure (layout( column_major std430 offset=64) uniform highp 4X4 matrix of float)
+0:20            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              1 (const int)
+0:20          Function Call: getWorld( ( global highp 4-component vector of float)
+0:13  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:13    Function Parameters: 
+0:15    Sequence
+0:15      Branch: Return with expression
+0:15        color2: direct index for structure (layout( column_major std430 offset=144) uniform highp 4-component vector of float)
+0:15          'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:15          Constant:
+0:15            3 (const int)
+0:18  Function Definition: getWorld( ( global highp 4-component vector of float)
+0:18    Function Parameters: 
+0:20    Sequence
+0:20      Branch: Return with expression
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uWorld: direct index for structure (layout( column_major std430 offset=0) uniform highp 4X4 matrix of float)
+0:20            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              0 (const int)
+0:20          'P' ( in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'oColor' ( smooth out highp 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  out 1-element array of float CullDistance gl_CullDistance})
+0:?     'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'P' ( in highp 4-component vector of float)
+
+Validation failed
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
new file mode 100755
index 0000000..c9dba15
--- /dev/null
+++ b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
@@ -0,0 +1,206 @@
+link.vk.pcNamingValid.0.0.vert
+Shader version: 450
+0:? Sequence
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:18    Sequence
+0:18      move second child to first child ( temp highp 4-component vector of float)
+0:18        'oColor' (layout( location=0) smooth out highp 4-component vector of float)
+0:18        component-wise multiply ( temp highp 4-component vector of float)
+0:18          color1: direct index for structure (layout( column_major std430 offset=128) uniform highp 4-component vector of float)
+0:18            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:18            Constant:
+0:18              2 (const int)
+0:18          Function Call: getColor2( ( global highp 4-component vector of float)
+0:20      move second child to first child ( temp highp 4-component vector of float)
+0:20        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:20          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  out unsized 1-element array of float CullDistance gl_CullDistance})
+0:20          Constant:
+0:20            0 (const uint)
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uProj: direct index for structure (layout( column_major std430 offset=64) uniform highp 4X4 matrix of float)
+0:20            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              1 (const int)
+0:20          Function Call: getWorld( ( global highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'oColor' (layout( location=0) smooth out highp 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance,  out unsized 1-element array of float CullDistance gl_CullDistance})
+
+link.vk.pcNamingValid.0.1.vert
+Shader version: 450
+0:? Sequence
+0:13  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:13    Function Parameters: 
+0:15    Sequence
+0:15      Branch: Return with expression
+0:15        color2: direct index for structure (layout( column_major std430 offset=144) uniform highp 4-component vector of float)
+0:15          'b' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:15          Constant:
+0:15            3 (const int)
+0:18  Function Definition: getWorld( ( global highp 4-component vector of float)
+0:18    Function Parameters: 
+0:20    Sequence
+0:20      Branch: Return with expression
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uWorld: direct index for structure (layout( column_major std430 offset=0) uniform highp 4X4 matrix of float)
+0:20            'b' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              0 (const int)
+0:20          'P' (layout( location=0) in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'b' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'P' (layout( location=0) in highp 4-component vector of float)
+
+
+Linked vertex stage:
+
+WARNING: Linking vertex stage: Matched shader interfaces are using different instance names.
+    a: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2}" versus b: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2}"
+
+Shader version: 450
+0:? Sequence
+0:16  Function Definition: main( ( global void)
+0:16    Function Parameters: 
+0:18    Sequence
+0:18      move second child to first child ( temp highp 4-component vector of float)
+0:18        'oColor' (layout( location=0) smooth out highp 4-component vector of float)
+0:18        component-wise multiply ( temp highp 4-component vector of float)
+0:18          color1: direct index for structure (layout( column_major std430 offset=128) uniform highp 4-component vector of float)
+0:18            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:18            Constant:
+0:18              2 (const int)
+0:18          Function Call: getColor2( ( global highp 4-component vector of float)
+0:20      move second child to first child ( temp highp 4-component vector of float)
+0:20        gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
+0:20          'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  out 1-element array of float CullDistance gl_CullDistance})
+0:20          Constant:
+0:20            0 (const uint)
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uProj: direct index for structure (layout( column_major std430 offset=64) uniform highp 4X4 matrix of float)
+0:20            'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              1 (const int)
+0:20          Function Call: getWorld( ( global highp 4-component vector of float)
+0:13  Function Definition: getColor2( ( global highp 4-component vector of float)
+0:13    Function Parameters: 
+0:15    Sequence
+0:15      Branch: Return with expression
+0:15        color2: direct index for structure (layout( column_major std430 offset=144) uniform highp 4-component vector of float)
+0:15          'b' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:15          Constant:
+0:15            3 (const int)
+0:18  Function Definition: getWorld( ( global highp 4-component vector of float)
+0:18    Function Parameters: 
+0:20    Sequence
+0:20      Branch: Return with expression
+0:20        matrix-times-vector ( temp highp 4-component vector of float)
+0:20          uWorld: direct index for structure (layout( column_major std430 offset=0) uniform highp 4X4 matrix of float)
+0:20            'b' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:20            Constant:
+0:20              0 (const int)
+0:20          'P' (layout( location=0) in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'a' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2})
+0:?     'oColor' (layout( location=0) smooth out highp 4-component vector of float)
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance,  out 1-element array of float CullDistance gl_CullDistance})
+0:?     'P' (layout( location=0) in highp 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 53
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 14 31 48
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "getColor2("
+                              Name 11  "getWorld("
+                              Name 14  "oColor"
+                              Name 16  "PCBlock"
+                              MemberName 16(PCBlock) 0  "uWorld"
+                              MemberName 16(PCBlock) 1  "uProj"
+                              MemberName 16(PCBlock) 2  "color1"
+                              MemberName 16(PCBlock) 3  "color2"
+                              Name 18  "a"
+                              Name 29  "gl_PerVertex"
+                              MemberName 29(gl_PerVertex) 0  "gl_Position"
+                              MemberName 29(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 29(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 29(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 31  ""
+                              Name 48  "P"
+                              Decorate 14(oColor) Location 0
+                              MemberDecorate 16(PCBlock) 0 ColMajor
+                              MemberDecorate 16(PCBlock) 0 Offset 0
+                              MemberDecorate 16(PCBlock) 0 MatrixStride 16
+                              MemberDecorate 16(PCBlock) 1 ColMajor
+                              MemberDecorate 16(PCBlock) 1 Offset 64
+                              MemberDecorate 16(PCBlock) 1 MatrixStride 16
+                              MemberDecorate 16(PCBlock) 2 Offset 128
+                              MemberDecorate 16(PCBlock) 3 Offset 144
+                              Decorate 16(PCBlock) Block
+                              MemberDecorate 29(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 29(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 29(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 29(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 29(gl_PerVertex) Block
+                              Decorate 48(P) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              13:             TypePointer Output 7(fvec4)
+      14(oColor):     13(ptr) Variable Output
+              15:             TypeMatrix 7(fvec4) 4
+     16(PCBlock):             TypeStruct 15 15 7(fvec4) 7(fvec4)
+              17:             TypePointer PushConstant 16(PCBlock)
+           18(a):     17(ptr) Variable PushConstant
+              19:             TypeInt 32 1
+              20:     19(int) Constant 2
+              21:             TypePointer PushConstant 7(fvec4)
+              26:             TypeInt 32 0
+              27:     26(int) Constant 1
+              28:             TypeArray 6(float) 27
+29(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 28 28
+              30:             TypePointer Output 29(gl_PerVertex)
+              31:     30(ptr) Variable Output
+              32:     19(int) Constant 0
+              33:     19(int) Constant 1
+              34:             TypePointer PushConstant 15
+              40:     19(int) Constant 3
+              47:             TypePointer Input 7(fvec4)
+           48(P):     47(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              22:     21(ptr) AccessChain 18(a) 20
+              23:    7(fvec4) Load 22
+              24:    7(fvec4) FunctionCall 9(getColor2()
+              25:    7(fvec4) FMul 23 24
+                              Store 14(oColor) 25
+              35:     34(ptr) AccessChain 18(a) 33
+              36:          15 Load 35
+              37:    7(fvec4) FunctionCall 11(getWorld()
+              38:    7(fvec4) MatrixTimesVector 36 37
+              39:     13(ptr) AccessChain 31 32
+                              Store 39 38
+                              Return
+                              FunctionEnd
+   9(getColor2():    7(fvec4) Function None 8
+              10:             Label
+              41:     21(ptr) AccessChain 18(a) 40
+              42:    7(fvec4) Load 41
+                              ReturnValue 42
+                              FunctionEnd
+   11(getWorld():    7(fvec4) Function None 8
+              12:             Label
+              45:     34(ptr) AccessChain 18(a) 32
+              46:          15 Load 45
+              49:    7(fvec4) Load 48(P)
+              50:    7(fvec4) MatrixTimesVector 46 49
+                              ReturnValue 50
+                              FunctionEnd
diff --git a/Test/baseResults/link1.vk.frag.out b/Test/baseResults/link1.vk.frag.out
index 094a50d..94debe1 100644
--- a/Test/baseResults/link1.vk.frag.out
+++ b/Test/baseResults/link1.vk.frag.out
@@ -197,7 +197,7 @@
 0:?     's2D' (layout( binding=1) uniform highp sampler2D)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/rayQuery-allOps.Error.rgen.out b/Test/baseResults/rayQuery-allOps.Error.rgen.out
new file mode 100644
index 0000000..98101c3
--- /dev/null
+++ b/Test/baseResults/rayQuery-allOps.Error.rgen.out
@@ -0,0 +1,26 @@
+rayQuery-allOps.Error.rgen
+ERROR: 0:47: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:49: '=' :  cannot convert from ' global uint' to ' temp highp int'
+ERROR: 0:59: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global bool' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:64: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global 2-component vector of float' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:69: '' : boolean expression expected 
+ERROR: 0:74: '' : boolean expression expected 
+ERROR: 0:79: '>' :  wrong operand types: no operation '>' exists that takes a left-hand operand of type ' global 3-component vector of float' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:84: '>' :  wrong operand types: no operation '>' exists that takes a left-hand operand of type ' global 3-component vector of float' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:89: '' : boolean expression expected 
+ERROR: 0:94: '' : boolean expression expected 
+ERROR: 0:99: '' : boolean expression expected 
+ERROR: 0:127: '=' :  cannot convert from ' global uint' to ' temp highp int'
+ERROR: 0:145: '==' :  wrong operand types: no operation '==' exists that takes a left-hand operand of type ' global 2-component vector of float' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:158: '' : boolean expression expected 
+ERROR: 0:163: '' : boolean expression expected 
+ERROR: 0:168: '>' :  wrong operand types: no operation '>' exists that takes a left-hand operand of type ' global 3-component vector of float' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:173: '>' :  wrong operand types: no operation '>' exists that takes a left-hand operand of type ' global 3-component vector of float' and a right operand of type ' const int' (or there is no acceptable conversion)
+ERROR: 0:178: '' : boolean expression expected 
+ERROR: 0:183: '' : boolean expression expected 
+ERROR: 0:195: '' : boolean expression expected 
+ERROR: 0:200: '' : boolean expression expected 
+ERROR: 21 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/rayQuery-allOps.comp.out b/Test/baseResults/rayQuery-allOps.comp.out
new file mode 100644
index 0000000..2ac7cd3
--- /dev/null
+++ b/Test/baseResults/rayQuery-allOps.comp.out
@@ -0,0 +1,433 @@
+rayQuery-allOps.comp
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 258
+
+                              Capability Shader
+                              Capability RayQueryProvisionalKHR
+                              Capability RayTraversalPrimitiveCullingProvisionalKHR
+                              Extension  "SPV_KHR_ray_query"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_flags_primitive_culling"
+                              SourceExtension  "GL_EXT_ray_query"
+                              Name 4  "main"
+                              Name 6  "doSomething("
+                              Name 10  "Ray"
+                              MemberName 10(Ray) 0  "pos"
+                              MemberName 10(Ray) 1  "tmin"
+                              MemberName 10(Ray) 2  "dir"
+                              MemberName 10(Ray) 3  "tmax"
+                              Name 12  "makeRayDesc("
+                              Name 15  "Log"
+                              MemberName 15(Log) 0  "x"
+                              MemberName 15(Log) 1  "y"
+                              Name 17  ""
+                              Name 26  "ray"
+                              Name 43  "ray"
+                              Name 47  "rayQuery"
+                              Name 50  "rtas"
+                              Name 69  "candidateType"
+                              Name 78  "_mat4x3"
+                              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  ""
+                              MemberDecorate 15(Log) 0 Offset 0
+                              MemberDecorate 15(Log) 1 Offset 4
+                              Decorate 15(Log) BufferBlock
+                              Decorate 17 DescriptorSet 0
+                              Decorate 17 Binding 0
+                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 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
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 3
+         10(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
+              11:             TypeFunction 10(Ray)
+              14:             TypeInt 32 0
+         15(Log):             TypeStruct 14(int) 14(int)
+              16:             TypePointer Uniform 15(Log)
+              17:     16(ptr) Variable Uniform
+              18:             TypeInt 32 1
+              19:     18(int) Constant 0
+              20:     14(int) Constant 0
+              21:             TypePointer Uniform 14(int)
+              23:     18(int) Constant 1
+              25:             TypePointer Function 10(Ray)
+              27:    8(float) Constant 0
+              28:    9(fvec3) ConstantComposite 27 27 27
+              29:             TypePointer Function 9(fvec3)
+              31:     18(int) Constant 2
+              32:    8(float) Constant 1065353216
+              33:    9(fvec3) ConstantComposite 32 27 27
+              35:             TypePointer Function 8(float)
+              37:     18(int) Constant 3
+              38:    8(float) Constant 1176255488
+              45:             TypeRayQueryProvisionalKHR
+              46:             TypePointer Function 45
+              48:             TypeAccelerationStructureKHR
+              49:             TypePointer UniformConstant 48
+        50(rtas):     49(ptr) Variable UniformConstant
+              52:     14(int) Constant 255
+              66:             TypeBool
+              68:             TypePointer Function 14(int)
+              70:    66(bool) ConstantFalse
+              76:             TypeMatrix 9(fvec3) 4
+              77:             TypePointer Function 76
+              80:             TypeVector 8(float) 4
+              81:             TypeMatrix 80(fvec4) 3
+              82:             TypePointer Function 81
+              86:    66(bool) ConstantTrue
+              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
+         4(main):           2 Function None 3
+               5:             Label
+         43(ray):     25(ptr) Variable Function
+    47(rayQuery):     46(ptr) Variable Function
+69(candidateType):     68(ptr) Variable Function
+     78(_mat4x3):     77(ptr) Variable Function
+     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
+              44:     10(Ray) FunctionCall 12(makeRayDesc()
+                              Store 43(ray) 44
+              51:          48 Load 50(rtas)
+              53:     29(ptr) AccessChain 43(ray) 19
+              54:    9(fvec3) Load 53
+              55:     35(ptr) AccessChain 43(ray) 23
+              56:    8(float) Load 55
+              57:     29(ptr) AccessChain 43(ray) 31
+              58:    9(fvec3) Load 57
+              59:     35(ptr) AccessChain 43(ray) 37
+              60:    8(float) Load 59
+                              RayQueryInitializeKHR 47(rayQuery) 51 20 52 54 56 58 60
+                              Branch 61
+              61:             Label
+                              LoopMerge 63 64 None
+                              Branch 65
+              65:             Label
+              67:    66(bool) RayQueryProceedKHR 47(rayQuery)
+                              BranchConditional 67 62 63
+              62:               Label
+              71:     14(int)   RayQueryGetIntersectionTypeKHR 47(rayQuery) 19
+                                Store 69(candidateType) 71
+              72:     14(int)   Load 69(candidateType)
+                                SelectionMerge 75 None
+                                Switch 72 75 
+                                       case 0: 73
+                                       case 1: 74
+              73:                 Label
+                                  RayQueryTerminateKHR 47(rayQuery)
+              79:          76     RayQueryGetIntersectionObjectToWorldKHR 47(rayQuery) 19
+                                  Store 78(_mat4x3) 79
+              84:          76     Load 78(_mat4x3)
+              85:          81     Transpose 84
+                                  Store 83(_mat3x4) 85
+                                  RayQueryConfirmIntersectionKHR 47(rayQuery)
+              87:    66(bool)     RayQueryGetIntersectionFrontFaceKHR 47(rayQuery) 23
+                                  SelectionMerge 89 None
+                                  BranchConditional 87 88 89
+              88:                   Label
+              90:           2       FunctionCall 6(doSomething()
+                                    Branch 89
+              89:                 Label
+              92:   91(fvec2)     RayQueryGetIntersectionBarycentricsKHR 47(rayQuery) 23
+              93:    8(float)     CompositeExtract 92 0
+              94:    66(bool)     FOrdEqual 93 27
+                                  SelectionMerge 96 None
+                                  BranchConditional 94 95 96
+              95:                   Label
+              97:           2       FunctionCall 6(doSomething()
+                                    Branch 96
+              96:                 Label
+              98:     18(int)     RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23
+              99:    66(bool)     SGreaterThan 98 19
+                                  SelectionMerge 101 None
+                                  BranchConditional 99 100 101
+             100:                   Label
+             102:           2       FunctionCall 6(doSomething()
+                                    Branch 101
+             101:                 Label
+             103:     18(int)     RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23
+             104:    66(bool)     SGreaterThan 103 19
+                                  SelectionMerge 106 None
+                                  BranchConditional 104 105 106
+             105:                   Label
+             107:           2       FunctionCall 6(doSomething()
+                                    Branch 106
+             106:                 Label
+             108:    9(fvec3)     RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23
+             109:    8(float)     CompositeExtract 108 0
+             110:    66(bool)     FOrdGreaterThan 109 27
+                                  SelectionMerge 112 None
+                                  BranchConditional 110 111 112
+             111:                   Label
+             113:           2       FunctionCall 6(doSomething()
+                                    Branch 112
+             112:                 Label
+             114:    9(fvec3)     RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23
+             115:    8(float)     CompositeExtract 114 0
+             116:    66(bool)     FOrdGreaterThan 115 27
+                                  SelectionMerge 118 None
+                                  BranchConditional 116 117 118
+             117:                   Label
+             119:           2       FunctionCall 6(doSomething()
+                                    Branch 118
+             118:                 Label
+             120:     18(int)     RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23
+             121:    66(bool)     SGreaterThan 120 19
+                                  SelectionMerge 123 None
+                                  BranchConditional 121 122 123
+             122:                   Label
+             124:           2       FunctionCall 6(doSomething()
+                                    Branch 123
+             123:                 Label
+             125:    8(float)     RayQueryGetIntersectionTKHR 47(rayQuery) 23
+             126:    66(bool)     FOrdGreaterThan 125 27
+                                  SelectionMerge 128 None
+                                  BranchConditional 126 127 128
+             127:                   Label
+             129:           2       FunctionCall 6(doSomething()
+                                    Branch 128
+             128:                 Label
+             130:     18(int)     RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23
+             131:    66(bool)     UGreaterThan 130 20
+                                  SelectionMerge 133 None
+                                  BranchConditional 131 132 133
+             132:                   Label
+             134:           2       FunctionCall 6(doSomething()
+                                    Branch 133
+             133:                 Label
+                                  Branch 75
+              74:                 Label
+             136:          76     RayQueryGetIntersectionObjectToWorldKHR 47(rayQuery) 19
+                                  Store 78(_mat4x3) 136
+             137:          76     Load 78(_mat4x3)
+             138:          81     Transpose 137
+                                  Store 83(_mat3x4) 138
+             139:    66(bool)     RayQueryGetIntersectionCandidateAABBOpaqueKHR 47(rayQuery)
+                                  SelectionMerge 141 None
+                                  BranchConditional 139 140 141
+             140:                   Label
+             142:           2       FunctionCall 6(doSomething()
+                                    Branch 141
+             141:                 Label
+                                  Store 143(t) 144
+             145:    8(float)     Load 143(t)
+                                  RayQueryGenerateIntersectionKHR 47(rayQuery) 145
+                                  RayQueryTerminateKHR 47(rayQuery)
+                                  Branch 75
+              75:               Label
+                                Branch 64
+              64:               Label
+                                Branch 61
+              63:             Label
+             148:     35(ptr) AccessChain 83(_mat3x4) 19 20
+             149:    8(float) Load 148
+             150:     35(ptr) AccessChain 78(_mat4x3) 19 20
+             151:    8(float) Load 150
+             152:    66(bool) FOrdEqual 149 151
+                              SelectionMerge 154 None
+                              BranchConditional 152 153 154
+             153:               Label
+             155:           2   FunctionCall 6(doSomething()
+                                Branch 154
+             154:             Label
+             157:     14(int) RayQueryGetIntersectionTypeKHR 47(rayQuery) 23
+                              Store 156(committedStatus) 157
+             158:     14(int) Load 156(committedStatus)
+                              SelectionMerge 162 None
+                              Switch 158 162 
+                                     case 0: 159
+                                     case 1: 160
+                                     case 2: 161
+             159:               Label
+             163:          76   RayQueryGetIntersectionWorldToObjectKHR 47(rayQuery) 19
+                                Store 78(_mat4x3) 163
+             164:          76   Load 78(_mat4x3)
+             165:          81   Transpose 164
+                                Store 83(_mat3x4) 165
+                                Branch 162
+             160:               Label
+             167:          76   RayQueryGetIntersectionWorldToObjectKHR 47(rayQuery) 23
+                                Store 78(_mat4x3) 167
+             168:          76   Load 78(_mat4x3)
+             169:          81   Transpose 168
+                                Store 83(_mat3x4) 169
+             170:    66(bool)   RayQueryGetIntersectionFrontFaceKHR 47(rayQuery) 23
+                                SelectionMerge 172 None
+                                BranchConditional 170 171 172
+             171:                 Label
+             173:           2     FunctionCall 6(doSomething()
+                                  Branch 172
+             172:               Label
+             174:   91(fvec2)   RayQueryGetIntersectionBarycentricsKHR 47(rayQuery) 23
+             176:    8(float)   CompositeExtract 174 1
+             177:    66(bool)   FOrdEqual 176 27
+                                SelectionMerge 179 None
+                                BranchConditional 177 178 179
+             178:                 Label
+             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
+                                SelectionMerge 190 None
+                                BranchConditional 188 189 190
+             189:                 Label
+             191:           2     FunctionCall 6(doSomething()
+                                  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
+                                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
+                                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
+                              SelectionMerge 251 None
+                              BranchConditional 249 250 251
+             250:               Label
+             252:           2   FunctionCall 6(doSomething()
+                                Branch 251
+             251:             Label
+                              Return
+                              FunctionEnd
+ 6(doSomething():           2 Function None 3
+               7:             Label
+              22:     21(ptr) AccessChain 17 19
+                              Store 22 20
+              24:     21(ptr) AccessChain 17 23
+                              Store 24 20
+                              Return
+                              FunctionEnd
+12(makeRayDesc():     10(Ray) Function None 11
+              13:             Label
+         26(ray):     25(ptr) Variable Function
+              30:     29(ptr) AccessChain 26(ray) 19
+                              Store 30 28
+              34:     29(ptr) AccessChain 26(ray) 31
+                              Store 34 33
+              36:     35(ptr) AccessChain 26(ray) 23
+                              Store 36 27
+              39:     35(ptr) AccessChain 26(ray) 37
+                              Store 39 38
+              40:     10(Ray) Load 26(ray)
+                              ReturnValue 40
+                              FunctionEnd
diff --git a/Test/baseResults/rayQuery-allOps.frag.out b/Test/baseResults/rayQuery-allOps.frag.out
new file mode 100644
index 0000000..3160c2b
--- /dev/null
+++ b/Test/baseResults/rayQuery-allOps.frag.out
@@ -0,0 +1,431 @@
+rayQuery-allOps.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 257
+
+                              Capability Shader
+                              Capability RayQueryProvisionalKHR
+                              Extension  "SPV_KHR_ray_query"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_NV_ray_tracing"
+                              Name 4  "main"
+                              Name 6  "doSomething("
+                              Name 10  "Ray"
+                              MemberName 10(Ray) 0  "pos"
+                              MemberName 10(Ray) 1  "tmin"
+                              MemberName 10(Ray) 2  "dir"
+                              MemberName 10(Ray) 3  "tmax"
+                              Name 12  "makeRayDesc("
+                              Name 15  "Log"
+                              MemberName 15(Log) 0  "x"
+                              MemberName 15(Log) 1  "y"
+                              Name 17  ""
+                              Name 26  "ray"
+                              Name 43  "ray"
+                              Name 47  "rayQuery"
+                              Name 50  "rtas"
+                              Name 69  "candidateType"
+                              Name 78  "_mat4x3"
+                              Name 83  "_mat3x4"
+                              Name 143  "t"
+                              Name 156  "committedStatus"
+                              Name 240  "o"
+                              Name 242  "d"
+                              Name 252  "Ray"
+                              MemberName 252(Ray) 0  "pos"
+                              MemberName 252(Ray) 1  "tmin"
+                              MemberName 252(Ray) 2  "dir"
+                              MemberName 252(Ray) 3  "tmax"
+                              Name 254  "Rays"
+                              MemberName 254(Rays) 0  "rays"
+                              Name 256  ""
+                              MemberDecorate 15(Log) 0 Offset 0
+                              MemberDecorate 15(Log) 1 Offset 4
+                              Decorate 15(Log) BufferBlock
+                              Decorate 17 DescriptorSet 0
+                              Decorate 17 Binding 0
+                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 50(rtas) Binding 1
+                              MemberDecorate 252(Ray) 0 Offset 0
+                              MemberDecorate 252(Ray) 1 Offset 12
+                              MemberDecorate 252(Ray) 2 Offset 16
+                              MemberDecorate 252(Ray) 3 Offset 28
+                              Decorate 253 ArrayStride 32
+                              MemberDecorate 254(Rays) 0 Offset 0
+                              Decorate 254(Rays) BufferBlock
+                              Decorate 256 DescriptorSet 0
+                              Decorate 256 Binding 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 3
+         10(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
+              11:             TypeFunction 10(Ray)
+              14:             TypeInt 32 0
+         15(Log):             TypeStruct 14(int) 14(int)
+              16:             TypePointer Uniform 15(Log)
+              17:     16(ptr) Variable Uniform
+              18:             TypeInt 32 1
+              19:     18(int) Constant 0
+              20:     14(int) Constant 0
+              21:             TypePointer Uniform 14(int)
+              23:     18(int) Constant 1
+              25:             TypePointer Function 10(Ray)
+              27:    8(float) Constant 0
+              28:    9(fvec3) ConstantComposite 27 27 27
+              29:             TypePointer Function 9(fvec3)
+              31:     18(int) Constant 2
+              32:    8(float) Constant 1065353216
+              33:    9(fvec3) ConstantComposite 32 27 27
+              35:             TypePointer Function 8(float)
+              37:     18(int) Constant 3
+              38:    8(float) Constant 1176255488
+              45:             TypeRayQueryProvisionalKHR
+              46:             TypePointer Function 45
+              48:             TypeAccelerationStructureKHR
+              49:             TypePointer UniformConstant 48
+        50(rtas):     49(ptr) Variable UniformConstant
+              52:     14(int) Constant 255
+              66:             TypeBool
+              68:             TypePointer Function 14(int)
+              70:    66(bool) ConstantFalse
+              76:             TypeMatrix 9(fvec3) 4
+              77:             TypePointer Function 76
+              80:             TypeVector 8(float) 4
+              81:             TypeMatrix 80(fvec4) 3
+              82:             TypePointer Function 81
+              86:    66(bool) ConstantTrue
+              91:             TypeVector 8(float) 2
+             144:    8(float) Constant 1056964608
+             175:     14(int) Constant 1
+             198:     14(int) Constant 2
+        252(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
+             253:             TypeRuntimeArray 252(Ray)
+       254(Rays):             TypeStruct 253
+             255:             TypePointer Uniform 254(Rays)
+             256:    255(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+         43(ray):     25(ptr) Variable Function
+    47(rayQuery):     46(ptr) Variable Function
+69(candidateType):     68(ptr) Variable Function
+     78(_mat4x3):     77(ptr) Variable Function
+     83(_mat3x4):     82(ptr) Variable Function
+          143(t):     35(ptr) Variable Function
+156(committedStatus):     68(ptr) Variable Function
+          240(o):     29(ptr) Variable Function
+          242(d):     29(ptr) Variable Function
+              44:     10(Ray) FunctionCall 12(makeRayDesc()
+                              Store 43(ray) 44
+              51:          48 Load 50(rtas)
+              53:     29(ptr) AccessChain 43(ray) 19
+              54:    9(fvec3) Load 53
+              55:     35(ptr) AccessChain 43(ray) 23
+              56:    8(float) Load 55
+              57:     29(ptr) AccessChain 43(ray) 31
+              58:    9(fvec3) Load 57
+              59:     35(ptr) AccessChain 43(ray) 37
+              60:    8(float) Load 59
+                              RayQueryInitializeKHR 47(rayQuery) 51 20 52 54 56 58 60
+                              Branch 61
+              61:             Label
+                              LoopMerge 63 64 None
+                              Branch 65
+              65:             Label
+              67:    66(bool) RayQueryProceedKHR 47(rayQuery)
+                              BranchConditional 67 62 63
+              62:               Label
+              71:     14(int)   RayQueryGetIntersectionTypeKHR 47(rayQuery) 19
+                                Store 69(candidateType) 71
+              72:     14(int)   Load 69(candidateType)
+                                SelectionMerge 75 None
+                                Switch 72 75 
+                                       case 0: 73
+                                       case 1: 74
+              73:                 Label
+                                  RayQueryTerminateKHR 47(rayQuery)
+              79:          76     RayQueryGetIntersectionObjectToWorldKHR 47(rayQuery) 19
+                                  Store 78(_mat4x3) 79
+              84:          76     Load 78(_mat4x3)
+              85:          81     Transpose 84
+                                  Store 83(_mat3x4) 85
+                                  RayQueryConfirmIntersectionKHR 47(rayQuery)
+              87:    66(bool)     RayQueryGetIntersectionFrontFaceKHR 47(rayQuery) 23
+                                  SelectionMerge 89 None
+                                  BranchConditional 87 88 89
+              88:                   Label
+              90:           2       FunctionCall 6(doSomething()
+                                    Branch 89
+              89:                 Label
+              92:   91(fvec2)     RayQueryGetIntersectionBarycentricsKHR 47(rayQuery) 23
+              93:    8(float)     CompositeExtract 92 0
+              94:    66(bool)     FOrdEqual 93 27
+                                  SelectionMerge 96 None
+                                  BranchConditional 94 95 96
+              95:                   Label
+              97:           2       FunctionCall 6(doSomething()
+                                    Branch 96
+              96:                 Label
+              98:     18(int)     RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23
+              99:    66(bool)     SGreaterThan 98 19
+                                  SelectionMerge 101 None
+                                  BranchConditional 99 100 101
+             100:                   Label
+             102:           2       FunctionCall 6(doSomething()
+                                    Branch 101
+             101:                 Label
+             103:     18(int)     RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23
+             104:    66(bool)     SGreaterThan 103 19
+                                  SelectionMerge 106 None
+                                  BranchConditional 104 105 106
+             105:                   Label
+             107:           2       FunctionCall 6(doSomething()
+                                    Branch 106
+             106:                 Label
+             108:    9(fvec3)     RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23
+             109:    8(float)     CompositeExtract 108 0
+             110:    66(bool)     FOrdGreaterThan 109 27
+                                  SelectionMerge 112 None
+                                  BranchConditional 110 111 112
+             111:                   Label
+             113:           2       FunctionCall 6(doSomething()
+                                    Branch 112
+             112:                 Label
+             114:    9(fvec3)     RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23
+             115:    8(float)     CompositeExtract 114 0
+             116:    66(bool)     FOrdGreaterThan 115 27
+                                  SelectionMerge 118 None
+                                  BranchConditional 116 117 118
+             117:                   Label
+             119:           2       FunctionCall 6(doSomething()
+                                    Branch 118
+             118:                 Label
+             120:     18(int)     RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23
+             121:    66(bool)     SGreaterThan 120 19
+                                  SelectionMerge 123 None
+                                  BranchConditional 121 122 123
+             122:                   Label
+             124:           2       FunctionCall 6(doSomething()
+                                    Branch 123
+             123:                 Label
+             125:    8(float)     RayQueryGetIntersectionTKHR 47(rayQuery) 23
+             126:    66(bool)     FOrdGreaterThan 125 27
+                                  SelectionMerge 128 None
+                                  BranchConditional 126 127 128
+             127:                   Label
+             129:           2       FunctionCall 6(doSomething()
+                                    Branch 128
+             128:                 Label
+             130:     18(int)     RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23
+             131:    66(bool)     UGreaterThan 130 20
+                                  SelectionMerge 133 None
+                                  BranchConditional 131 132 133
+             132:                   Label
+             134:           2       FunctionCall 6(doSomething()
+                                    Branch 133
+             133:                 Label
+                                  Branch 75
+              74:                 Label
+             136:          76     RayQueryGetIntersectionObjectToWorldKHR 47(rayQuery) 19
+                                  Store 78(_mat4x3) 136
+             137:          76     Load 78(_mat4x3)
+             138:          81     Transpose 137
+                                  Store 83(_mat3x4) 138
+             139:    66(bool)     RayQueryGetIntersectionCandidateAABBOpaqueKHR 47(rayQuery)
+                                  SelectionMerge 141 None
+                                  BranchConditional 139 140 141
+             140:                   Label
+             142:           2       FunctionCall 6(doSomething()
+                                    Branch 141
+             141:                 Label
+                                  Store 143(t) 144
+             145:    8(float)     Load 143(t)
+                                  RayQueryGenerateIntersectionKHR 47(rayQuery) 145
+                                  RayQueryTerminateKHR 47(rayQuery)
+                                  Branch 75
+              75:               Label
+                                Branch 64
+              64:               Label
+                                Branch 61
+              63:             Label
+             148:     35(ptr) AccessChain 83(_mat3x4) 19 20
+             149:    8(float) Load 148
+             150:     35(ptr) AccessChain 78(_mat4x3) 19 20
+             151:    8(float) Load 150
+             152:    66(bool) FOrdEqual 149 151
+                              SelectionMerge 154 None
+                              BranchConditional 152 153 154
+             153:               Label
+             155:           2   FunctionCall 6(doSomething()
+                                Branch 154
+             154:             Label
+             157:     14(int) RayQueryGetIntersectionTypeKHR 47(rayQuery) 23
+                              Store 156(committedStatus) 157
+             158:     14(int) Load 156(committedStatus)
+                              SelectionMerge 162 None
+                              Switch 158 162 
+                                     case 0: 159
+                                     case 1: 160
+                                     case 2: 161
+             159:               Label
+             163:          76   RayQueryGetIntersectionWorldToObjectKHR 47(rayQuery) 19
+                                Store 78(_mat4x3) 163
+             164:          76   Load 78(_mat4x3)
+             165:          81   Transpose 164
+                                Store 83(_mat3x4) 165
+                                Branch 162
+             160:               Label
+             167:          76   RayQueryGetIntersectionWorldToObjectKHR 47(rayQuery) 23
+                                Store 78(_mat4x3) 167
+             168:          76   Load 78(_mat4x3)
+             169:          81   Transpose 168
+                                Store 83(_mat3x4) 169
+             170:    66(bool)   RayQueryGetIntersectionFrontFaceKHR 47(rayQuery) 23
+                                SelectionMerge 172 None
+                                BranchConditional 170 171 172
+             171:                 Label
+             173:           2     FunctionCall 6(doSomething()
+                                  Branch 172
+             172:               Label
+             174:   91(fvec2)   RayQueryGetIntersectionBarycentricsKHR 47(rayQuery) 23
+             176:    8(float)   CompositeExtract 174 1
+             177:    66(bool)   FOrdEqual 176 27
+                                SelectionMerge 179 None
+                                BranchConditional 177 178 179
+             178:                 Label
+             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
+                                SelectionMerge 190 None
+                                BranchConditional 188 189 190
+             189:                 Label
+             191:           2     FunctionCall 6(doSomething()
+                                  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
+                                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
+                                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)
+             231:    66(bool) UGreaterThan 230 20
+                              SelectionMerge 233 None
+                              BranchConditional 231 232 233
+             232:               Label
+             234:           2   FunctionCall 6(doSomething()
+                                Branch 233
+             233:             Label
+             235:    8(float) RayQueryGetRayTMinKHR 47(rayQuery)
+             236:    66(bool) FOrdGreaterThan 235 27
+                              SelectionMerge 238 None
+                              BranchConditional 236 237 238
+             237:               Label
+             239:           2   FunctionCall 6(doSomething()
+                                Branch 238
+             238:             Label
+             241:    9(fvec3) RayQueryGetWorldRayOriginKHR 47(rayQuery)
+                              Store 240(o) 241
+             243:    9(fvec3) RayQueryGetWorldRayDirectionKHR 47(rayQuery)
+                              Store 242(d) 243
+             244:     35(ptr) AccessChain 240(o) 20
+             245:    8(float) Load 244
+             246:     35(ptr) AccessChain 242(d) 198
+             247:    8(float) Load 246
+             248:    66(bool) FOrdEqual 245 247
+                              SelectionMerge 250 None
+                              BranchConditional 248 249 250
+             249:               Label
+             251:           2   FunctionCall 6(doSomething()
+                                Branch 250
+             250:             Label
+                              Return
+                              FunctionEnd
+ 6(doSomething():           2 Function None 3
+               7:             Label
+              22:     21(ptr) AccessChain 17 19
+                              Store 22 20
+              24:     21(ptr) AccessChain 17 23
+                              Store 24 20
+                              Return
+                              FunctionEnd
+12(makeRayDesc():     10(Ray) Function None 11
+              13:             Label
+         26(ray):     25(ptr) Variable Function
+              30:     29(ptr) AccessChain 26(ray) 19
+                              Store 30 28
+              34:     29(ptr) AccessChain 26(ray) 31
+                              Store 34 33
+              36:     35(ptr) AccessChain 26(ray) 23
+                              Store 36 27
+              39:     35(ptr) AccessChain 26(ray) 37
+                              Store 39 38
+              40:     10(Ray) Load 26(ray)
+                              ReturnValue 40
+                              FunctionEnd
diff --git a/Test/baseResults/rayQuery-allOps.rgen.out b/Test/baseResults/rayQuery-allOps.rgen.out
new file mode 100644
index 0000000..a61769e
--- /dev/null
+++ b/Test/baseResults/rayQuery-allOps.rgen.out
@@ -0,0 +1,431 @@
+rayQuery-allOps.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 257
+
+                              Capability RayQueryProvisionalKHR
+                              Capability RayTracingNV
+                              Extension  "SPV_KHR_ray_query"
+                              Extension  "SPV_NV_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main"
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_NV_ray_tracing"
+                              Name 4  "main"
+                              Name 6  "doSomething("
+                              Name 10  "Ray"
+                              MemberName 10(Ray) 0  "pos"
+                              MemberName 10(Ray) 1  "tmin"
+                              MemberName 10(Ray) 2  "dir"
+                              MemberName 10(Ray) 3  "tmax"
+                              Name 12  "makeRayDesc("
+                              Name 15  "Log"
+                              MemberName 15(Log) 0  "x"
+                              MemberName 15(Log) 1  "y"
+                              Name 17  ""
+                              Name 26  "ray"
+                              Name 43  "ray"
+                              Name 47  "rayQuery"
+                              Name 50  "rtas"
+                              Name 69  "candidateType"
+                              Name 78  "_mat4x3"
+                              Name 83  "_mat3x4"
+                              Name 143  "t"
+                              Name 156  "committedStatus"
+                              Name 240  "o"
+                              Name 242  "d"
+                              Name 252  "Ray"
+                              MemberName 252(Ray) 0  "pos"
+                              MemberName 252(Ray) 1  "tmin"
+                              MemberName 252(Ray) 2  "dir"
+                              MemberName 252(Ray) 3  "tmax"
+                              Name 254  "Rays"
+                              MemberName 254(Rays) 0  "rays"
+                              Name 256  ""
+                              MemberDecorate 15(Log) 0 Offset 0
+                              MemberDecorate 15(Log) 1 Offset 4
+                              Decorate 15(Log) BufferBlock
+                              Decorate 17 DescriptorSet 0
+                              Decorate 17 Binding 0
+                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 50(rtas) Binding 1
+                              MemberDecorate 252(Ray) 0 Offset 0
+                              MemberDecorate 252(Ray) 1 Offset 12
+                              MemberDecorate 252(Ray) 2 Offset 16
+                              MemberDecorate 252(Ray) 3 Offset 28
+                              Decorate 253 ArrayStride 32
+                              MemberDecorate 254(Rays) 0 Offset 0
+                              Decorate 254(Rays) BufferBlock
+                              Decorate 256 DescriptorSet 0
+                              Decorate 256 Binding 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 3
+         10(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
+              11:             TypeFunction 10(Ray)
+              14:             TypeInt 32 0
+         15(Log):             TypeStruct 14(int) 14(int)
+              16:             TypePointer Uniform 15(Log)
+              17:     16(ptr) Variable Uniform
+              18:             TypeInt 32 1
+              19:     18(int) Constant 0
+              20:     14(int) Constant 0
+              21:             TypePointer Uniform 14(int)
+              23:     18(int) Constant 1
+              25:             TypePointer Function 10(Ray)
+              27:    8(float) Constant 0
+              28:    9(fvec3) ConstantComposite 27 27 27
+              29:             TypePointer Function 9(fvec3)
+              31:     18(int) Constant 2
+              32:    8(float) Constant 1065353216
+              33:    9(fvec3) ConstantComposite 32 27 27
+              35:             TypePointer Function 8(float)
+              37:     18(int) Constant 3
+              38:    8(float) Constant 1176255488
+              45:             TypeRayQueryProvisionalKHR
+              46:             TypePointer Function 45
+              48:             TypeAccelerationStructureKHR
+              49:             TypePointer UniformConstant 48
+        50(rtas):     49(ptr) Variable UniformConstant
+              52:     14(int) Constant 255
+              66:             TypeBool
+              68:             TypePointer Function 14(int)
+              70:    66(bool) ConstantFalse
+              76:             TypeMatrix 9(fvec3) 4
+              77:             TypePointer Function 76
+              80:             TypeVector 8(float) 4
+              81:             TypeMatrix 80(fvec4) 3
+              82:             TypePointer Function 81
+              86:    66(bool) ConstantTrue
+              91:             TypeVector 8(float) 2
+             144:    8(float) Constant 1056964608
+             175:     14(int) Constant 1
+             198:     14(int) Constant 2
+        252(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
+             253:             TypeRuntimeArray 252(Ray)
+       254(Rays):             TypeStruct 253
+             255:             TypePointer Uniform 254(Rays)
+             256:    255(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+         43(ray):     25(ptr) Variable Function
+    47(rayQuery):     46(ptr) Variable Function
+69(candidateType):     68(ptr) Variable Function
+     78(_mat4x3):     77(ptr) Variable Function
+     83(_mat3x4):     82(ptr) Variable Function
+          143(t):     35(ptr) Variable Function
+156(committedStatus):     68(ptr) Variable Function
+          240(o):     29(ptr) Variable Function
+          242(d):     29(ptr) Variable Function
+              44:     10(Ray) FunctionCall 12(makeRayDesc()
+                              Store 43(ray) 44
+              51:          48 Load 50(rtas)
+              53:     29(ptr) AccessChain 43(ray) 19
+              54:    9(fvec3) Load 53
+              55:     35(ptr) AccessChain 43(ray) 23
+              56:    8(float) Load 55
+              57:     29(ptr) AccessChain 43(ray) 31
+              58:    9(fvec3) Load 57
+              59:     35(ptr) AccessChain 43(ray) 37
+              60:    8(float) Load 59
+                              RayQueryInitializeKHR 47(rayQuery) 51 20 52 54 56 58 60
+                              Branch 61
+              61:             Label
+                              LoopMerge 63 64 None
+                              Branch 65
+              65:             Label
+              67:    66(bool) RayQueryProceedKHR 47(rayQuery)
+                              BranchConditional 67 62 63
+              62:               Label
+              71:     14(int)   RayQueryGetIntersectionTypeKHR 47(rayQuery) 19
+                                Store 69(candidateType) 71
+              72:     14(int)   Load 69(candidateType)
+                                SelectionMerge 75 None
+                                Switch 72 75 
+                                       case 0: 73
+                                       case 1: 74
+              73:                 Label
+                                  RayQueryTerminateKHR 47(rayQuery)
+              79:          76     RayQueryGetIntersectionObjectToWorldKHR 47(rayQuery) 19
+                                  Store 78(_mat4x3) 79
+              84:          76     Load 78(_mat4x3)
+              85:          81     Transpose 84
+                                  Store 83(_mat3x4) 85
+                                  RayQueryConfirmIntersectionKHR 47(rayQuery)
+              87:    66(bool)     RayQueryGetIntersectionFrontFaceKHR 47(rayQuery) 23
+                                  SelectionMerge 89 None
+                                  BranchConditional 87 88 89
+              88:                   Label
+              90:           2       FunctionCall 6(doSomething()
+                                    Branch 89
+              89:                 Label
+              92:   91(fvec2)     RayQueryGetIntersectionBarycentricsKHR 47(rayQuery) 23
+              93:    8(float)     CompositeExtract 92 0
+              94:    66(bool)     FOrdEqual 93 27
+                                  SelectionMerge 96 None
+                                  BranchConditional 94 95 96
+              95:                   Label
+              97:           2       FunctionCall 6(doSomething()
+                                    Branch 96
+              96:                 Label
+              98:     18(int)     RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23
+              99:    66(bool)     SGreaterThan 98 19
+                                  SelectionMerge 101 None
+                                  BranchConditional 99 100 101
+             100:                   Label
+             102:           2       FunctionCall 6(doSomething()
+                                    Branch 101
+             101:                 Label
+             103:     18(int)     RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23
+             104:    66(bool)     SGreaterThan 103 19
+                                  SelectionMerge 106 None
+                                  BranchConditional 104 105 106
+             105:                   Label
+             107:           2       FunctionCall 6(doSomething()
+                                    Branch 106
+             106:                 Label
+             108:    9(fvec3)     RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23
+             109:    8(float)     CompositeExtract 108 0
+             110:    66(bool)     FOrdGreaterThan 109 27
+                                  SelectionMerge 112 None
+                                  BranchConditional 110 111 112
+             111:                   Label
+             113:           2       FunctionCall 6(doSomething()
+                                    Branch 112
+             112:                 Label
+             114:    9(fvec3)     RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23
+             115:    8(float)     CompositeExtract 114 0
+             116:    66(bool)     FOrdGreaterThan 115 27
+                                  SelectionMerge 118 None
+                                  BranchConditional 116 117 118
+             117:                   Label
+             119:           2       FunctionCall 6(doSomething()
+                                    Branch 118
+             118:                 Label
+             120:     18(int)     RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23
+             121:    66(bool)     SGreaterThan 120 19
+                                  SelectionMerge 123 None
+                                  BranchConditional 121 122 123
+             122:                   Label
+             124:           2       FunctionCall 6(doSomething()
+                                    Branch 123
+             123:                 Label
+             125:    8(float)     RayQueryGetIntersectionTKHR 47(rayQuery) 23
+             126:    66(bool)     FOrdGreaterThan 125 27
+                                  SelectionMerge 128 None
+                                  BranchConditional 126 127 128
+             127:                   Label
+             129:           2       FunctionCall 6(doSomething()
+                                    Branch 128
+             128:                 Label
+             130:     18(int)     RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23
+             131:    66(bool)     UGreaterThan 130 20
+                                  SelectionMerge 133 None
+                                  BranchConditional 131 132 133
+             132:                   Label
+             134:           2       FunctionCall 6(doSomething()
+                                    Branch 133
+             133:                 Label
+                                  Branch 75
+              74:                 Label
+             136:          76     RayQueryGetIntersectionObjectToWorldKHR 47(rayQuery) 19
+                                  Store 78(_mat4x3) 136
+             137:          76     Load 78(_mat4x3)
+             138:          81     Transpose 137
+                                  Store 83(_mat3x4) 138
+             139:    66(bool)     RayQueryGetIntersectionCandidateAABBOpaqueKHR 47(rayQuery)
+                                  SelectionMerge 141 None
+                                  BranchConditional 139 140 141
+             140:                   Label
+             142:           2       FunctionCall 6(doSomething()
+                                    Branch 141
+             141:                 Label
+                                  Store 143(t) 144
+             145:    8(float)     Load 143(t)
+                                  RayQueryGenerateIntersectionKHR 47(rayQuery) 145
+                                  RayQueryTerminateKHR 47(rayQuery)
+                                  Branch 75
+              75:               Label
+                                Branch 64
+              64:               Label
+                                Branch 61
+              63:             Label
+             148:     35(ptr) AccessChain 83(_mat3x4) 19 20
+             149:    8(float) Load 148
+             150:     35(ptr) AccessChain 78(_mat4x3) 19 20
+             151:    8(float) Load 150
+             152:    66(bool) FOrdEqual 149 151
+                              SelectionMerge 154 None
+                              BranchConditional 152 153 154
+             153:               Label
+             155:           2   FunctionCall 6(doSomething()
+                                Branch 154
+             154:             Label
+             157:     14(int) RayQueryGetIntersectionTypeKHR 47(rayQuery) 23
+                              Store 156(committedStatus) 157
+             158:     14(int) Load 156(committedStatus)
+                              SelectionMerge 162 None
+                              Switch 158 162 
+                                     case 0: 159
+                                     case 1: 160
+                                     case 2: 161
+             159:               Label
+             163:          76   RayQueryGetIntersectionWorldToObjectKHR 47(rayQuery) 19
+                                Store 78(_mat4x3) 163
+             164:          76   Load 78(_mat4x3)
+             165:          81   Transpose 164
+                                Store 83(_mat3x4) 165
+                                Branch 162
+             160:               Label
+             167:          76   RayQueryGetIntersectionWorldToObjectKHR 47(rayQuery) 23
+                                Store 78(_mat4x3) 167
+             168:          76   Load 78(_mat4x3)
+             169:          81   Transpose 168
+                                Store 83(_mat3x4) 169
+             170:    66(bool)   RayQueryGetIntersectionFrontFaceKHR 47(rayQuery) 23
+                                SelectionMerge 172 None
+                                BranchConditional 170 171 172
+             171:                 Label
+             173:           2     FunctionCall 6(doSomething()
+                                  Branch 172
+             172:               Label
+             174:   91(fvec2)   RayQueryGetIntersectionBarycentricsKHR 47(rayQuery) 23
+             176:    8(float)   CompositeExtract 174 1
+             177:    66(bool)   FOrdEqual 176 27
+                                SelectionMerge 179 None
+                                BranchConditional 177 178 179
+             178:                 Label
+             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
+                                SelectionMerge 190 None
+                                BranchConditional 188 189 190
+             189:                 Label
+             191:           2     FunctionCall 6(doSomething()
+                                  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
+                                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
+                                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)
+             231:    66(bool) UGreaterThan 230 20
+                              SelectionMerge 233 None
+                              BranchConditional 231 232 233
+             232:               Label
+             234:           2   FunctionCall 6(doSomething()
+                                Branch 233
+             233:             Label
+             235:    8(float) RayQueryGetRayTMinKHR 47(rayQuery)
+             236:    66(bool) FOrdGreaterThan 235 27
+                              SelectionMerge 238 None
+                              BranchConditional 236 237 238
+             237:               Label
+             239:           2   FunctionCall 6(doSomething()
+                                Branch 238
+             238:             Label
+             241:    9(fvec3) RayQueryGetWorldRayOriginKHR 47(rayQuery)
+                              Store 240(o) 241
+             243:    9(fvec3) RayQueryGetWorldRayDirectionKHR 47(rayQuery)
+                              Store 242(d) 243
+             244:     35(ptr) AccessChain 240(o) 20
+             245:    8(float) Load 244
+             246:     35(ptr) AccessChain 242(d) 198
+             247:    8(float) Load 246
+             248:    66(bool) FOrdEqual 245 247
+                              SelectionMerge 250 None
+                              BranchConditional 248 249 250
+             249:               Label
+             251:           2   FunctionCall 6(doSomething()
+                                Branch 250
+             250:             Label
+                              Return
+                              FunctionEnd
+ 6(doSomething():           2 Function None 3
+               7:             Label
+              22:     21(ptr) AccessChain 17 19
+                              Store 22 20
+              24:     21(ptr) AccessChain 17 23
+                              Store 24 20
+                              Return
+                              FunctionEnd
+12(makeRayDesc():     10(Ray) Function None 11
+              13:             Label
+         26(ray):     25(ptr) Variable Function
+              30:     29(ptr) AccessChain 26(ray) 19
+                              Store 30 28
+              34:     29(ptr) AccessChain 26(ray) 31
+                              Store 34 33
+              36:     35(ptr) AccessChain 26(ray) 23
+                              Store 36 27
+              39:     35(ptr) AccessChain 26(ray) 37
+                              Store 39 38
+              40:     10(Ray) Load 26(ray)
+                              ReturnValue 40
+                              FunctionEnd
diff --git a/Test/baseResults/rayQuery-committed.Error.rgen.out b/Test/baseResults/rayQuery-committed.Error.rgen.out
new file mode 100644
index 0000000..037f692
--- /dev/null
+++ b/Test/baseResults/rayQuery-committed.Error.rgen.out
@@ -0,0 +1,19 @@
+rayQuery-committed.Error.rgen
+ERROR: 0:48: 'committed' : argument must be compile-time constant 
+ERROR: 0:53: 'committed' : argument must be compile-time constant 
+ERROR: 0:54: 'committed' : argument must be compile-time constant 
+ERROR: 0:58: 'committed' : argument must be compile-time constant 
+ERROR: 0:62: 'committed' : argument must be compile-time constant 
+ERROR: 0:66: 'committed' : argument must be compile-time constant 
+ERROR: 0:70: 'committed' : argument must be compile-time constant 
+ERROR: 0:74: 'committed' : argument must be compile-time constant 
+ERROR: 0:78: 'committed' : argument must be compile-time constant 
+ERROR: 0:82: 'committed' : argument must be compile-time constant 
+ERROR: 0:86: 'committed' : argument must be compile-time constant 
+ERROR: 0:90: 'committed' : argument must be compile-time constant 
+ERROR: 0:97: 'committed' : argument must be compile-time constant 
+ERROR: 0:100: 'committed' : argument must be compile-time constant 
+ERROR: 14 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/rayQuery-initialize.rgen.out b/Test/baseResults/rayQuery-initialize.rgen.out
new file mode 100644
index 0000000..7824930
--- /dev/null
+++ b/Test/baseResults/rayQuery-initialize.rgen.out
@@ -0,0 +1,166 @@
+rayQuery-initialize.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 103
+
+                              Capability RayQueryProvisionalKHR
+                              Capability RayTracingNV
+                              Extension  "SPV_KHR_ray_query"
+                              Extension  "SPV_NV_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 23 28
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_NV_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "launchIndex("
+                              Name 14  "Ray"
+                              MemberName 14(Ray) 0  "pos"
+                              MemberName 14(Ray) 1  "tmin"
+                              MemberName 14(Ray) 2  "dir"
+                              MemberName 14(Ray) 3  "tmax"
+                              Name 19  "doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;"
+                              Name 17  "rayQuery"
+                              Name 18  "ray"
+                              Name 23  "gl_LaunchIDNV"
+                              Name 28  "gl_LaunchSizeNV"
+                              Name 50  "rtas"
+                              Name 69  "index"
+                              Name 71  "ray"
+                              Name 72  "Ray"
+                              MemberName 72(Ray) 0  "pos"
+                              MemberName 72(Ray) 1  "tmin"
+                              MemberName 72(Ray) 2  "dir"
+                              MemberName 72(Ray) 3  "tmax"
+                              Name 74  "Rays"
+                              MemberName 74(Rays) 0  "rays"
+                              Name 76  ""
+                              Name 89  "rayQuery"
+                              Name 90  "param"
+                              Decorate 23(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 28(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
+                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 50(rtas) Binding 0
+                              MemberDecorate 72(Ray) 0 Offset 0
+                              MemberDecorate 72(Ray) 1 Offset 12
+                              MemberDecorate 72(Ray) 2 Offset 16
+                              MemberDecorate 72(Ray) 3 Offset 28
+                              Decorate 73 ArrayStride 32
+                              MemberDecorate 74(Rays) 0 Offset 0
+                              Decorate 74(Rays) BufferBlock
+                              Decorate 76 DescriptorSet 0
+                              Decorate 76 Binding 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeFunction 6(int)
+              10:             TypeRayQueryProvisionalKHR
+              11:             TypePointer Function 10
+              12:             TypeFloat 32
+              13:             TypeVector 12(float) 3
+         14(Ray):             TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
+              15:             TypePointer Function 14(Ray)
+              16:             TypeFunction 2 11(ptr) 15(ptr)
+              21:             TypeVector 6(int) 3
+              22:             TypePointer Input 21(ivec3)
+23(gl_LaunchIDNV):     22(ptr) Variable Input
+              24:      6(int) Constant 2
+              25:             TypePointer Input 6(int)
+28(gl_LaunchSizeNV):     22(ptr) Variable Input
+              29:      6(int) Constant 0
+              33:      6(int) Constant 1
+              48:             TypeAccelerationStructureKHR
+              49:             TypePointer UniformConstant 48
+        50(rtas):     49(ptr) Variable UniformConstant
+              52:      6(int) Constant 16
+              53:             TypeInt 32 1
+              54:     53(int) Constant 0
+              55:             TypePointer Function 13(fvec3)
+              58:     53(int) Constant 1
+              59:             TypePointer Function 12(float)
+              62:     53(int) Constant 2
+              65:     53(int) Constant 3
+              68:             TypePointer Function 6(int)
+         72(Ray):             TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
+              73:             TypeRuntimeArray 72(Ray)
+        74(Rays):             TypeStruct 73
+              75:             TypePointer Uniform 74(Rays)
+              76:     75(ptr) Variable Uniform
+              78:             TypePointer Uniform 72(Ray)
+              94:      6(int) Constant 32
+         4(main):           2 Function None 3
+               5:             Label
+       69(index):     68(ptr) Variable Function
+         71(ray):     15(ptr) Variable Function
+    89(rayQuery):     11(ptr) Variable Function
+       90(param):     15(ptr) Variable Function
+              70:      6(int) FunctionCall 8(launchIndex()
+                              Store 69(index) 70
+              77:      6(int) Load 69(index)
+              79:     78(ptr) AccessChain 76 54 77
+              80:     72(Ray) Load 79
+              81:   13(fvec3) CompositeExtract 80 0
+              82:     55(ptr) AccessChain 71(ray) 54
+                              Store 82 81
+              83:   12(float) CompositeExtract 80 1
+              84:     59(ptr) AccessChain 71(ray) 58
+                              Store 84 83
+              85:   13(fvec3) CompositeExtract 80 2
+              86:     55(ptr) AccessChain 71(ray) 62
+                              Store 86 85
+              87:   12(float) CompositeExtract 80 3
+              88:     59(ptr) AccessChain 71(ray) 65
+                              Store 88 87
+              91:     14(Ray) Load 71(ray)
+                              Store 90(param) 91
+              92:           2 FunctionCall 19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;) 89(rayQuery) 90(param)
+              93:          48 Load 50(rtas)
+              95:     55(ptr) AccessChain 71(ray) 54
+              96:   13(fvec3) Load 95
+              97:     59(ptr) AccessChain 71(ray) 58
+              98:   12(float) Load 97
+              99:     55(ptr) AccessChain 71(ray) 62
+             100:   13(fvec3) Load 99
+             101:     59(ptr) AccessChain 71(ray) 65
+             102:   12(float) Load 101
+                              RayQueryInitializeKHR 89(rayQuery) 93 33 94 96 98 100 102
+                              Return
+                              FunctionEnd
+ 8(launchIndex():      6(int) Function None 7
+               9:             Label
+              26:     25(ptr) AccessChain 23(gl_LaunchIDNV) 24
+              27:      6(int) Load 26
+              30:     25(ptr) AccessChain 28(gl_LaunchSizeNV) 29
+              31:      6(int) Load 30
+              32:      6(int) IMul 27 31
+              34:     25(ptr) AccessChain 28(gl_LaunchSizeNV) 33
+              35:      6(int) Load 34
+              36:      6(int) IMul 32 35
+              37:     25(ptr) AccessChain 23(gl_LaunchIDNV) 33
+              38:      6(int) Load 37
+              39:     25(ptr) AccessChain 28(gl_LaunchSizeNV) 29
+              40:      6(int) Load 39
+              41:      6(int) IMul 38 40
+              42:      6(int) IAdd 36 41
+              43:     25(ptr) AccessChain 23(gl_LaunchIDNV) 29
+              44:      6(int) Load 43
+              45:      6(int) IAdd 42 44
+                              ReturnValue 45
+                              FunctionEnd
+19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;):           2 Function None 16
+    17(rayQuery):     11(ptr) FunctionParameter
+         18(ray):     15(ptr) FunctionParameter
+              20:             Label
+              51:          48 Load 50(rtas)
+              56:     55(ptr) AccessChain 18(ray) 54
+              57:   13(fvec3) Load 56
+              60:     59(ptr) AccessChain 18(ray) 58
+              61:   12(float) Load 60
+              63:     55(ptr) AccessChain 18(ray) 62
+              64:   13(fvec3) Load 63
+              66:     59(ptr) AccessChain 18(ray) 65
+              67:   12(float) Load 66
+                              RayQueryInitializeKHR 17(rayQuery) 51 29 52 57 61 64 67
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/rayQuery-no-cse.rgen.out b/Test/baseResults/rayQuery-no-cse.rgen.out
new file mode 100644
index 0000000..c09e348
--- /dev/null
+++ b/Test/baseResults/rayQuery-no-cse.rgen.out
@@ -0,0 +1,173 @@
+rayQuery-no-cse.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 107
+
+                              Capability RayQueryProvisionalKHR
+                              Capability RayTracingNV
+                              Extension  "SPV_KHR_ray_query"
+                              Extension  "SPV_NV_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 23 28
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_NV_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "launchIndex("
+                              Name 14  "Ray"
+                              MemberName 14(Ray) 0  "pos"
+                              MemberName 14(Ray) 1  "tmin"
+                              MemberName 14(Ray) 2  "dir"
+                              MemberName 14(Ray) 3  "tmax"
+                              Name 19  "doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;"
+                              Name 17  "rayQuery"
+                              Name 18  "ray"
+                              Name 23  "gl_LaunchIDNV"
+                              Name 28  "gl_LaunchSizeNV"
+                              Name 50  "rtas"
+                              Name 69  "index"
+                              Name 71  "ray"
+                              Name 72  "Ray"
+                              MemberName 72(Ray) 0  "pos"
+                              MemberName 72(Ray) 1  "tmin"
+                              MemberName 72(Ray) 2  "dir"
+                              MemberName 72(Ray) 3  "tmax"
+                              Name 74  "Rays"
+                              MemberName 74(Rays) 0  "rays"
+                              Name 76  ""
+                              Name 89  "rayQuery1"
+                              Name 90  "param"
+                              Name 103  "rayQuery2"
+                              Name 104  "param"
+                              Decorate 23(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 28(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
+                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 50(rtas) Binding 0
+                              MemberDecorate 72(Ray) 0 Offset 0
+                              MemberDecorate 72(Ray) 1 Offset 12
+                              MemberDecorate 72(Ray) 2 Offset 16
+                              MemberDecorate 72(Ray) 3 Offset 28
+                              Decorate 73 ArrayStride 32
+                              MemberDecorate 74(Rays) 0 Offset 0
+                              Decorate 74(Rays) BufferBlock
+                              Decorate 76 DescriptorSet 0
+                              Decorate 76 Binding 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeFunction 6(int)
+              10:             TypeRayQueryProvisionalKHR
+              11:             TypePointer Function 10
+              12:             TypeFloat 32
+              13:             TypeVector 12(float) 3
+         14(Ray):             TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
+              15:             TypePointer Function 14(Ray)
+              16:             TypeFunction 2 11(ptr) 15(ptr)
+              21:             TypeVector 6(int) 3
+              22:             TypePointer Input 21(ivec3)
+23(gl_LaunchIDNV):     22(ptr) Variable Input
+              24:      6(int) Constant 2
+              25:             TypePointer Input 6(int)
+28(gl_LaunchSizeNV):     22(ptr) Variable Input
+              29:      6(int) Constant 0
+              33:      6(int) Constant 1
+              48:             TypeAccelerationStructureKHR
+              49:             TypePointer UniformConstant 48
+        50(rtas):     49(ptr) Variable UniformConstant
+              52:      6(int) Constant 16
+              53:             TypeInt 32 1
+              54:     53(int) Constant 0
+              55:             TypePointer Function 13(fvec3)
+              58:     53(int) Constant 1
+              59:             TypePointer Function 12(float)
+              62:     53(int) Constant 2
+              65:     53(int) Constant 3
+              68:             TypePointer Function 6(int)
+         72(Ray):             TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float)
+              73:             TypeRuntimeArray 72(Ray)
+        74(Rays):             TypeStruct 73
+              75:             TypePointer Uniform 74(Rays)
+              76:     75(ptr) Variable Uniform
+              78:             TypePointer Uniform 72(Ray)
+              94:      6(int) Constant 32
+         4(main):           2 Function None 3
+               5:             Label
+       69(index):     68(ptr) Variable Function
+         71(ray):     15(ptr) Variable Function
+   89(rayQuery1):     11(ptr) Variable Function
+       90(param):     15(ptr) Variable Function
+  103(rayQuery2):     11(ptr) Variable Function
+      104(param):     15(ptr) Variable Function
+              70:      6(int) FunctionCall 8(launchIndex()
+                              Store 69(index) 70
+              77:      6(int) Load 69(index)
+              79:     78(ptr) AccessChain 76 54 77
+              80:     72(Ray) Load 79
+              81:   13(fvec3) CompositeExtract 80 0
+              82:     55(ptr) AccessChain 71(ray) 54
+                              Store 82 81
+              83:   12(float) CompositeExtract 80 1
+              84:     59(ptr) AccessChain 71(ray) 58
+                              Store 84 83
+              85:   13(fvec3) CompositeExtract 80 2
+              86:     55(ptr) AccessChain 71(ray) 62
+                              Store 86 85
+              87:   12(float) CompositeExtract 80 3
+              88:     59(ptr) AccessChain 71(ray) 65
+                              Store 88 87
+              91:     14(Ray) Load 71(ray)
+                              Store 90(param) 91
+              92:           2 FunctionCall 19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;) 89(rayQuery1) 90(param)
+              93:          48 Load 50(rtas)
+              95:     55(ptr) AccessChain 71(ray) 54
+              96:   13(fvec3) Load 95
+              97:     59(ptr) AccessChain 71(ray) 58
+              98:   12(float) Load 97
+              99:     55(ptr) AccessChain 71(ray) 62
+             100:   13(fvec3) Load 99
+             101:     59(ptr) AccessChain 71(ray) 65
+             102:   12(float) Load 101
+                              RayQueryInitializeKHR 89(rayQuery1) 93 33 94 96 98 100 102
+             105:     14(Ray) Load 71(ray)
+                              Store 104(param) 105
+             106:           2 FunctionCall 19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;) 103(rayQuery2) 104(param)
+                              Return
+                              FunctionEnd
+ 8(launchIndex():      6(int) Function None 7
+               9:             Label
+              26:     25(ptr) AccessChain 23(gl_LaunchIDNV) 24
+              27:      6(int) Load 26
+              30:     25(ptr) AccessChain 28(gl_LaunchSizeNV) 29
+              31:      6(int) Load 30
+              32:      6(int) IMul 27 31
+              34:     25(ptr) AccessChain 28(gl_LaunchSizeNV) 33
+              35:      6(int) Load 34
+              36:      6(int) IMul 32 35
+              37:     25(ptr) AccessChain 23(gl_LaunchIDNV) 33
+              38:      6(int) Load 37
+              39:     25(ptr) AccessChain 28(gl_LaunchSizeNV) 29
+              40:      6(int) Load 39
+              41:      6(int) IMul 38 40
+              42:      6(int) IAdd 36 41
+              43:     25(ptr) AccessChain 23(gl_LaunchIDNV) 29
+              44:      6(int) Load 43
+              45:      6(int) IAdd 42 44
+                              ReturnValue 45
+                              FunctionEnd
+19(doInitialize(rq1;struct-Ray-vf3-f1-vf3-f11;):           2 Function None 16
+    17(rayQuery):     11(ptr) FunctionParameter
+         18(ray):     15(ptr) FunctionParameter
+              20:             Label
+              51:          48 Load 50(rtas)
+              56:     55(ptr) AccessChain 18(ray) 54
+              57:   13(fvec3) Load 56
+              60:     59(ptr) AccessChain 18(ray) 58
+              61:   12(float) Load 60
+              63:     55(ptr) AccessChain 18(ray) 62
+              64:   13(fvec3) Load 63
+              66:     59(ptr) AccessChain 18(ray) 65
+              67:   12(float) Load 66
+                              RayQueryInitializeKHR 17(rayQuery) 51 29 52 57 61 64 67
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/rayQuery.rgen.out b/Test/baseResults/rayQuery.rgen.out
new file mode 100644
index 0000000..4658338
--- /dev/null
+++ b/Test/baseResults/rayQuery.rgen.out
@@ -0,0 +1,82 @@
+rayQuery.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 44
+
+                              Capability RayQueryProvisionalKHR
+                              Capability RayTracingNV
+                              Extension  "SPV_KHR_ray_query"
+                              Extension  "SPV_NV_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main"
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_NV_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "rayFlags"
+                              Name 12  "tMin"
+                              Name 14  "tMax"
+                              Name 18  "localRayQuery"
+                              Name 21  "acc0"
+                              Name 26  "block"
+                              MemberName 26(block) 0  "dir"
+                              MemberName 26(block) 1  "origin"
+                              Name 28  ""
+                              Decorate 21(acc0) DescriptorSet 0
+                              Decorate 21(acc0) Binding 0
+                              MemberDecorate 26(block) 0 Offset 0
+                              MemberDecorate 26(block) 1 Offset 16
+                              Decorate 26(block) BufferBlock
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 9
+              10:             TypeFloat 32
+              11:             TypePointer Function 10(float)
+              13:   10(float) Constant 0
+              15:   10(float) Constant 1148846080
+              16:             TypeRayQueryProvisionalKHR
+              17:             TypePointer Function 16
+              19:             TypeAccelerationStructureKHR
+              20:             TypePointer UniformConstant 19
+        21(acc0):     20(ptr) Variable UniformConstant
+              24:      6(int) Constant 255
+              25:             TypeVector 10(float) 3
+       26(block):             TypeStruct 25(fvec3) 25(fvec3)
+              27:             TypePointer ShaderRecordBufferKHR 26(block)
+              28:     27(ptr) Variable ShaderRecordBufferKHR
+              29:             TypeInt 32 1
+              30:     29(int) Constant 1
+              31:             TypePointer ShaderRecordBufferKHR 25(fvec3)
+              35:     29(int) Constant 0
+              39:             TypeBool
+         4(main):           2 Function None 3
+               5:             Label
+     8(rayFlags):      7(ptr) Variable Function
+        12(tMin):     11(ptr) Variable Function
+        14(tMax):     11(ptr) Variable Function
+18(localRayQuery):     17(ptr) Variable Function
+                              Store 8(rayFlags) 9
+                              Store 12(tMin) 13
+                              Store 14(tMax) 15
+              22:          19 Load 21(acc0)
+              23:      6(int) Load 8(rayFlags)
+              32:     31(ptr) AccessChain 28 30
+              33:   25(fvec3) Load 32
+              34:   10(float) Load 12(tMin)
+              36:     31(ptr) AccessChain 28 35
+              37:   25(fvec3) Load 36
+              38:   10(float) Load 14(tMax)
+                              RayQueryInitializeKHR 18(localRayQuery) 22 23 24 33 34 37 38
+              40:    39(bool) RayQueryProceedKHR 18(localRayQuery)
+              41:    39(bool) LogicalNot 40
+                              SelectionMerge 43 None
+                              BranchConditional 41 42 43
+              42:               Label
+                                RayQueryTerminateKHR 18(localRayQuery)
+                                Branch 43
+              43:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/remap.basic.dcefunc.frag.out b/Test/baseResults/remap.basic.dcefunc.frag.out
index 33ec069..e985def 100644
--- a/Test/baseResults/remap.basic.dcefunc.frag.out
+++ b/Test/baseResults/remap.basic.dcefunc.frag.out
@@ -1,6 +1,6 @@
 remap.basic.dcefunc.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/remap.basic.everything.frag.out b/Test/baseResults/remap.basic.everything.frag.out
index 858d629..0f7034a 100644
--- a/Test/baseResults/remap.basic.everything.frag.out
+++ b/Test/baseResults/remap.basic.everything.frag.out
@@ -1,6 +1,6 @@
 remap.basic.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24969
 
                               Capability Shader
diff --git a/Test/baseResults/remap.basic.none.frag.out b/Test/baseResults/remap.basic.none.frag.out
index 1ad1d74..44790dd 100644
--- a/Test/baseResults/remap.basic.none.frag.out
+++ b/Test/baseResults/remap.basic.none.frag.out
@@ -1,6 +1,6 @@
 remap.basic.none.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/remap.basic.strip.frag.out b/Test/baseResults/remap.basic.strip.frag.out
index 3d876d0..05f16ba 100644
--- a/Test/baseResults/remap.basic.strip.frag.out
+++ b/Test/baseResults/remap.basic.strip.frag.out
@@ -1,6 +1,6 @@
 remap.basic.strip.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
index 7f180a9..b9ce55e 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24878
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
index 577a135..71b7de0 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
index d7aea9f..c65d237 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
@@ -2,7 +2,7 @@
 WARNING: 0:4: 'immediate sampler state' : unimplemented 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 198
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
index aff0998..ea390b5 100644
--- a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
@@ -1,6 +1,6 @@
 remap.hlsl.templatetypes.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24954
 
                               Capability Shader
diff --git a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
index 282fd2a..32b4e7b 100644
--- a/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
+++ b/Test/baseResults/remap.hlsl.templatetypes.none.frag.out
@@ -1,6 +1,6 @@
 remap.hlsl.templatetypes.none.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 160
 
                               Capability Shader
diff --git a/Test/baseResults/remap.if.everything.frag.out b/Test/baseResults/remap.if.everything.frag.out
index cdb007b..26cc3dc 100644
--- a/Test/baseResults/remap.if.everything.frag.out
+++ b/Test/baseResults/remap.if.everything.frag.out
@@ -1,6 +1,6 @@
 remap.if.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22855
 
                               Capability Shader
diff --git a/Test/baseResults/remap.if.none.frag.out b/Test/baseResults/remap.if.none.frag.out
index 0c8d278..48e8587 100644
--- a/Test/baseResults/remap.if.none.frag.out
+++ b/Test/baseResults/remap.if.none.frag.out
@@ -1,6 +1,6 @@
 remap.if.none.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/remap.similar_1a.everything.frag.out b/Test/baseResults/remap.similar_1a.everything.frag.out
index 2f8f1c7..6d5ce1c 100644
--- a/Test/baseResults/remap.similar_1a.everything.frag.out
+++ b/Test/baseResults/remap.similar_1a.everything.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1a.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24916
 
                               Capability Shader
@@ -88,7 +88,7 @@
            22102:    649(ptr) Variable Function
            24151:     12(int) Load 4408
            13868:     9(bool) SGreaterThan 24151 2577
-                              SelectionMerge 22309 None
+                              SelectionMerge 14966 None
                               BranchConditional 13868 9492 17416
             9492:               Label
            15624:     12(int)   Load 4408
@@ -109,7 +109,6 @@
            10505:     12(int)   IAdd 11462 21176
            14626:   13(float)   ConvertSToF 10505
                                 ReturnValue 14626
-           22309:             Label
-            6429:   13(float) Undef
-                              ReturnValue 6429
+           14966:             Label
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/remap.similar_1a.none.frag.out b/Test/baseResults/remap.similar_1a.none.frag.out
index 80d35c3..457f1be 100644
--- a/Test/baseResults/remap.similar_1a.none.frag.out
+++ b/Test/baseResults/remap.similar_1a.none.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1a.none.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 86
 
                               Capability Shader
@@ -124,6 +124,5 @@
               68:    8(float)   ConvertSToF 67
                                 ReturnValue 68
               43:             Label
-              70:    8(float) Undef
-                              ReturnValue 70
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/remap.similar_1b.everything.frag.out b/Test/baseResults/remap.similar_1b.everything.frag.out
index c76c4bf..67425c6 100644
--- a/Test/baseResults/remap.similar_1b.everything.frag.out
+++ b/Test/baseResults/remap.similar_1b.everything.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1b.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24916
 
                               Capability Shader
@@ -93,7 +93,7 @@
            22102:    649(ptr) Variable Function
            24151:     12(int) Load 4408
            13868:     9(bool) SGreaterThan 24151 2577
-                              SelectionMerge 22309 None
+                              SelectionMerge 14966 None
                               BranchConditional 13868 10822 17416
            10822:               Label
            22680:     12(int)   Load 4408
@@ -115,7 +115,6 @@
            10505:     12(int)   IAdd 11462 21176
            14626:   13(float)   ConvertSToF 10505
                                 ReturnValue 14626
-           22309:             Label
-            6429:   13(float) Undef
-                              ReturnValue 6429
+           14966:             Label
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/remap.similar_1b.none.frag.out b/Test/baseResults/remap.similar_1b.none.frag.out
index 0a854d6..fe021e0 100644
--- a/Test/baseResults/remap.similar_1b.none.frag.out
+++ b/Test/baseResults/remap.similar_1b.none.frag.out
@@ -1,6 +1,6 @@
 remap.similar_1b.none.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 91
 
                               Capability Shader
@@ -130,6 +130,5 @@
               73:    8(float)   ConvertSToF 72
                                 ReturnValue 73
               46:             Label
-              75:    8(float) Undef
-                              ReturnValue 75
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/remap.specconst.comp.out b/Test/baseResults/remap.specconst.comp.out
index ee049f4..80d13b2 100644
--- a/Test/baseResults/remap.specconst.comp.out
+++ b/Test/baseResults/remap.specconst.comp.out
@@ -1,6 +1,6 @@
 remap.specconst.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 16104
 
                               Capability Shader
diff --git a/Test/baseResults/remap.switch.everything.frag.out b/Test/baseResults/remap.switch.everything.frag.out
index ffd64d4..2362f67 100644
--- a/Test/baseResults/remap.switch.everything.frag.out
+++ b/Test/baseResults/remap.switch.everything.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 23990
 
                               Capability Shader
diff --git a/Test/baseResults/remap.switch.none.frag.out b/Test/baseResults/remap.switch.none.frag.out
index 4dd7897..f8737b9 100644
--- a/Test/baseResults/remap.switch.none.frag.out
+++ b/Test/baseResults/remap.switch.none.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/remap.uniformarray.everything.frag.out b/Test/baseResults/remap.uniformarray.everything.frag.out
index c1f306e..40429f2 100644
--- a/Test/baseResults/remap.uniformarray.everything.frag.out
+++ b/Test/baseResults/remap.uniformarray.everything.frag.out
@@ -1,6 +1,6 @@
 remap.uniformarray.everything.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 25030
 
                               Capability Shader
diff --git a/Test/baseResults/remap.uniformarray.none.frag.out b/Test/baseResults/remap.uniformarray.none.frag.out
index 1087e5e..42d55b9 100644
--- a/Test/baseResults/remap.uniformarray.none.frag.out
+++ b/Test/baseResults/remap.uniformarray.none.frag.out
@@ -1,6 +1,6 @@
 remap.uniformarray.none.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/size b/Test/baseResults/size
index 4848776..47364a5 100644
--- a/Test/baseResults/size
+++ b/Test/baseResults/size
@@ -1 +1 @@
-388096 ../build/install/bin/glslangValidator.exe
+396288 ../build/install/bin/glslangValidator.exe
diff --git a/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out b/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
index cffc3a4..105bbdb 100644
--- a/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
+++ b/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
@@ -1,6 +1,6 @@
 spv.1.3.8bitstorage-ssbo.vert
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out b/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
index 7bdda4a..77c1565 100644
--- a/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
+++ b/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
@@ -1,6 +1,6 @@
 spv.1.3.8bitstorage-ubo.vert
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.3.coopmat.comp.out b/Test/baseResults/spv.1.3.coopmat.comp.out
index c183847..29d914f 100644
--- a/Test/baseResults/spv.1.3.coopmat.comp.out
+++ b/Test/baseResults/spv.1.3.coopmat.comp.out
@@ -1,6 +1,6 @@
 spv.1.3.coopmat.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.LoopControl.frag.out b/Test/baseResults/spv.1.4.LoopControl.frag.out
index c9a605b..008ef47 100644
--- a/Test/baseResults/spv.1.4.LoopControl.frag.out
+++ b/Test/baseResults/spv.1.4.LoopControl.frag.out
@@ -3,7 +3,7 @@
 WARNING: 0:15: 'max_iterations' : expected a single integer argument 
 
 // Module Version 10400
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.NonWritable.frag.out b/Test/baseResults/spv.1.4.NonWritable.frag.out
index 3f54661..0207ed2 100755
--- a/Test/baseResults/spv.1.4.NonWritable.frag.out
+++ b/Test/baseResults/spv.1.4.NonWritable.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.NonWritable.frag
 // Module Version 10400
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.OpCopyLogical.comp.out b/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
index d80bfee..53e672f 100644
--- a/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
+++ b/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
@@ -1,6 +1,6 @@
 spv.1.4.OpCopyLogical.comp
 // Module Version 10400
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out b/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
index 85bfdb2..d7509b1 100644
--- a/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
+++ b/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.OpCopyLogical.funcall.frag
 // Module Version 10400
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out b/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
index f2f85c1..2b60625 100644
--- a/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
+++ b/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
@@ -1,6 +1,6 @@
 spv.1.4.OpCopyLogicalBool.comp
 // Module Version 10400
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 135
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
index 694cff0..f06960c 100644
--- a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
+++ b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.OpEntryPoint.frag
 // Module Version 10400
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 64
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.OpSelect.frag.out b/Test/baseResults/spv.1.4.OpSelect.frag.out
index 3179717..6ba00a4 100755
--- a/Test/baseResults/spv.1.4.OpSelect.frag.out
+++ b/Test/baseResults/spv.1.4.OpSelect.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.OpSelect.frag
 // Module Version 10400
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 98
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.constructComposite.comp.out b/Test/baseResults/spv.1.4.constructComposite.comp.out
index 5c0f5cf..e514286 100644
--- a/Test/baseResults/spv.1.4.constructComposite.comp.out
+++ b/Test/baseResults/spv.1.4.constructComposite.comp.out
@@ -1,6 +1,6 @@
 spv.1.4.constructComposite.comp
 // Module Version 10400
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.image.frag.out b/Test/baseResults/spv.1.4.image.frag.out
index 4adfd4b..98ffdcb 100755
--- a/Test/baseResults/spv.1.4.image.frag.out
+++ b/Test/baseResults/spv.1.4.image.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.image.frag
 // Module Version 10400
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 104
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.sparseTexture.frag.out b/Test/baseResults/spv.1.4.sparseTexture.frag.out
index 292335e..3b566c7 100755
--- a/Test/baseResults/spv.1.4.sparseTexture.frag.out
+++ b/Test/baseResults/spv.1.4.sparseTexture.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.sparseTexture.frag
 // Module Version 10400
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 213
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.texture.frag.out b/Test/baseResults/spv.1.4.texture.frag.out
index 7c2de0b..da3a24f 100755
--- a/Test/baseResults/spv.1.4.texture.frag.out
+++ b/Test/baseResults/spv.1.4.texture.frag.out
@@ -1,6 +1,6 @@
 spv.1.4.texture.frag
 // Module Version 10400
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 79
 
                               Capability Shader
diff --git a/Test/baseResults/spv.100ops.frag.out b/Test/baseResults/spv.100ops.frag.out
index 8f656eb..d2b8f3e 100644
--- a/Test/baseResults/spv.100ops.frag.out
+++ b/Test/baseResults/spv.100ops.frag.out
@@ -1,6 +1,6 @@
 spv.100ops.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 49
 
                               Capability Shader
diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out
index 67e2b82..ca1f9e3 100644
--- a/Test/baseResults/spv.130.frag.out
+++ b/Test/baseResults/spv.130.frag.out
@@ -3,7 +3,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 205
 
                               Capability Shader
diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out
index abfd13a..45b7510 100644
--- a/Test/baseResults/spv.140.frag.out
+++ b/Test/baseResults/spv.140.frag.out
@@ -1,7 +1,7 @@
 spv.140.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/spv.150.geom.out b/Test/baseResults/spv.150.geom.out
index 19bd725..ab05846 100644
--- a/Test/baseResults/spv.150.geom.out
+++ b/Test/baseResults/spv.150.geom.out
@@ -1,6 +1,6 @@
 spv.150.geom
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 71
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.150.vert.out b/Test/baseResults/spv.150.vert.out
index db058fa..9e1c9f4 100644
--- a/Test/baseResults/spv.150.vert.out
+++ b/Test/baseResults/spv.150.vert.out
@@ -1,6 +1,6 @@
 spv.150.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 63
 
                               Capability Shader
diff --git a/Test/baseResults/spv.16bitstorage-int.frag.out b/Test/baseResults/spv.16bitstorage-int.frag.out
index c1aacb8..80733ce 100644
--- a/Test/baseResults/spv.16bitstorage-int.frag.out
+++ b/Test/baseResults/spv.16bitstorage-int.frag.out
@@ -1,6 +1,6 @@
 spv.16bitstorage-int.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 171
 
                               Capability Shader
diff --git a/Test/baseResults/spv.16bitstorage-uint.frag.out b/Test/baseResults/spv.16bitstorage-uint.frag.out
index ba2e0c6..d4b1b75 100644
--- a/Test/baseResults/spv.16bitstorage-uint.frag.out
+++ b/Test/baseResults/spv.16bitstorage-uint.frag.out
@@ -1,6 +1,6 @@
 spv.16bitstorage-uint.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 173
 
                               Capability Shader
diff --git a/Test/baseResults/spv.16bitstorage.frag.out b/Test/baseResults/spv.16bitstorage.frag.out
index 5530cf4..c73eb59 100644
--- a/Test/baseResults/spv.16bitstorage.frag.out
+++ b/Test/baseResults/spv.16bitstorage.frag.out
@@ -1,6 +1,6 @@
 spv.16bitstorage.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 173
 
                               Capability Shader
diff --git a/Test/baseResults/spv.16bitxfb.vert.out b/Test/baseResults/spv.16bitxfb.vert.out
index 7d989c5..96cff79 100644
--- a/Test/baseResults/spv.16bitxfb.vert.out
+++ b/Test/baseResults/spv.16bitxfb.vert.out
@@ -1,6 +1,6 @@
 spv.16bitxfb.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 59
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300BuiltIns.vert.out b/Test/baseResults/spv.300BuiltIns.vert.out
index ee2c236..2633645 100644
--- a/Test/baseResults/spv.300BuiltIns.vert.out
+++ b/Test/baseResults/spv.300BuiltIns.vert.out
@@ -1,6 +1,6 @@
 spv.300BuiltIns.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300layout.frag.out b/Test/baseResults/spv.300layout.frag.out
index 10a6d00..db06955 100644
--- a/Test/baseResults/spv.300layout.frag.out
+++ b/Test/baseResults/spv.300layout.frag.out
@@ -1,6 +1,6 @@
 spv.300layout.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 37
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300layout.vert.out b/Test/baseResults/spv.300layout.vert.out
index 4d4d7ea..c97d217 100644
--- a/Test/baseResults/spv.300layout.vert.out
+++ b/Test/baseResults/spv.300layout.vert.out
@@ -1,6 +1,6 @@
 spv.300layout.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 163
 
                               Capability Shader
diff --git a/Test/baseResults/spv.300layoutp.vert.out b/Test/baseResults/spv.300layoutp.vert.out
index e12041f..2b1ef83 100644
--- a/Test/baseResults/spv.300layoutp.vert.out
+++ b/Test/baseResults/spv.300layoutp.vert.out
@@ -1,6 +1,6 @@
 spv.300layoutp.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 115
 
                               Capability Shader
diff --git a/Test/baseResults/spv.310.bitcast.frag.out b/Test/baseResults/spv.310.bitcast.frag.out
index d7a244f..e4f62b4 100644
--- a/Test/baseResults/spv.310.bitcast.frag.out
+++ b/Test/baseResults/spv.310.bitcast.frag.out
@@ -1,6 +1,6 @@
 spv.310.bitcast.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 153
 
                               Capability Shader
diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
index bb8e6a7..3b90d41 100644
--- a/Test/baseResults/spv.310.comp.out
+++ b/Test/baseResults/spv.310.comp.out
@@ -1,6 +1,6 @@
 spv.310.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Shader
diff --git a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
index 20b6fa2..6881084 100644
--- a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
+++ b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
@@ -1,6 +1,6 @@
 spv.320.meshShaderUserDefined.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 140
 
                               Capability MeshShadingNV
diff --git a/Test/baseResults/spv.330.geom.out b/Test/baseResults/spv.330.geom.out
index 1ccbfb6..79e03b6 100644
--- a/Test/baseResults/spv.330.geom.out
+++ b/Test/baseResults/spv.330.geom.out
@@ -1,6 +1,6 @@
 spv.330.geom
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.400.frag.nanclamp.out b/Test/baseResults/spv.400.frag.nanclamp.out
index 5305ee4..448aa5e 100644
--- a/Test/baseResults/spv.400.frag.nanclamp.out
+++ b/Test/baseResults/spv.400.frag.nanclamp.out
@@ -1,6 +1,6 @@
 spv.400.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1118
 
                               Capability Shader
diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out
index 5433e4d..b2f4a16 100644
--- a/Test/baseResults/spv.400.frag.out
+++ b/Test/baseResults/spv.400.frag.out
@@ -1,7 +1,7 @@
 spv.400.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1118
 
                               Capability Shader
diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
index ce7c3af..e84b420 100644
--- a/Test/baseResults/spv.400.tesc.out
+++ b/Test/baseResults/spv.400.tesc.out
@@ -1,6 +1,6 @@
 spv.400.tesc
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 92
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out
index 43b6a91..5705fbd 100644
--- a/Test/baseResults/spv.400.tese.out
+++ b/Test/baseResults/spv.400.tese.out
@@ -1,6 +1,6 @@
 spv.400.tese
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 96
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.420.geom.out b/Test/baseResults/spv.420.geom.out
index fa91dd8..c75ae5d 100644
--- a/Test/baseResults/spv.420.geom.out
+++ b/Test/baseResults/spv.420.geom.out
@@ -1,6 +1,6 @@
 spv.420.geom
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.430.frag.out b/Test/baseResults/spv.430.frag.out
index 330489f..96ab1e9 100644
--- a/Test/baseResults/spv.430.frag.out
+++ b/Test/baseResults/spv.430.frag.out
@@ -1,6 +1,6 @@
 spv.430.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out
index 1cd9e61..89e5b16 100644
--- a/Test/baseResults/spv.430.vert.out
+++ b/Test/baseResults/spv.430.vert.out
@@ -1,6 +1,6 @@
 spv.430.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/spv.450.geom.out b/Test/baseResults/spv.450.geom.out
index 7713e54..1e7e8c5 100644
--- a/Test/baseResults/spv.450.geom.out
+++ b/Test/baseResults/spv.450.geom.out
@@ -1,6 +1,6 @@
 spv.450.geom
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.450.noRedecl.tesc.out b/Test/baseResults/spv.450.noRedecl.tesc.out
index b23061d..31c7b4d 100644
--- a/Test/baseResults/spv.450.noRedecl.tesc.out
+++ b/Test/baseResults/spv.450.noRedecl.tesc.out
@@ -1,6 +1,6 @@
 spv.450.noRedecl.tesc
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 21
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.450.tesc.out b/Test/baseResults/spv.450.tesc.out
index 35653fd..0c22d9a 100644
--- a/Test/baseResults/spv.450.tesc.out
+++ b/Test/baseResults/spv.450.tesc.out
@@ -1,6 +1,6 @@
 spv.450.tesc
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 45
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.460.comp.out b/Test/baseResults/spv.460.comp.out
index 6ebf49f..0925674 100644
--- a/Test/baseResults/spv.460.comp.out
+++ b/Test/baseResults/spv.460.comp.out
@@ -1,6 +1,6 @@
 spv.460.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.460.frag.out b/Test/baseResults/spv.460.frag.out
index 04393fb..067bd43 100644
--- a/Test/baseResults/spv.460.frag.out
+++ b/Test/baseResults/spv.460.frag.out
@@ -1,6 +1,6 @@
 spv.460.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/spv.460.vert.out b/Test/baseResults/spv.460.vert.out
index c2ef302..a73b7e1 100644
--- a/Test/baseResults/spv.460.vert.out
+++ b/Test/baseResults/spv.460.vert.out
@@ -1,6 +1,6 @@
 spv.460.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.8bit-16bit-construction.frag.out b/Test/baseResults/spv.8bit-16bit-construction.frag.out
new file mode 100644
index 0000000..6cb9dc1
--- /dev/null
+++ b/Test/baseResults/spv.8bit-16bit-construction.frag.out
@@ -0,0 +1,82 @@
+spv.8bit-16bit-construction.frag
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 43
+
+                              Capability Shader
+                              Capability StorageUniformBufferBlock16
+                              Capability UniformAndStorageBuffer8BitAccess
+                              Extension  "SPV_KHR_16bit_storage"
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_16bit_storage"
+                              SourceExtension  "GL_EXT_shader_8bit_storage"
+                              Name 4  "main"
+                              Name 11  "B"
+                              MemberName 11(B) 0  "i8_from_i16"
+                              MemberName 11(B) 1  "i16_from_i8"
+                              MemberName 11(B) 2  "u8_from_u16"
+                              MemberName 11(B) 3  "u16_from_u8"
+                              MemberName 11(B) 4  "f16_from_i8"
+                              Name 13  ""
+                              MemberDecorate 11(B) 0 Offset 0
+                              MemberDecorate 11(B) 1 Offset 2
+                              MemberDecorate 11(B) 2 Offset 4
+                              MemberDecorate 11(B) 3 Offset 6
+                              MemberDecorate 11(B) 4 Offset 8
+                              Decorate 11(B) BufferBlock
+                              Decorate 13 DescriptorSet 0
+                              Decorate 13 Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 8 1
+               7:             TypeInt 16 1
+               8:             TypeInt 8 0
+               9:             TypeInt 16 0
+              10:             TypeFloat 16
+           11(B):             TypeStruct 6(int8_t) 7(int16_t) 8(int8_t) 9(int16_t) 10(float16_t)
+              12:             TypePointer Uniform 11(B)
+              13:     12(ptr) Variable Uniform
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:     14(int) Constant 1
+              19:             TypePointer Uniform 6(int8_t)
+              23:             TypePointer Uniform 7(int16_t)
+              25:     14(int) Constant 2
+              26:             TypeInt 32 0
+              27:     26(int) Constant 1
+              30:             TypePointer Uniform 8(int8_t)
+              32:     14(int) Constant 3
+              35:             TypePointer Uniform 9(int16_t)
+              37:     14(int) Constant 4
+              39:             TypeFloat 32
+              41:             TypePointer Uniform 10(float16_t)
+         4(main):           2 Function None 3
+               5:             Label
+              17:  7(int16_t) SConvert 16
+              18:   6(int8_t) SConvert 17
+              20:     19(ptr) AccessChain 13 15
+                              Store 20 18
+              21:   6(int8_t) SConvert 16
+              22:  7(int16_t) SConvert 21
+              24:     23(ptr) AccessChain 13 16
+                              Store 24 22
+              28:  9(int16_t) UConvert 27
+              29:   8(int8_t) UConvert 28
+              31:     30(ptr) AccessChain 13 25
+                              Store 31 29
+              33:   8(int8_t) UConvert 27
+              34:  9(int16_t) UConvert 33
+              36:     35(ptr) AccessChain 13 32
+                              Store 36 34
+              38:   6(int8_t) SConvert 16
+              40:10(float16_t) FConvert 38
+              42:     41(ptr) AccessChain 13 37
+                              Store 42 40
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.8bitstorage-int.frag.out b/Test/baseResults/spv.8bitstorage-int.frag.out
index 47e854f..54a47af 100644
--- a/Test/baseResults/spv.8bitstorage-int.frag.out
+++ b/Test/baseResults/spv.8bitstorage-int.frag.out
@@ -1,6 +1,6 @@
 spv.8bitstorage-int.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 171
 
                               Capability Shader
diff --git a/Test/baseResults/spv.8bitstorage-ssbo.vert.out b/Test/baseResults/spv.8bitstorage-ssbo.vert.out
index d0379fa..274639b 100644
--- a/Test/baseResults/spv.8bitstorage-ssbo.vert.out
+++ b/Test/baseResults/spv.8bitstorage-ssbo.vert.out
@@ -1,6 +1,6 @@
 spv.8bitstorage-ssbo.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/spv.8bitstorage-ubo.vert.out b/Test/baseResults/spv.8bitstorage-ubo.vert.out
index c5ec89d..af95a76 100644
--- a/Test/baseResults/spv.8bitstorage-ubo.vert.out
+++ b/Test/baseResults/spv.8bitstorage-ubo.vert.out
@@ -1,6 +1,6 @@
 spv.8bitstorage-ubo.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.8bitstorage-uint.frag.out b/Test/baseResults/spv.8bitstorage-uint.frag.out
index a66c6a3..6565882 100644
--- a/Test/baseResults/spv.8bitstorage-uint.frag.out
+++ b/Test/baseResults/spv.8bitstorage-uint.frag.out
@@ -1,6 +1,6 @@
 spv.8bitstorage-uint.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 173
 
                               Capability Shader
diff --git a/Test/baseResults/spv.AnyHitShader.rahit.out b/Test/baseResults/spv.AnyHitShader.rahit.out
index 92b31d0..6bef52d 100644
--- a/Test/baseResults/spv.AnyHitShader.rahit.out
+++ b/Test/baseResults/spv.AnyHitShader.rahit.out
@@ -1,13 +1,13 @@
 spv.AnyHitShader.rahit
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 81
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint AnyHitNV 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
+                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -42,21 +42,21 @@
                               Name 66  "v14"
                               Name 67  "gl_WorldToObjectNV"
                               Name 71  "incomingPayload"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
                               Decorate 23(gl_InstanceID) BuiltIn InstanceId
-                              Decorate 26(gl_InstanceCustomIndexNV) BuiltIn InstanceCustomIndexNV
-                              Decorate 33(gl_WorldRayOriginNV) BuiltIn WorldRayOriginNV
-                              Decorate 36(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionNV
-                              Decorate 39(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginNV
-                              Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionNV
-                              Decorate 47(gl_RayTminNV) BuiltIn RayTminNV
-                              Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxNV
-                              Decorate 53(gl_HitTNV) BuiltIn HitTNV
-                              Decorate 58(gl_HitKindNV) BuiltIn HitKindNV
-                              Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldNV
-                              Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectNV
+                              Decorate 26(gl_InstanceCustomIndexNV) BuiltIn InstanceCustomIndexKHR
+                              Decorate 33(gl_WorldRayOriginNV) BuiltIn WorldRayOriginKHR
+                              Decorate 36(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionKHR
+                              Decorate 39(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginKHR
+                              Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
+                              Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
+                              Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
+                              Decorate 53(gl_HitTNV) BuiltIn HitTKHR
+                              Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR
+                              Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
+                              Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
                               Decorate 71(incomingPayload) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
@@ -94,8 +94,8 @@
 64(gl_ObjectToWorldNV):     63(ptr) Variable Input
 67(gl_WorldToObjectNV):     63(ptr) Variable Input
               69:             TypeVector 28(float) 4
-              70:             TypePointer IncomingRayPayloadNV 69(fvec4)
-71(incomingPayload):     70(ptr) Variable IncomingRayPayloadNV
+              70:             TypePointer IncomingRayPayloadKHR 69(fvec4)
+71(incomingPayload):     70(ptr) Variable IncomingRayPayloadKHR
               72:   28(float) Constant 1056964608
               73:   69(fvec4) ConstantComposite 72 72 72 72
               75:     16(int) Constant 1
@@ -153,10 +153,10 @@
                               SelectionMerge 79 None
                               BranchConditional 77 78 80
               78:               Label
-                                IgnoreIntersectionNV
+                                IgnoreIntersectionKHR
                                 Branch 79
               80:               Label
-                                TerminateRayNV
+                                TerminateRayKHR
                                 Branch 79
               79:             Label
                               Return
diff --git a/Test/baseResults/spv.AofA.frag.out b/Test/baseResults/spv.AofA.frag.out
index 7433f17..c9f8b46 100644
--- a/Test/baseResults/spv.AofA.frag.out
+++ b/Test/baseResults/spv.AofA.frag.out
@@ -3,7 +3,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 104
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ClosestHitShader.rchit.out b/Test/baseResults/spv.ClosestHitShader.rchit.out
index b461462..cefdc50 100644
--- a/Test/baseResults/spv.ClosestHitShader.rchit.out
+++ b/Test/baseResults/spv.ClosestHitShader.rchit.out
@@ -1,13 +1,13 @@
 spv.ClosestHitShader.rchit
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 88
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint ClosestHitNV 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
+                              EntryPoint ClosestHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -44,21 +44,21 @@
                               Name 71  "accNV"
                               Name 85  "localPayload"
                               Name 87  "incomingPayload"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
                               Decorate 23(gl_InstanceID) BuiltIn InstanceId
-                              Decorate 26(gl_InstanceCustomIndexNV) BuiltIn InstanceCustomIndexNV
-                              Decorate 33(gl_WorldRayOriginNV) BuiltIn WorldRayOriginNV
-                              Decorate 36(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionNV
-                              Decorate 39(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginNV
-                              Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionNV
-                              Decorate 47(gl_RayTminNV) BuiltIn RayTminNV
-                              Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxNV
-                              Decorate 53(gl_HitTNV) BuiltIn HitTNV
-                              Decorate 58(gl_HitKindNV) BuiltIn HitKindNV
-                              Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldNV
-                              Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectNV
+                              Decorate 26(gl_InstanceCustomIndexNV) BuiltIn InstanceCustomIndexKHR
+                              Decorate 33(gl_WorldRayOriginNV) BuiltIn WorldRayOriginKHR
+                              Decorate 36(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionKHR
+                              Decorate 39(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginKHR
+                              Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
+                              Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
+                              Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
+                              Decorate 53(gl_HitTNV) BuiltIn HitTKHR
+                              Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR
+                              Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
+                              Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
                               Decorate 71(accNV) DescriptorSet 0
                               Decorate 71(accNV) Binding 0
                               Decorate 85(localPayload) Location 0
@@ -98,7 +98,7 @@
               63:             TypePointer Input 60
 64(gl_ObjectToWorldNV):     63(ptr) Variable Input
 67(gl_WorldToObjectNV):     63(ptr) Variable Input
-              69:             TypeAccelerationStructureNV
+              69:             TypeAccelerationStructureKHR
               70:             TypePointer UniformConstant 69
        71(accNV):     70(ptr) Variable UniformConstant
               73:      6(int) Constant 0
@@ -112,10 +112,10 @@
               81:   28(float) Constant 1061158912
               82:     16(int) Constant 1
               83:             TypeVector 28(float) 4
-              84:             TypePointer RayPayloadNV 83(fvec4)
-85(localPayload):     84(ptr) Variable RayPayloadNV
-              86:             TypePointer IncomingRayPayloadNV 83(fvec4)
-87(incomingPayload):     86(ptr) Variable IncomingRayPayloadNV
+              84:             TypePointer RayPayloadKHR 83(fvec4)
+85(localPayload):     84(ptr) Variable RayPayloadKHR
+              86:             TypePointer IncomingRayPayloadKHR 83(fvec4)
+87(incomingPayload):     86(ptr) Variable IncomingRayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -164,6 +164,6 @@
               68:          60 Load 67(gl_WorldToObjectNV)
                               Store 66(v14) 68
               72:          69 Load 71(accNV)
-                              TraceNV 72 73 74 75 76 73 78 77 80 81 82
+                              TraceRayKHR 72 73 74 75 76 73 78 77 80 81 82
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.GeometryShaderPassthrough.geom.out b/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
index 5db845e..7e62c57 100644
--- a/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
+++ b/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
@@ -1,6 +1,6 @@
 spv.GeometryShaderPassthrough.geom
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 15
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.IntersectShader.rint.out b/Test/baseResults/spv.IntersectShader.rint.out
index cbb70cd..bf99241 100644
--- a/Test/baseResults/spv.IntersectShader.rint.out
+++ b/Test/baseResults/spv.IntersectShader.rint.out
@@ -1,13 +1,13 @@
 spv.IntersectShader.rint
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 71
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint IntersectionNV 4  "main" 11 14 20 23 26 33 36 39 42 47 50 56 59
+                              EntryPoint IntersectionKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 56 59
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -38,19 +38,19 @@
                               Name 58  "v12"
                               Name 59  "gl_WorldToObjectNV"
                               Name 63  "iAttr"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
                               Decorate 23(gl_InstanceID) BuiltIn InstanceId
-                              Decorate 26(gl_InstanceCustomIndexNV) BuiltIn InstanceCustomIndexNV
-                              Decorate 33(gl_WorldRayOriginNV) BuiltIn WorldRayOriginNV
-                              Decorate 36(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionNV
-                              Decorate 39(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginNV
-                              Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionNV
-                              Decorate 47(gl_RayTminNV) BuiltIn RayTminNV
-                              Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxNV
-                              Decorate 56(gl_ObjectToWorldNV) BuiltIn ObjectToWorldNV
-                              Decorate 59(gl_WorldToObjectNV) BuiltIn WorldToObjectNV
+                              Decorate 26(gl_InstanceCustomIndexNV) BuiltIn InstanceCustomIndexKHR
+                              Decorate 33(gl_WorldRayOriginNV) BuiltIn WorldRayOriginKHR
+                              Decorate 36(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionKHR
+                              Decorate 39(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginKHR
+                              Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
+                              Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
+                              Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
+                              Decorate 56(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
+                              Decorate 59(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -83,8 +83,8 @@
 56(gl_ObjectToWorldNV):     55(ptr) Variable Input
 59(gl_WorldToObjectNV):     55(ptr) Variable Input
               61:             TypeVector 28(float) 4
-              62:             TypePointer HitAttributeNV 61(fvec4)
-       63(iAttr):     62(ptr) Variable HitAttributeNV
+              62:             TypePointer HitAttributeKHR 61(fvec4)
+       63(iAttr):     62(ptr) Variable HitAttributeKHR
               64:   28(float) Constant 1056964608
               65:   28(float) Constant 0
               66:   28(float) Constant 1065353216
@@ -133,6 +133,6 @@
               60:          52 Load 59(gl_WorldToObjectNV)
                               Store 58(v12) 60
                               Store 63(iAttr) 67
-              70:    69(bool) ReportIntersectionNV 64 68
+              70:    69(bool) ReportIntersectionKHR 64 68
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.MissShader.rmiss.out b/Test/baseResults/spv.MissShader.rmiss.out
index 0ad3341..b811044 100644
--- a/Test/baseResults/spv.MissShader.rmiss.out
+++ b/Test/baseResults/spv.MissShader.rmiss.out
@@ -1,13 +1,13 @@
 spv.MissShader.rmiss
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint MissNV 4  "main" 11 14 21 24 27 30 35 38
+                              EntryPoint MissKHR 4  "main" 11 14 21 24 27 30 35 38
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -30,14 +30,14 @@
                               Name 42  "accNV"
                               Name 57  "localPayload"
                               Name 59  "incomingPayload"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
-                              Decorate 21(gl_WorldRayOriginNV) BuiltIn WorldRayOriginNV
-                              Decorate 24(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionNV
-                              Decorate 27(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginNV
-                              Decorate 30(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionNV
-                              Decorate 35(gl_RayTminNV) BuiltIn RayTminNV
-                              Decorate 38(gl_RayTmaxNV) BuiltIn RayTmaxNV
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
+                              Decorate 21(gl_WorldRayOriginNV) BuiltIn WorldRayOriginKHR
+                              Decorate 24(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionKHR
+                              Decorate 27(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginKHR
+                              Decorate 30(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
+                              Decorate 35(gl_RayTminNV) BuiltIn RayTminKHR
+                              Decorate 38(gl_RayTmaxNV) BuiltIn RayTmaxKHR
                               Decorate 42(accNV) DescriptorSet 0
                               Decorate 42(accNV) Binding 0
                               Decorate 57(localPayload) Location 0
@@ -62,7 +62,7 @@
               34:             TypePointer Input 16(float)
 35(gl_RayTminNV):     34(ptr) Variable Input
 38(gl_RayTmaxNV):     34(ptr) Variable Input
-              40:             TypeAccelerationStructureNV
+              40:             TypeAccelerationStructureKHR
               41:             TypePointer UniformConstant 40
        42(accNV):     41(ptr) Variable UniformConstant
               44:      6(int) Constant 0
@@ -77,10 +77,10 @@
               53:             TypeInt 32 1
               54:     53(int) Constant 1
               55:             TypeVector 16(float) 4
-              56:             TypePointer RayPayloadNV 55(fvec4)
-57(localPayload):     56(ptr) Variable RayPayloadNV
-              58:             TypePointer IncomingRayPayloadNV 55(fvec4)
-59(incomingPayload):     58(ptr) Variable IncomingRayPayloadNV
+              56:             TypePointer RayPayloadKHR 55(fvec4)
+57(localPayload):     56(ptr) Variable RayPayloadKHR
+              58:             TypePointer IncomingRayPayloadKHR 55(fvec4)
+59(incomingPayload):     58(ptr) Variable IncomingRayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -108,6 +108,6 @@
               39:   16(float) Load 38(gl_RayTmaxNV)
                               Store 37(v7) 39
               43:          40 Load 42(accNV)
-                              TraceNV 43 44 45 46 47 44 49 48 51 52 54
+                              TraceRayKHR 43 44 45 46 47 44 49 48 51 52 54
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.OVR_multiview.vert.out b/Test/baseResults/spv.OVR_multiview.vert.out
index 7013ced..66168dc 100644
--- a/Test/baseResults/spv.OVR_multiview.vert.out
+++ b/Test/baseResults/spv.OVR_multiview.vert.out
@@ -1,6 +1,6 @@
 spv.OVR_multiview.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out
index 4113ddf..ad54f6c 100644
--- a/Test/baseResults/spv.Operations.frag.out
+++ b/Test/baseResults/spv.Operations.frag.out
@@ -1,12 +1,12 @@
 spv.Operations.frag
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 532
+// Generated by (magic number): 80008
+// Id's are bound by 583
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 11 22 212 288 485 526 531
+                              EntryPoint Fragment 4  "main" 11 22 220 296 314 539 580
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               Name 4  "main"
@@ -14,23 +14,29 @@
                               Name 11  "uv4"
                               Name 20  "i"
                               Name 22  "ui"
-                              Name 181  "ub41"
-                              Name 188  "f"
-                              Name 212  "uf"
-                              Name 285  "u"
-                              Name 288  "uui"
-                              Name 305  "b"
-                              Name 342  "ub42"
-                              Name 485  "FragColor"
-                              Name 503  "m1"
-                              Name 510  "m2"
-                              Name 526  "uiv4"
-                              Name 528  "ub"
-                              Name 531  "uuv4"
+                              Name 155  "swizzleTemp"
+                              Name 189  "ub41"
+                              Name 196  "f"
+                              Name 220  "uf"
+                              Name 293  "u"
+                              Name 296  "uui"
+                              Name 314  "uuv4"
+                              Name 321  "msb"
+                              Name 323  "swizzleTemp"
+                              Name 324  "lsb"
+                              Name 325  "swizzleTemp"
+                              Name 326  "ResType"
+                              Name 359  "b"
+                              Name 396  "ub42"
+                              Name 539  "FragColor"
+                              Name 557  "m1"
+                              Name 564  "m2"
+                              Name 580  "uiv4"
+                              Name 582  "ub"
                               Decorate 22(ui) Flat
-                              Decorate 288(uui) Flat
-                              Decorate 526(uiv4) Flat
-                              Decorate 531(uuv4) Flat
+                              Decorate 296(uui) Flat
+                              Decorate 314(uuv4) Flat
+                              Decorate 580(uiv4) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -45,55 +51,66 @@
              141:             TypeInt 32 0
              142:    141(int) Constant 0
              143:             TypePointer Function 6(float)
-             178:             TypeBool
-             179:             TypeVector 178(bool) 4
-             180:             TypePointer Private 179(bvec4)
-       181(ub41):    180(ptr) Variable Private
-             211:             TypePointer Input 6(float)
-         212(uf):    211(ptr) Variable Input
-             284:             TypePointer Function 141(int)
-             287:             TypePointer Input 141(int)
-        288(uui):    287(ptr) Variable Input
-             304:             TypePointer Function 178(bool)
-       342(ub42):    180(ptr) Variable Private
-             398:     18(int) Constant 2
-             405:     18(int) Constant 1
-             435:             TypeVector 6(float) 3
-             454:    6(float) Constant 1073741824
-             461:    6(float) Constant 1065353216
-             466:     18(int) Constant 66
-             472:     18(int) Constant 17
-             484:             TypePointer Output 7(fvec4)
-  485(FragColor):    484(ptr) Variable Output
-             501:             TypeMatrix 7(fvec4) 4
-             502:             TypePointer Function 501
-             504:    6(float) Constant 0
-             505:    7(fvec4) ConstantComposite 461 504 504 504
-             506:    7(fvec4) ConstantComposite 504 461 504 504
-             507:    7(fvec4) ConstantComposite 504 504 461 504
-             508:    7(fvec4) ConstantComposite 504 504 504 461
-             509:         501 ConstantComposite 505 506 507 508
-             511:    7(fvec4) ConstantComposite 504 504 504 504
-             512:         501 ConstantComposite 511 511 511 511
-             524:             TypeVector 18(int) 4
-             525:             TypePointer Input 524(ivec4)
-       526(uiv4):    525(ptr) Variable Input
-             527:             TypePointer Private 178(bool)
-         528(ub):    527(ptr) Variable Private
-             529:             TypeVector 141(int) 4
-             530:             TypePointer Input 529(ivec4)
-       531(uuv4):    530(ptr) Variable Input
+             186:             TypeBool
+             187:             TypeVector 186(bool) 4
+             188:             TypePointer Private 187(bvec4)
+       189(ub41):    188(ptr) Variable Private
+             219:             TypePointer Input 6(float)
+         220(uf):    219(ptr) Variable Input
+             292:             TypePointer Function 141(int)
+             295:             TypePointer Input 141(int)
+        296(uui):    295(ptr) Variable Input
+             312:             TypeVector 141(int) 4
+             313:             TypePointer Input 312(ivec4)
+       314(uuv4):    313(ptr) Variable Input
+             315:             TypeVector 141(int) 3
+             320:             TypePointer Function 312(ivec4)
+             322:             TypePointer Function 315(ivec3)
+    326(ResType):             TypeStruct 315(ivec3) 315(ivec3)
+             338:    141(int) Constant 1
+             342:    141(int) Constant 2
+             358:             TypePointer Function 186(bool)
+       396(ub42):    188(ptr) Variable Private
+             452:     18(int) Constant 2
+             459:     18(int) Constant 1
+             489:             TypeVector 6(float) 3
+             508:    6(float) Constant 1073741824
+             515:    6(float) Constant 1065353216
+             520:     18(int) Constant 66
+             526:     18(int) Constant 17
+             538:             TypePointer Output 7(fvec4)
+  539(FragColor):    538(ptr) Variable Output
+             555:             TypeMatrix 7(fvec4) 4
+             556:             TypePointer Function 555
+             558:    6(float) Constant 0
+             559:    7(fvec4) ConstantComposite 515 558 558 558
+             560:    7(fvec4) ConstantComposite 558 515 558 558
+             561:    7(fvec4) ConstantComposite 558 558 515 558
+             562:    7(fvec4) ConstantComposite 558 558 558 515
+             563:         555 ConstantComposite 559 560 561 562
+             565:    7(fvec4) ConstantComposite 558 558 558 558
+             566:         555 ConstantComposite 565 565 565 565
+             578:             TypeVector 18(int) 4
+             579:             TypePointer Input 578(ivec4)
+       580(uiv4):    579(ptr) Variable Input
+             581:             TypePointer Private 186(bool)
+         582(ub):    581(ptr) Variable Private
          4(main):           2 Function None 3
                5:             Label
             9(v):      8(ptr) Variable Function
            20(i):     19(ptr) Variable Function
-          188(f):    143(ptr) Variable Function
-          285(u):    284(ptr) Variable Function
-          305(b):    304(ptr) Variable Function
-             487:      8(ptr) Variable Function
-         503(m1):    502(ptr) Variable Function
-         510(m2):    502(ptr) Variable Function
-             514:    502(ptr) Variable Function
+155(swizzleTemp):      8(ptr) Variable Function
+          196(f):    143(ptr) Variable Function
+          293(u):    292(ptr) Variable Function
+        321(msb):    320(ptr) Variable Function
+323(swizzleTemp):    322(ptr) Variable Function
+        324(lsb):    320(ptr) Variable Function
+325(swizzleTemp):    322(ptr) Variable Function
+          359(b):    358(ptr) Variable Function
+             541:      8(ptr) Variable Function
+         557(m1):    556(ptr) Variable Function
+         564(m2):    556(ptr) Variable Function
+             568:    556(ptr) Variable Function
               12:    7(fvec4) Load 11(uv4)
               13:    7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
                               Store 9(v) 13
@@ -262,441 +279,489 @@
              153:    7(fvec4) FAdd 152 151
                               Store 9(v) 153
              154:    7(fvec4) Load 9(v)
-             155:    7(fvec4) Load 11(uv4)
-             156:    7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 154 155
-             157:    7(fvec4) Load 9(v)
-             158:    7(fvec4) FAdd 157 156
-                              Store 9(v) 158
-             159:    7(fvec4) Load 9(v)
-             160:    7(fvec4) Load 11(uv4)
-             161:    7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 159 160
+             156:    7(fvec4) ExtInst 1(GLSL.std.450) 35(Modf) 154 155(swizzleTemp)
+             157:    7(fvec4) Load 155(swizzleTemp)
+             158:    7(fvec4) Load 9(v)
+             159:    7(fvec4) VectorShuffle 158 157 6 4 5 7
+                              Store 9(v) 159
+             160:    7(fvec4) Load 9(v)
+             161:    7(fvec4) FAdd 160 156
+                              Store 9(v) 161
              162:    7(fvec4) Load 9(v)
-             163:    7(fvec4) FAdd 162 161
-                              Store 9(v) 163
-             164:    7(fvec4) Load 9(v)
-             165:    7(fvec4) Load 11(uv4)
-             166:    7(fvec4) Load 11(uv4)
-             167:    7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 164 165 166
-             168:    7(fvec4) Load 9(v)
-             169:    7(fvec4) FAdd 168 167
-                              Store 9(v) 169
+             163:    7(fvec4) Load 11(uv4)
+             164:    7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 162 163
+             165:    7(fvec4) Load 9(v)
+             166:    7(fvec4) FAdd 165 164
+                              Store 9(v) 166
+             167:    7(fvec4) Load 9(v)
+             168:    7(fvec4) Load 11(uv4)
+             169:    7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 167 168
              170:    7(fvec4) Load 9(v)
-             171:    7(fvec4) Load 9(v)
+             171:    7(fvec4) FAdd 170 169
+                              Store 9(v) 171
              172:    7(fvec4) Load 9(v)
-             173:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 170 171 172
-             174:    7(fvec4) Load 9(v)
-             175:    7(fvec4) FAdd 174 173
-                              Store 9(v) 175
+             173:    7(fvec4) Load 11(uv4)
+             174:    7(fvec4) Load 11(uv4)
+             175:    7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 172 173 174
              176:    7(fvec4) Load 9(v)
-             177:    7(fvec4) Load 9(v)
-             182:  179(bvec4) Load 181(ub41)
-             183:    7(fvec4) Select 182 177 176
+             177:    7(fvec4) FAdd 176 175
+                              Store 9(v) 177
+             178:    7(fvec4) Load 9(v)
+             179:    7(fvec4) Load 9(v)
+             180:    7(fvec4) Load 9(v)
+             181:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 178 179 180
+             182:    7(fvec4) Load 9(v)
+             183:    7(fvec4) FAdd 182 181
+                              Store 9(v) 183
              184:    7(fvec4) Load 9(v)
-             185:    7(fvec4) FAdd 184 183
-                              Store 9(v) 185
-             186:    7(fvec4) Load 9(v)
-             187:    7(fvec4) Load 9(v)
-             189:    6(float) Load 188(f)
-             190:    7(fvec4) CompositeConstruct 189 189 189 189
-             191:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 186 187 190
+             185:    7(fvec4) Load 9(v)
+             190:  187(bvec4) Load 189(ub41)
+             191:    7(fvec4) Select 190 185 184
              192:    7(fvec4) Load 9(v)
              193:    7(fvec4) FAdd 192 191
                               Store 9(v) 193
              194:    7(fvec4) Load 9(v)
-             195:    7(fvec4) Load 11(uv4)
-             196:    7(fvec4) Load 9(v)
-             197:    7(fvec4) ExtInst 1(GLSL.std.450) 50(Fma) 194 195 196
-             198:    7(fvec4) Load 9(v)
-             199:    7(fvec4) FAdd 198 197
-                              Store 9(v) 199
+             195:    7(fvec4) Load 9(v)
+             197:    6(float) Load 196(f)
+             198:    7(fvec4) CompositeConstruct 197 197 197 197
+             199:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 194 195 198
              200:    7(fvec4) Load 9(v)
-             201:    7(fvec4) Load 9(v)
-             202:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 200 201
-             203:    7(fvec4) Load 9(v)
-             204:    7(fvec4) FAdd 203 202
-                              Store 9(v) 204
-             205:    7(fvec4) Load 9(v)
+             201:    7(fvec4) FAdd 200 199
+                              Store 9(v) 201
+             202:    7(fvec4) Load 9(v)
+             203:    7(fvec4) Load 11(uv4)
+             204:    7(fvec4) Load 9(v)
+             205:    7(fvec4) ExtInst 1(GLSL.std.450) 50(Fma) 202 203 204
              206:    7(fvec4) Load 9(v)
-             207:    7(fvec4) Load 9(v)
-             208:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 205 206 207
+             207:    7(fvec4) FAdd 206 205
+                              Store 9(v) 207
+             208:    7(fvec4) Load 9(v)
              209:    7(fvec4) Load 9(v)
-             210:    7(fvec4) FAdd 209 208
-                              Store 9(v) 210
-             213:    6(float) Load 212(uf)
+             210:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 208 209
+             211:    7(fvec4) Load 9(v)
+             212:    7(fvec4) FAdd 211 210
+                              Store 9(v) 212
+             213:    7(fvec4) Load 9(v)
              214:    7(fvec4) Load 9(v)
-             215:    7(fvec4) CompositeConstruct 213 213 213 213
-             216:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 215 214
+             215:    7(fvec4) Load 9(v)
+             216:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 213 214 215
              217:    7(fvec4) Load 9(v)
              218:    7(fvec4) FAdd 217 216
                               Store 9(v) 218
-             219:    6(float) Load 212(uf)
-             220:    6(float) Load 212(uf)
-             221:    7(fvec4) Load 9(v)
-             222:    7(fvec4) CompositeConstruct 219 219 219 219
-             223:    7(fvec4) CompositeConstruct 220 220 220 220
-             224:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 222 223 221
+             221:    6(float) Load 220(uf)
+             222:    7(fvec4) Load 9(v)
+             223:    7(fvec4) CompositeConstruct 221 221 221 221
+             224:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 223 222
              225:    7(fvec4) Load 9(v)
              226:    7(fvec4) FAdd 225 224
                               Store 9(v) 226
-             227:    7(fvec4) Load 9(v)
-             228:    7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 227
+             227:    6(float) Load 220(uf)
+             228:    6(float) Load 220(uf)
              229:    7(fvec4) Load 9(v)
-             230:    7(fvec4) FAdd 229 228
-                              Store 9(v) 230
-             231:    7(fvec4) Load 9(v)
-             232:    7(fvec4) Load 9(v)
+             230:    7(fvec4) CompositeConstruct 227 227 227 227
+             231:    7(fvec4) CompositeConstruct 228 228 228 228
+             232:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 230 231 229
              233:    7(fvec4) Load 9(v)
-             234:    7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 231 232 233
+             234:    7(fvec4) FAdd 233 232
+                              Store 9(v) 234
              235:    7(fvec4) Load 9(v)
-             236:    7(fvec4) FAdd 235 234
-                              Store 9(v) 236
+             236:    7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 235
              237:    7(fvec4) Load 9(v)
-             238:    7(fvec4) Load 9(v)
-             239:    7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 237 238
+             238:    7(fvec4) FAdd 237 236
+                              Store 9(v) 238
+             239:    7(fvec4) Load 9(v)
              240:    7(fvec4) Load 9(v)
-             241:    7(fvec4) FAdd 240 239
-                              Store 9(v) 241
-             242:    7(fvec4) Load 9(v)
+             241:    7(fvec4) Load 9(v)
+             242:    7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 239 240 241
              243:    7(fvec4) Load 9(v)
-             244:    6(float) Load 212(uf)
-             245:    7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 242 243 244
+             244:    7(fvec4) FAdd 243 242
+                              Store 9(v) 244
+             245:    7(fvec4) Load 9(v)
              246:    7(fvec4) Load 9(v)
-             247:    7(fvec4) FAdd 246 245
-                              Store 9(v) 247
+             247:    7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 245 246
              248:    7(fvec4) Load 9(v)
-             249:    7(fvec4) DPdx 248
+             249:    7(fvec4) FAdd 248 247
+                              Store 9(v) 249
              250:    7(fvec4) Load 9(v)
-             251:    7(fvec4) FAdd 250 249
-                              Store 9(v) 251
-             252:    7(fvec4) Load 9(v)
-             253:    7(fvec4) DPdy 252
+             251:    7(fvec4) Load 9(v)
+             252:    6(float) Load 220(uf)
+             253:    7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 250 251 252
              254:    7(fvec4) Load 9(v)
              255:    7(fvec4) FAdd 254 253
                               Store 9(v) 255
              256:    7(fvec4) Load 9(v)
-             257:    7(fvec4) Fwidth 256
+             257:    7(fvec4) DPdx 256
              258:    7(fvec4) Load 9(v)
              259:    7(fvec4) FAdd 258 257
                               Store 9(v) 259
-             260:     18(int) Load 22(ui)
-             261:     18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 260
-             262:     18(int) Load 20(i)
-             263:     18(int) IAdd 262 261
-                              Store 20(i) 263
-             264:     18(int) Load 20(i)
-             265:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 264
-             266:     18(int) Load 20(i)
-             267:     18(int) IAdd 266 265
-                              Store 20(i) 267
-             268:     18(int) Load 20(i)
-             269:     18(int) Load 22(ui)
-             270:     18(int) ExtInst 1(GLSL.std.450) 39(SMin) 268 269
-             271:     18(int) Load 20(i)
-             272:     18(int) IAdd 271 270
-                              Store 20(i) 272
-             273:     18(int) Load 20(i)
-             274:     18(int) Load 22(ui)
-             275:     18(int) ExtInst 1(GLSL.std.450) 42(SMax) 273 274
+             260:    7(fvec4) Load 9(v)
+             261:    7(fvec4) DPdy 260
+             262:    7(fvec4) Load 9(v)
+             263:    7(fvec4) FAdd 262 261
+                              Store 9(v) 263
+             264:    7(fvec4) Load 9(v)
+             265:    7(fvec4) Fwidth 264
+             266:    7(fvec4) Load 9(v)
+             267:    7(fvec4) FAdd 266 265
+                              Store 9(v) 267
+             268:     18(int) Load 22(ui)
+             269:     18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 268
+             270:     18(int) Load 20(i)
+             271:     18(int) IAdd 270 269
+                              Store 20(i) 271
+             272:     18(int) Load 20(i)
+             273:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 272
+             274:     18(int) Load 20(i)
+             275:     18(int) IAdd 274 273
+                              Store 20(i) 275
              276:     18(int) Load 20(i)
-             277:     18(int) IAdd 276 275
-                              Store 20(i) 277
-             278:     18(int) Load 20(i)
-             279:     18(int) Load 22(ui)
-             280:     18(int) Load 22(ui)
-             281:     18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 278 279 280
-             282:     18(int) Load 20(i)
-             283:     18(int) IAdd 282 281
-                              Store 20(i) 283
-             286:    141(int) Load 285(u)
-             289:    141(int) Load 288(uui)
-             290:    141(int) ExtInst 1(GLSL.std.450) 38(UMin) 286 289
-             291:    141(int) Load 285(u)
-             292:    141(int) IAdd 291 290
-                              Store 285(u) 292
-             293:    141(int) Load 285(u)
-             294:    141(int) Load 288(uui)
-             295:    141(int) ExtInst 1(GLSL.std.450) 41(UMax) 293 294
-             296:    141(int) Load 285(u)
-             297:    141(int) IAdd 296 295
-                              Store 285(u) 297
-             298:    141(int) Load 285(u)
-             299:    141(int) Load 288(uui)
-             300:    141(int) Load 288(uui)
-             301:    141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 298 299 300
-             302:    141(int) Load 285(u)
-             303:    141(int) IAdd 302 301
-                              Store 285(u) 303
-             306:    6(float) Load 212(uf)
-             307:   178(bool) IsNan 306
-                              Store 305(b) 307
-             308:    6(float) Load 188(f)
-             309:   178(bool) IsInf 308
-                              Store 305(b) 309
-             310:    7(fvec4) Load 9(v)
-             311:    7(fvec4) Load 11(uv4)
-             312:  179(bvec4) FOrdLessThan 310 311
-             313:   178(bool) Any 312
-                              Store 305(b) 313
-             314:   178(bool) Load 305(b)
-                              SelectionMerge 316 None
-                              BranchConditional 314 315 316
-             315:               Label
-             317:    7(fvec4)   Load 9(v)
-             318:    7(fvec4)   Load 11(uv4)
-             319:  179(bvec4)   FOrdLessThanEqual 317 318
-             320:   178(bool)   Any 319
-                                Branch 316
-             316:             Label
-             321:   178(bool) Phi 314 5 320 315
-                              Store 305(b) 321
-             322:   178(bool) Load 305(b)
-                              SelectionMerge 324 None
-                              BranchConditional 322 323 324
-             323:               Label
-             325:    7(fvec4)   Load 9(v)
-             326:    7(fvec4)   Load 11(uv4)
-             327:  179(bvec4)   FOrdGreaterThan 325 326
-             328:   178(bool)   Any 327
-                                Branch 324
-             324:             Label
-             329:   178(bool) Phi 322 316 328 323
-                              Store 305(b) 329
-             330:   178(bool) Load 305(b)
-                              SelectionMerge 332 None
-                              BranchConditional 330 331 332
-             331:               Label
-             333:    7(fvec4)   Load 9(v)
-             334:    7(fvec4)   Load 11(uv4)
-             335:  179(bvec4)   FOrdGreaterThanEqual 333 334
-             336:   178(bool)   Any 335
-                                Branch 332
-             332:             Label
-             337:   178(bool) Phi 330 324 336 331
-                              Store 305(b) 337
-             338:   178(bool) Load 305(b)
-                              SelectionMerge 340 None
-                              BranchConditional 338 339 340
-             339:               Label
-             341:  179(bvec4)   Load 181(ub41)
-             343:  179(bvec4)   Load 342(ub42)
-             344:  179(bvec4)   LogicalEqual 341 343
-             345:   178(bool)   Any 344
-                                Branch 340
-             340:             Label
-             346:   178(bool) Phi 338 332 345 339
-                              Store 305(b) 346
-             347:   178(bool) Load 305(b)
-                              SelectionMerge 349 None
-                              BranchConditional 347 348 349
-             348:               Label
-             350:  179(bvec4)   Load 181(ub41)
-             351:  179(bvec4)   Load 342(ub42)
-             352:  179(bvec4)   LogicalNotEqual 350 351
-             353:   178(bool)   Any 352
-                                Branch 349
-             349:             Label
-             354:   178(bool) Phi 347 340 353 348
-                              Store 305(b) 354
-             355:   178(bool) Load 305(b)
-             356:  179(bvec4) Load 181(ub41)
-             357:   178(bool) Any 356
-             358:   178(bool) LogicalAnd 355 357
-                              Store 305(b) 358
-             359:   178(bool) Load 305(b)
-             360:  179(bvec4) Load 181(ub41)
-             361:   178(bool) All 360
-             362:   178(bool) LogicalAnd 359 361
-                              Store 305(b) 362
-             363:   178(bool) Load 305(b)
-                              SelectionMerge 365 None
-                              BranchConditional 363 364 365
-             364:               Label
-             366:  179(bvec4)   Load 181(ub41)
-             367:  179(bvec4)   LogicalNot 366
-             368:   178(bool)   Any 367
-                                Branch 365
-             365:             Label
-             369:   178(bool) Phi 363 349 368 364
-                              Store 305(b) 369
-             370:     18(int) Load 20(i)
-             371:     18(int) Load 22(ui)
-             372:     18(int) IAdd 370 371
-             373:     18(int) Load 20(i)
-             374:     18(int) IMul 372 373
-             375:     18(int) Load 22(ui)
-             376:     18(int) ISub 374 375
-             377:     18(int) Load 20(i)
-             378:     18(int) SDiv 376 377
-                              Store 20(i) 378
-             379:     18(int) Load 20(i)
-             380:     18(int) Load 22(ui)
-             381:     18(int) SMod 379 380
-                              Store 20(i) 381
-             382:     18(int) Load 20(i)
-             383:     18(int) Load 22(ui)
-             384:   178(bool) IEqual 382 383
-             385:   178(bool) LogicalNot 384
-                              SelectionMerge 387 None
-                              BranchConditional 385 386 387
-             386:               Label
-             388:     18(int)   Load 20(i)
-             389:     18(int)   Load 22(ui)
-             390:   178(bool)   INotEqual 388 389
-                                SelectionMerge 392 None
-                                BranchConditional 390 391 392
-             391:                 Label
-             393:     18(int)     Load 20(i)
-             394:     18(int)     Load 22(ui)
-             395:   178(bool)     IEqual 393 394
-                                  Branch 392
-             392:               Label
-             396:   178(bool)   Phi 390 386 395 391
-             397:     18(int)   Load 20(i)
-             399:   178(bool)   INotEqual 397 398
-             400:   178(bool)   LogicalNotEqual 396 399
-                                Branch 387
-             387:             Label
-             401:   178(bool) Phi 384 365 400 392
+             277:     18(int) Load 22(ui)
+             278:     18(int) ExtInst 1(GLSL.std.450) 39(SMin) 276 277
+             279:     18(int) Load 20(i)
+             280:     18(int) IAdd 279 278
+                              Store 20(i) 280
+             281:     18(int) Load 20(i)
+             282:     18(int) Load 22(ui)
+             283:     18(int) ExtInst 1(GLSL.std.450) 42(SMax) 281 282
+             284:     18(int) Load 20(i)
+             285:     18(int) IAdd 284 283
+                              Store 20(i) 285
+             286:     18(int) Load 20(i)
+             287:     18(int) Load 22(ui)
+             288:     18(int) Load 22(ui)
+             289:     18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 286 287 288
+             290:     18(int) Load 20(i)
+             291:     18(int) IAdd 290 289
+                              Store 20(i) 291
+             294:    141(int) Load 293(u)
+             297:    141(int) Load 296(uui)
+             298:    141(int) ExtInst 1(GLSL.std.450) 38(UMin) 294 297
+             299:    141(int) Load 293(u)
+             300:    141(int) IAdd 299 298
+                              Store 293(u) 300
+             301:    141(int) Load 293(u)
+             302:    141(int) Load 296(uui)
+             303:    141(int) ExtInst 1(GLSL.std.450) 41(UMax) 301 302
+             304:    141(int) Load 293(u)
+             305:    141(int) IAdd 304 303
+                              Store 293(u) 305
+             306:    141(int) Load 293(u)
+             307:    141(int) Load 296(uui)
+             308:    141(int) Load 296(uui)
+             309:    141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 306 307 308
+             310:    141(int) Load 293(u)
+             311:    141(int) IAdd 310 309
+                              Store 293(u) 311
+             316:  312(ivec4) Load 314(uuv4)
+             317:  315(ivec3) VectorShuffle 316 316 0 1 2
+             318:  312(ivec4) Load 314(uuv4)
+             319:  315(ivec3) VectorShuffle 318 318 0 1 2
+             327:326(ResType) UMulExtended 317 319
+             328:  315(ivec3) CompositeExtract 327 0
+                              Store 325(swizzleTemp) 328
+             329:  315(ivec3) CompositeExtract 327 1
+                              Store 323(swizzleTemp) 329
+             330:  315(ivec3) Load 323(swizzleTemp)
+             331:  312(ivec4) Load 321(msb)
+             332:  312(ivec4) VectorShuffle 331 330 4 5 6 3
+                              Store 321(msb) 332
+             333:  315(ivec3) Load 325(swizzleTemp)
+             334:  312(ivec4) Load 324(lsb)
+             335:  312(ivec4) VectorShuffle 334 333 4 5 6 3
+                              Store 324(lsb) 335
+             336:    292(ptr) AccessChain 321(msb) 142
+             337:    141(int) Load 336
+             339:    292(ptr) AccessChain 321(msb) 338
+             340:    141(int) Load 339
+             341:    141(int) IAdd 337 340
+             343:    292(ptr) AccessChain 321(msb) 342
+             344:    141(int) Load 343
+             345:    141(int) IAdd 341 344
+             346:    141(int) Load 293(u)
+             347:    141(int) IAdd 346 345
+                              Store 293(u) 347
+             348:    292(ptr) AccessChain 324(lsb) 142
+             349:    141(int) Load 348
+             350:    292(ptr) AccessChain 324(lsb) 338
+             351:    141(int) Load 350
+             352:    141(int) IAdd 349 351
+             353:    292(ptr) AccessChain 324(lsb) 342
+             354:    141(int) Load 353
+             355:    141(int) IAdd 352 354
+             356:    141(int) Load 293(u)
+             357:    141(int) IAdd 356 355
+                              Store 293(u) 357
+             360:    6(float) Load 220(uf)
+             361:   186(bool) IsNan 360
+                              Store 359(b) 361
+             362:    6(float) Load 196(f)
+             363:   186(bool) IsInf 362
+                              Store 359(b) 363
+             364:    7(fvec4) Load 9(v)
+             365:    7(fvec4) Load 11(uv4)
+             366:  187(bvec4) FOrdLessThan 364 365
+             367:   186(bool) Any 366
+                              Store 359(b) 367
+             368:   186(bool) Load 359(b)
+                              SelectionMerge 370 None
+                              BranchConditional 368 369 370
+             369:               Label
+             371:    7(fvec4)   Load 9(v)
+             372:    7(fvec4)   Load 11(uv4)
+             373:  187(bvec4)   FOrdLessThanEqual 371 372
+             374:   186(bool)   Any 373
+                                Branch 370
+             370:             Label
+             375:   186(bool) Phi 368 5 374 369
+                              Store 359(b) 375
+             376:   186(bool) Load 359(b)
+                              SelectionMerge 378 None
+                              BranchConditional 376 377 378
+             377:               Label
+             379:    7(fvec4)   Load 9(v)
+             380:    7(fvec4)   Load 11(uv4)
+             381:  187(bvec4)   FOrdGreaterThan 379 380
+             382:   186(bool)   Any 381
+                                Branch 378
+             378:             Label
+             383:   186(bool) Phi 376 370 382 377
+                              Store 359(b) 383
+             384:   186(bool) Load 359(b)
+                              SelectionMerge 386 None
+                              BranchConditional 384 385 386
+             385:               Label
+             387:    7(fvec4)   Load 9(v)
+             388:    7(fvec4)   Load 11(uv4)
+             389:  187(bvec4)   FOrdGreaterThanEqual 387 388
+             390:   186(bool)   Any 389
+                                Branch 386
+             386:             Label
+             391:   186(bool) Phi 384 378 390 385
+                              Store 359(b) 391
+             392:   186(bool) Load 359(b)
+                              SelectionMerge 394 None
+                              BranchConditional 392 393 394
+             393:               Label
+             395:  187(bvec4)   Load 189(ub41)
+             397:  187(bvec4)   Load 396(ub42)
+             398:  187(bvec4)   LogicalEqual 395 397
+             399:   186(bool)   Any 398
+                                Branch 394
+             394:             Label
+             400:   186(bool) Phi 392 386 399 393
+                              Store 359(b) 400
+             401:   186(bool) Load 359(b)
                               SelectionMerge 403 None
                               BranchConditional 401 402 403
              402:               Label
-             404:     18(int)   Load 20(i)
-             406:     18(int)   IAdd 404 405
-                                Store 20(i) 406
+             404:  187(bvec4)   Load 189(ub41)
+             405:  187(bvec4)   Load 396(ub42)
+             406:  187(bvec4)   LogicalNotEqual 404 405
+             407:   186(bool)   Any 406
                                 Branch 403
              403:             Label
-             407:    6(float) Load 212(uf)
-             408:    6(float) Load 212(uf)
-             409:    6(float) FAdd 407 408
-             410:    6(float) Load 212(uf)
-             411:    6(float) FMul 409 410
-             412:    6(float) Load 212(uf)
-             413:    6(float) FSub 411 412
-             414:    6(float) Load 212(uf)
-             415:    6(float) FDiv 413 414
-                              Store 188(f) 415
-             416:    7(fvec4) Load 9(v)
-             417:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 416
-             418:    6(float) Load 188(f)
-             419:    6(float) FAdd 418 417
-                              Store 188(f) 419
-             420:    7(fvec4) Load 9(v)
-             421:    7(fvec4) Load 9(v)
-             422:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 420 421
-             423:    6(float) Load 188(f)
-             424:    6(float) FAdd 423 422
-                              Store 188(f) 424
-             425:    7(fvec4) Load 9(v)
-             426:    7(fvec4) Load 9(v)
-             427:    6(float) Dot 425 426
-             428:    6(float) Load 188(f)
-             429:    6(float) FAdd 428 427
-                              Store 188(f) 429
-             430:    6(float) Load 188(f)
-             431:    6(float) Load 212(uf)
-             432:    6(float) FMul 430 431
-             433:    6(float) Load 188(f)
-             434:    6(float) FAdd 433 432
-                              Store 188(f) 434
-             436:    7(fvec4) Load 9(v)
-             437:  435(fvec3) VectorShuffle 436 436 0 1 2
-             438:    7(fvec4) Load 9(v)
-             439:  435(fvec3) VectorShuffle 438 438 0 1 2
-             440:  435(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 437 439
-             441:    6(float) CompositeExtract 440 0
-             442:    6(float) Load 188(f)
-             443:    6(float) FAdd 442 441
-                              Store 188(f) 443
-             444:    6(float) Load 188(f)
-             445:    6(float) Load 212(uf)
-             446:   178(bool) FOrdEqual 444 445
-             447:   178(bool) LogicalNot 446
-                              SelectionMerge 449 None
-                              BranchConditional 447 448 449
-             448:               Label
-             450:    6(float)   Load 188(f)
-             451:    6(float)   Load 212(uf)
-             452:   178(bool)   FOrdNotEqual 450 451
-             453:    6(float)   Load 188(f)
-             455:   178(bool)   FOrdNotEqual 453 454
-             456:   178(bool)   LogicalAnd 452 455
-                                Branch 449
-             449:             Label
-             457:   178(bool) Phi 446 403 456 448
-                              SelectionMerge 459 None
-                              BranchConditional 457 458 459
-             458:               Label
-             460:    6(float)   Load 188(f)
-             462:    6(float)   FAdd 460 461
-                                Store 188(f) 462
-                                Branch 459
-             459:             Label
-             463:     18(int) Load 22(ui)
-             464:     18(int) Load 20(i)
-             465:     18(int) BitwiseAnd 464 463
-                              Store 20(i) 465
-             467:     18(int) Load 20(i)
-             468:     18(int) BitwiseOr 467 466
-                              Store 20(i) 468
-             469:     18(int) Load 22(ui)
-             470:     18(int) Load 20(i)
-             471:     18(int) BitwiseXor 470 469
-                              Store 20(i) 471
-             473:     18(int) Load 20(i)
-             474:     18(int) SMod 473 472
-                              Store 20(i) 474
-             475:     18(int) Load 20(i)
-             476:     18(int) ShiftRightArithmetic 475 398
-                              Store 20(i) 476
-             477:     18(int) Load 22(ui)
-             478:     18(int) Load 20(i)
-             479:     18(int) ShiftLeftLogical 478 477
-                              Store 20(i) 479
-             480:     18(int) Load 20(i)
-             481:     18(int) Not 480
-                              Store 20(i) 481
-             482:   178(bool) Load 305(b)
-             483:   178(bool) LogicalNot 482
-                              Store 305(b) 483
-             486:   178(bool) Load 305(b)
-                              SelectionMerge 489 None
-                              BranchConditional 486 488 498
-             488:               Label
-             490:     18(int)   Load 20(i)
-             491:    6(float)   ConvertSToF 490
-             492:    7(fvec4)   CompositeConstruct 491 491 491 491
-             493:    6(float)   Load 188(f)
-             494:    7(fvec4)   CompositeConstruct 493 493 493 493
-             495:    7(fvec4)   FAdd 492 494
-             496:    7(fvec4)   Load 9(v)
-             497:    7(fvec4)   FAdd 495 496
-                                Store 487 497
-                                Branch 489
-             498:               Label
-             499:    7(fvec4)   Load 9(v)
-                                Store 487 499
-                                Branch 489
-             489:             Label
-             500:    7(fvec4) Load 487
-                              Store 485(FragColor) 500
-                              Store 503(m1) 509
-                              Store 510(m2) 512
-             513:   178(bool) Load 305(b)
-                              SelectionMerge 516 None
-                              BranchConditional 513 515 518
-             515:               Label
-             517:         501   Load 503(m1)
-                                Store 514 517
-                                Branch 516
-             518:               Label
-             519:         501   Load 510(m2)
-                                Store 514 519
-                                Branch 516
-             516:             Label
-             520:      8(ptr) AccessChain 514 405
-             521:    7(fvec4) Load 520
-             522:    7(fvec4) Load 485(FragColor)
-             523:    7(fvec4) FAdd 522 521
-                              Store 485(FragColor) 523
+             408:   186(bool) Phi 401 394 407 402
+                              Store 359(b) 408
+             409:   186(bool) Load 359(b)
+             410:  187(bvec4) Load 189(ub41)
+             411:   186(bool) Any 410
+             412:   186(bool) LogicalAnd 409 411
+                              Store 359(b) 412
+             413:   186(bool) Load 359(b)
+             414:  187(bvec4) Load 189(ub41)
+             415:   186(bool) All 414
+             416:   186(bool) LogicalAnd 413 415
+                              Store 359(b) 416
+             417:   186(bool) Load 359(b)
+                              SelectionMerge 419 None
+                              BranchConditional 417 418 419
+             418:               Label
+             420:  187(bvec4)   Load 189(ub41)
+             421:  187(bvec4)   LogicalNot 420
+             422:   186(bool)   Any 421
+                                Branch 419
+             419:             Label
+             423:   186(bool) Phi 417 403 422 418
+                              Store 359(b) 423
+             424:     18(int) Load 20(i)
+             425:     18(int) Load 22(ui)
+             426:     18(int) IAdd 424 425
+             427:     18(int) Load 20(i)
+             428:     18(int) IMul 426 427
+             429:     18(int) Load 22(ui)
+             430:     18(int) ISub 428 429
+             431:     18(int) Load 20(i)
+             432:     18(int) SDiv 430 431
+                              Store 20(i) 432
+             433:     18(int) Load 20(i)
+             434:     18(int) Load 22(ui)
+             435:     18(int) SMod 433 434
+                              Store 20(i) 435
+             436:     18(int) Load 20(i)
+             437:     18(int) Load 22(ui)
+             438:   186(bool) IEqual 436 437
+             439:   186(bool) LogicalNot 438
+                              SelectionMerge 441 None
+                              BranchConditional 439 440 441
+             440:               Label
+             442:     18(int)   Load 20(i)
+             443:     18(int)   Load 22(ui)
+             444:   186(bool)   INotEqual 442 443
+                                SelectionMerge 446 None
+                                BranchConditional 444 445 446
+             445:                 Label
+             447:     18(int)     Load 20(i)
+             448:     18(int)     Load 22(ui)
+             449:   186(bool)     IEqual 447 448
+                                  Branch 446
+             446:               Label
+             450:   186(bool)   Phi 444 440 449 445
+             451:     18(int)   Load 20(i)
+             453:   186(bool)   INotEqual 451 452
+             454:   186(bool)   LogicalNotEqual 450 453
+                                Branch 441
+             441:             Label
+             455:   186(bool) Phi 438 419 454 446
+                              SelectionMerge 457 None
+                              BranchConditional 455 456 457
+             456:               Label
+             458:     18(int)   Load 20(i)
+             460:     18(int)   IAdd 458 459
+                                Store 20(i) 460
+                                Branch 457
+             457:             Label
+             461:    6(float) Load 220(uf)
+             462:    6(float) Load 220(uf)
+             463:    6(float) FAdd 461 462
+             464:    6(float) Load 220(uf)
+             465:    6(float) FMul 463 464
+             466:    6(float) Load 220(uf)
+             467:    6(float) FSub 465 466
+             468:    6(float) Load 220(uf)
+             469:    6(float) FDiv 467 468
+                              Store 196(f) 469
+             470:    7(fvec4) Load 9(v)
+             471:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 470
+             472:    6(float) Load 196(f)
+             473:    6(float) FAdd 472 471
+                              Store 196(f) 473
+             474:    7(fvec4) Load 9(v)
+             475:    7(fvec4) Load 9(v)
+             476:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 474 475
+             477:    6(float) Load 196(f)
+             478:    6(float) FAdd 477 476
+                              Store 196(f) 478
+             479:    7(fvec4) Load 9(v)
+             480:    7(fvec4) Load 9(v)
+             481:    6(float) Dot 479 480
+             482:    6(float) Load 196(f)
+             483:    6(float) FAdd 482 481
+                              Store 196(f) 483
+             484:    6(float) Load 196(f)
+             485:    6(float) Load 220(uf)
+             486:    6(float) FMul 484 485
+             487:    6(float) Load 196(f)
+             488:    6(float) FAdd 487 486
+                              Store 196(f) 488
+             490:    7(fvec4) Load 9(v)
+             491:  489(fvec3) VectorShuffle 490 490 0 1 2
+             492:    7(fvec4) Load 9(v)
+             493:  489(fvec3) VectorShuffle 492 492 0 1 2
+             494:  489(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 491 493
+             495:    6(float) CompositeExtract 494 0
+             496:    6(float) Load 196(f)
+             497:    6(float) FAdd 496 495
+                              Store 196(f) 497
+             498:    6(float) Load 196(f)
+             499:    6(float) Load 220(uf)
+             500:   186(bool) FOrdEqual 498 499
+             501:   186(bool) LogicalNot 500
+                              SelectionMerge 503 None
+                              BranchConditional 501 502 503
+             502:               Label
+             504:    6(float)   Load 196(f)
+             505:    6(float)   Load 220(uf)
+             506:   186(bool)   FOrdNotEqual 504 505
+             507:    6(float)   Load 196(f)
+             509:   186(bool)   FOrdNotEqual 507 508
+             510:   186(bool)   LogicalAnd 506 509
+                                Branch 503
+             503:             Label
+             511:   186(bool) Phi 500 457 510 502
+                              SelectionMerge 513 None
+                              BranchConditional 511 512 513
+             512:               Label
+             514:    6(float)   Load 196(f)
+             516:    6(float)   FAdd 514 515
+                                Store 196(f) 516
+                                Branch 513
+             513:             Label
+             517:     18(int) Load 22(ui)
+             518:     18(int) Load 20(i)
+             519:     18(int) BitwiseAnd 518 517
+                              Store 20(i) 519
+             521:     18(int) Load 20(i)
+             522:     18(int) BitwiseOr 521 520
+                              Store 20(i) 522
+             523:     18(int) Load 22(ui)
+             524:     18(int) Load 20(i)
+             525:     18(int) BitwiseXor 524 523
+                              Store 20(i) 525
+             527:     18(int) Load 20(i)
+             528:     18(int) SMod 527 526
+                              Store 20(i) 528
+             529:     18(int) Load 20(i)
+             530:     18(int) ShiftRightArithmetic 529 452
+                              Store 20(i) 530
+             531:     18(int) Load 22(ui)
+             532:     18(int) Load 20(i)
+             533:     18(int) ShiftLeftLogical 532 531
+                              Store 20(i) 533
+             534:     18(int) Load 20(i)
+             535:     18(int) Not 534
+                              Store 20(i) 535
+             536:   186(bool) Load 359(b)
+             537:   186(bool) LogicalNot 536
+                              Store 359(b) 537
+             540:   186(bool) Load 359(b)
+                              SelectionMerge 543 None
+                              BranchConditional 540 542 552
+             542:               Label
+             544:     18(int)   Load 20(i)
+             545:    6(float)   ConvertSToF 544
+             546:    7(fvec4)   CompositeConstruct 545 545 545 545
+             547:    6(float)   Load 196(f)
+             548:    7(fvec4)   CompositeConstruct 547 547 547 547
+             549:    7(fvec4)   FAdd 546 548
+             550:    7(fvec4)   Load 9(v)
+             551:    7(fvec4)   FAdd 549 550
+                                Store 541 551
+                                Branch 543
+             552:               Label
+             553:    7(fvec4)   Load 9(v)
+                                Store 541 553
+                                Branch 543
+             543:             Label
+             554:    7(fvec4) Load 541
+                              Store 539(FragColor) 554
+                              Store 557(m1) 563
+                              Store 564(m2) 566
+             567:   186(bool) Load 359(b)
+                              SelectionMerge 570 None
+                              BranchConditional 567 569 572
+             569:               Label
+             571:         555   Load 557(m1)
+                                Store 568 571
+                                Branch 570
+             572:               Label
+             573:         555   Load 564(m2)
+                                Store 568 573
+                                Branch 570
+             570:             Label
+             574:      8(ptr) AccessChain 568 459
+             575:    7(fvec4) Load 574
+             576:    7(fvec4) Load 539(FragColor)
+             577:    7(fvec4) FAdd 576 575
+                              Store 539(FragColor) 577
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayCallable.rcall.out b/Test/baseResults/spv.RayCallable.rcall.out
index e399e63..b5e25be 100644
--- a/Test/baseResults/spv.RayCallable.rcall.out
+++ b/Test/baseResults/spv.RayCallable.rcall.out
@@ -1,13 +1,13 @@
 spv.RayCallable.rcall
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint CallableNV 4  "main" 11 14
+                              EntryPoint CallableKHR 4  "main" 11 14
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -19,8 +19,8 @@
                               MemberName 16(dataBlock) 0  "data1"
                               Name 18  ""
                               Name 29  "data0"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 16(dataBlock) Block
                               Decorate 18 Location 1
                               Decorate 29(data0) Location 0
@@ -33,18 +33,18 @@
 11(gl_LaunchIDNV):     10(ptr) Variable Input
 14(gl_LaunchSizeNV):     10(ptr) Variable Input
    16(dataBlock):             TypeStruct 6(int)
-              17:             TypePointer IncomingCallableDataNV 16(dataBlock)
-              18:     17(ptr) Variable IncomingCallableDataNV
+              17:             TypePointer IncomingCallableDataKHR 16(dataBlock)
+              18:     17(ptr) Variable IncomingCallableDataKHR
               19:             TypeInt 32 1
               20:     19(int) Constant 0
               21:      6(int) Constant 256
-              22:             TypePointer IncomingCallableDataNV 6(int)
+              22:             TypePointer IncomingCallableDataKHR 6(int)
               24:      6(int) Constant 2
               25:     19(int) Constant 1
               26:             TypeFloat 32
               27:             TypeVector 26(float) 4
-              28:             TypePointer CallableDataNV 27(fvec4)
-       29(data0):     28(ptr) Variable CallableDataNV
+              28:             TypePointer CallableDataKHR 27(fvec4)
+       29(data0):     28(ptr) Variable CallableDataKHR
          4(main):           2 Function None 3
                5:             Label
            9(id):      8(ptr) Variable Function
@@ -55,6 +55,6 @@
                               Store 13(size) 15
               23:     22(ptr) AccessChain 18 20
                               Store 23 21
-                              ExecuteCallableNV 24 25
+                              ExecuteCallableKHR 24 25
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayConstants.rgen.out b/Test/baseResults/spv.RayConstants.rgen.out
index d939acf..97b47b7 100644
--- a/Test/baseResults/spv.RayConstants.rgen.out
+++ b/Test/baseResults/spv.RayConstants.rgen.out
@@ -1,13 +1,13 @@
 spv.RayConstants.rgen
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint RayGenerationNV 4  "main"
+                              EntryPoint RayGenerationKHR 4  "main"
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -18,7 +18,7 @@
                               Decorate 26(payload) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeAccelerationStructureNV
+               6:             TypeAccelerationStructureKHR
                7:             TypePointer UniformConstant 6
         8(accNV):      7(ptr) Variable UniformConstant
               10:             TypeInt 32 0
@@ -36,11 +36,11 @@
               22:             TypeInt 32 1
               23:     22(int) Constant 1
               24:             TypeVector 14(float) 4
-              25:             TypePointer RayPayloadNV 24(fvec4)
-     26(payload):     25(ptr) Variable RayPayloadNV
+              25:             TypePointer RayPayloadKHR 24(fvec4)
+     26(payload):     25(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
                9:           6 Load 8(accNV)
-                              TraceNV 9 11 12 13 13 12 17 18 20 21 23
+                              TraceRayKHR 9 11 12 13 13 12 17 18 20 21 23
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out
index 91f37e5..47b7c92 100644
--- a/Test/baseResults/spv.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.RayGenShader.rgen.out
@@ -1,13 +1,13 @@
 spv.RayGenShader.rgen
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint RayGenerationNV 4  "main" 11 21
+                              EntryPoint RayGenerationKHR 4  "main" 11 21
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -24,8 +24,8 @@
                               Name 39  ""
                               Name 50  "accNV1"
                               Name 53  "payload"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 29(accNV0) DescriptorSet 0
                               Decorate 29(accNV0) Binding 0
                               MemberDecorate 37(block) 0 Offset 0
@@ -45,24 +45,24 @@
               13:             TypePointer Input 6(int)
               17:      6(int) Constant 1
 21(gl_LaunchSizeNV):     10(ptr) Variable Input
-              27:             TypeAccelerationStructureNV
+              27:             TypeAccelerationStructureKHR
               28:             TypePointer UniformConstant 27
       29(accNV0):     28(ptr) Variable UniformConstant
               35:             TypeFloat 32
               36:             TypeVector 35(float) 3
        37(block):             TypeStruct 36(fvec3) 36(fvec3)
-              38:             TypePointer ShaderRecordBufferNV 37(block)
-              39:     38(ptr) Variable ShaderRecordBufferNV
+              38:             TypePointer ShaderRecordBufferKHR 37(block)
+              39:     38(ptr) Variable ShaderRecordBufferKHR
               40:             TypeInt 32 1
               41:     40(int) Constant 1
-              42:             TypePointer ShaderRecordBufferNV 36(fvec3)
+              42:             TypePointer ShaderRecordBufferKHR 36(fvec3)
               45:   35(float) Constant 1056964608
               46:     40(int) Constant 0
               49:   35(float) Constant 1061158912
       50(accNV1):     28(ptr) Variable UniformConstant
               51:             TypeVector 35(float) 4
-              52:             TypePointer RayPayloadNV 51(fvec4)
-     53(payload):     52(ptr) Variable RayPayloadNV
+              52:             TypePointer RayPayloadKHR 51(fvec4)
+     53(payload):     52(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            8(lx):      7(ptr) Variable Function
@@ -90,6 +90,6 @@
               44:   36(fvec3) Load 43
               47:     42(ptr) AccessChain 39 46
               48:   36(fvec3) Load 47
-                              TraceNV 30 31 32 33 34 12 44 45 48 49 41
+                              TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShader11.rgen.out b/Test/baseResults/spv.RayGenShader11.rgen.out
index 8f2c52b..0bbcab9 100755
--- a/Test/baseResults/spv.RayGenShader11.rgen.out
+++ b/Test/baseResults/spv.RayGenShader11.rgen.out
@@ -1,13 +1,13 @@
 spv.RayGenShader11.rgen
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint RayGenerationNV 4  "main" 11 21
+                              EntryPoint RayGenerationKHR 4  "main" 11 21
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -23,8 +23,8 @@
                               MemberName 37(block) 1  "origin"
                               Name 39  ""
                               Name 52  "payload"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 29(accNV) DescriptorSet 0
                               Decorate 29(accNV) Binding 0
                               MemberDecorate 37(block) 0 Offset 0
@@ -42,23 +42,23 @@
               13:             TypePointer Input 6(int)
               17:      6(int) Constant 1
 21(gl_LaunchSizeNV):     10(ptr) Variable Input
-              27:             TypeAccelerationStructureNV
+              27:             TypeAccelerationStructureKHR
               28:             TypePointer UniformConstant 27
        29(accNV):     28(ptr) Variable UniformConstant
               35:             TypeFloat 32
               36:             TypeVector 35(float) 3
        37(block):             TypeStruct 36(fvec3) 36(fvec3)
-              38:             TypePointer ShaderRecordBufferNV 37(block)
-              39:     38(ptr) Variable ShaderRecordBufferNV
+              38:             TypePointer ShaderRecordBufferKHR 37(block)
+              39:     38(ptr) Variable ShaderRecordBufferKHR
               40:             TypeInt 32 1
               41:     40(int) Constant 1
-              42:             TypePointer ShaderRecordBufferNV 36(fvec3)
+              42:             TypePointer ShaderRecordBufferKHR 36(fvec3)
               45:   35(float) Constant 1056964608
               46:     40(int) Constant 0
               49:   35(float) Constant 1061158912
               50:             TypeVector 35(float) 4
-              51:             TypePointer RayPayloadNV 50(fvec4)
-     52(payload):     51(ptr) Variable RayPayloadNV
+              51:             TypePointer RayPayloadKHR 50(fvec4)
+     52(payload):     51(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            8(lx):      7(ptr) Variable Function
@@ -86,6 +86,6 @@
               44:   36(fvec3) Load 43
               47:     42(ptr) AccessChain 39 46
               48:   36(fvec3) Load 47
-                              TraceNV 30 31 32 33 34 12 44 45 48 49 41
+                              TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayGenShaderArray.rgen.out b/Test/baseResults/spv.RayGenShaderArray.rgen.out
index 7430756..ce5f016 100644
--- a/Test/baseResults/spv.RayGenShaderArray.rgen.out
+++ b/Test/baseResults/spv.RayGenShaderArray.rgen.out
@@ -1,6 +1,6 @@
 spv.RayGenShaderArray.rgen
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 89
 
                               Capability ShaderNonUniformEXT
@@ -10,7 +10,7 @@
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint RayGenerationNV 4  "main" 11 21
+                              EntryPoint RayGenerationKHR 4  "main" 11 21
                               Source GLSL 460
                               SourceExtension  "GL_EXT_nonuniform_qualifier"
                               SourceExtension  "GL_NV_ray_tracing"
@@ -29,8 +29,8 @@
                               Name 36  ""
                               Name 60  "accNV1"
                               Name 88  "payload"
-                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
-                              Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
+                              Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 30(accNV0) DescriptorSet 0
                               Decorate 30(accNV0) Binding 0
                               MemberDecorate 34(block) 0 Offset 0
@@ -40,6 +40,7 @@
                               Decorate 60(accNV1) DescriptorSet 0
                               Decorate 60(accNV1) Binding 1
                               Decorate 75 DecorationNonUniformEXT
+                              Decorate 76 DecorationNonUniformEXT
                               Decorate 77 DecorationNonUniformEXT
                               Decorate 88(payload) Location 0
                2:             TypeVoid
@@ -53,7 +54,7 @@
               13:             TypePointer Input 6(int)
               17:      6(int) Constant 1
 21(gl_LaunchSizeNV):     10(ptr) Variable Input
-              27:             TypeAccelerationStructureNV
+              27:             TypeAccelerationStructureKHR
               28:             TypeRuntimeArray 27
               29:             TypePointer UniformConstant 28
       30(accNV0):     29(ptr) Variable UniformConstant
@@ -61,13 +62,13 @@
               32:             TypeVector 31(float) 3
               33:             TypeInt 32 1
        34(block):             TypeStruct 32(fvec3) 32(fvec3) 33(int)
-              35:             TypePointer ShaderRecordBufferNV 34(block)
-              36:     35(ptr) Variable ShaderRecordBufferNV
+              35:             TypePointer ShaderRecordBufferKHR 34(block)
+              36:     35(ptr) Variable ShaderRecordBufferKHR
               37:     33(int) Constant 2
-              38:             TypePointer ShaderRecordBufferNV 33(int)
+              38:             TypePointer ShaderRecordBufferKHR 33(int)
               41:             TypePointer UniformConstant 27
               48:     33(int) Constant 1
-              49:             TypePointer ShaderRecordBufferNV 32(fvec3)
+              49:             TypePointer ShaderRecordBufferKHR 32(fvec3)
               52:   31(float) Constant 1056964608
               53:     33(int) Constant 0
               56:   31(float) Constant 1061158912
@@ -76,8 +77,8 @@
               59:             TypePointer UniformConstant 58
       60(accNV1):     59(ptr) Variable UniformConstant
               86:             TypeVector 31(float) 4
-              87:             TypePointer RayPayloadNV 86(fvec4)
-     88(payload):     87(ptr) Variable RayPayloadNV
+              87:             TypePointer RayPayloadKHR 86(fvec4)
+     88(payload):     87(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            8(lx):      7(ptr) Variable Function
@@ -108,7 +109,7 @@
               51:   32(fvec3) Load 50
               54:     49(ptr) AccessChain 36 53
               55:   32(fvec3) Load 54
-                              TraceNV 43 44 45 46 47 12 51 52 55 56 48
+                              TraceRayKHR 43 44 45 46 47 12 51 52 55 56 48
               61:     38(ptr) AccessChain 36 37
               62:     33(int) Load 61
               63:     41(ptr) AccessChain 60(accNV1) 62
@@ -121,7 +122,7 @@
               70:   32(fvec3) Load 69
               71:     49(ptr) AccessChain 36 53
               72:   32(fvec3) Load 71
-                              TraceNV 64 65 66 67 68 12 70 52 72 56 48
+                              TraceRayKHR 64 65 66 67 68 12 70 52 72 56 48
               73:     38(ptr) AccessChain 36 37
               74:     33(int) Load 73
               75:     33(int) CopyObject 74
@@ -135,6 +136,6 @@
               83:   32(fvec3) Load 82
               84:     49(ptr) AccessChain 36 53
               85:   32(fvec3) Load 84
-                              TraceNV 77 78 79 80 81 12 83 52 85 56 48
+                              TraceRayKHR 77 78 79 80 81 12 83 52 85 56 48
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out
index bf87829..c5c71a5 100644
--- a/Test/baseResults/spv.accessChain.frag.out
+++ b/Test/baseResults/spv.accessChain.frag.out
@@ -1,6 +1,6 @@
 spv.accessChain.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 222
 
                               Capability Shader
diff --git a/Test/baseResults/spv.aggOps.frag.out b/Test/baseResults/spv.aggOps.frag.out
index f388e8e..976c747 100644
--- a/Test/baseResults/spv.aggOps.frag.out
+++ b/Test/baseResults/spv.aggOps.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 215
 
                               Capability Shader
diff --git a/Test/baseResults/spv.always-discard.frag.out b/Test/baseResults/spv.always-discard.frag.out
index 8074cf8..fb4529e 100644
--- a/Test/baseResults/spv.always-discard.frag.out
+++ b/Test/baseResults/spv.always-discard.frag.out
@@ -1,6 +1,6 @@
 spv.always-discard.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/spv.always-discard2.frag.out b/Test/baseResults/spv.always-discard2.frag.out
index e3fa43a..2d8f66e 100644
--- a/Test/baseResults/spv.always-discard2.frag.out
+++ b/Test/baseResults/spv.always-discard2.frag.out
@@ -1,6 +1,6 @@
 spv.always-discard2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.arbPostDepthCoverage.frag.out b/Test/baseResults/spv.arbPostDepthCoverage.frag.out
index f41c012..d62c677 100644
--- a/Test/baseResults/spv.arbPostDepthCoverage.frag.out
+++ b/Test/baseResults/spv.arbPostDepthCoverage.frag.out
@@ -1,6 +1,6 @@
 spv.arbPostDepthCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out
index 3dd88f3..08bd830 100644
--- a/Test/baseResults/spv.atomic.comp.out
+++ b/Test/baseResults/spv.atomic.comp.out
@@ -1,6 +1,6 @@
 spv.atomic.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 74
 
                               Capability Shader
diff --git a/Test/baseResults/spv.atomicCounter.comp.out b/Test/baseResults/spv.atomicCounter.comp.out
new file mode 100644
index 0000000..46cccc0
--- /dev/null
+++ b/Test/baseResults/spv.atomicCounter.comp.out
@@ -0,0 +1,15 @@
+spv.atomicCounter.comp
+ERROR: 0:5: 'atomic counter types' : not allowed when using GLSL for Vulkan 
+ERROR: 0:7: 'atomic counter types' : not allowed when using GLSL for Vulkan 
+ERROR: 0:14: 'atomic counter types' : not allowed when using GLSL for Vulkan 
+ERROR: 0:16: 'atomicCounterIncrement' : no matching overloaded function found 
+ERROR: 0:16: 'return' : type does not match, or is not convertible to, the function's return type 
+ERROR: 0:21: 'memoryBarrierAtomicCounter' : no matching overloaded function found 
+ERROR: 0:23: 'atomicCounter' : no matching overloaded function found 
+ERROR: 0:23: '=' :  cannot convert from ' const float' to ' temp highp uint'
+ERROR: 0:24: 'atomicCounterDecrement' : no matching overloaded function found 
+ERROR: 0:25: 'atomicCounterIncrement' : no matching overloaded function found 
+ERROR: 10 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.atomicInt64.comp.out b/Test/baseResults/spv.atomicInt64.comp.out
index 9c66aec..5ac910e 100644
--- a/Test/baseResults/spv.atomicInt64.comp.out
+++ b/Test/baseResults/spv.atomicInt64.comp.out
@@ -1,6 +1,6 @@
 spv.atomicInt64.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 149
 
                               Capability Shader
diff --git a/Test/baseResults/spv.barrier.vert.out b/Test/baseResults/spv.barrier.vert.out
index b9369f2..ffc2eaa 100644
--- a/Test/baseResults/spv.barrier.vert.out
+++ b/Test/baseResults/spv.barrier.vert.out
@@ -1,6 +1,6 @@
 spv.barrier.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bitCast.frag.out b/Test/baseResults/spv.bitCast.frag.out
index a687b8d..f590ec7 100644
--- a/Test/baseResults/spv.bitCast.frag.out
+++ b/Test/baseResults/spv.bitCast.frag.out
@@ -1,6 +1,6 @@
 spv.bitCast.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 172
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bool.vert.out b/Test/baseResults/spv.bool.vert.out
index 31eb54c..3e5a190 100644
--- a/Test/baseResults/spv.bool.vert.out
+++ b/Test/baseResults/spv.bool.vert.out
@@ -1,6 +1,6 @@
 spv.bool.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out
index e86ca6b..b0a4023 100644
--- a/Test/baseResults/spv.boolInBlock.frag.out
+++ b/Test/baseResults/spv.boolInBlock.frag.out
@@ -1,6 +1,6 @@
 spv.boolInBlock.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 102
 
                               Capability Shader
diff --git a/Test/baseResults/spv.branch-return.vert.out b/Test/baseResults/spv.branch-return.vert.out
index ca44724..3aacca7 100644
--- a/Test/baseResults/spv.branch-return.vert.out
+++ b/Test/baseResults/spv.branch-return.vert.out
@@ -1,6 +1,6 @@
 spv.branch-return.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.buffer.autoassign.frag.out b/Test/baseResults/spv.buffer.autoassign.frag.out
index 507318f..e526ada 100644
--- a/Test/baseResults/spv.buffer.autoassign.frag.out
+++ b/Test/baseResults/spv.buffer.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.buffer.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle1.frag.out b/Test/baseResults/spv.bufferhandle1.frag.out
index 6e50c70..9d18188 100644
--- a/Test/baseResults/spv.bufferhandle1.frag.out
+++ b/Test/baseResults/spv.bufferhandle1.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle1.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 52
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle10.frag.out b/Test/baseResults/spv.bufferhandle10.frag.out
index a95dc71..5064c7e 100644
--- a/Test/baseResults/spv.bufferhandle10.frag.out
+++ b/Test/baseResults/spv.bufferhandle10.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle10.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle11.frag.out b/Test/baseResults/spv.bufferhandle11.frag.out
index 3469715..783577c 100644
--- a/Test/baseResults/spv.bufferhandle11.frag.out
+++ b/Test/baseResults/spv.bufferhandle11.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle12.frag.out b/Test/baseResults/spv.bufferhandle12.frag.out
index 6c20f02..9f0f4fb 100644
--- a/Test/baseResults/spv.bufferhandle12.frag.out
+++ b/Test/baseResults/spv.bufferhandle12.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 183
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle13.frag.out b/Test/baseResults/spv.bufferhandle13.frag.out
index 1231cf6..516b9fc 100644
--- a/Test/baseResults/spv.bufferhandle13.frag.out
+++ b/Test/baseResults/spv.bufferhandle13.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle13.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 58
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle14.frag.out b/Test/baseResults/spv.bufferhandle14.frag.out
index 940793d..440a032 100644
--- a/Test/baseResults/spv.bufferhandle14.frag.out
+++ b/Test/baseResults/spv.bufferhandle14.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle14.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle15.frag.out b/Test/baseResults/spv.bufferhandle15.frag.out
index ec7064d..f018e21 100644
--- a/Test/baseResults/spv.bufferhandle15.frag.out
+++ b/Test/baseResults/spv.bufferhandle15.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle16.frag.out b/Test/baseResults/spv.bufferhandle16.frag.out
index 16e69d1..cfc6f05 100644
--- a/Test/baseResults/spv.bufferhandle16.frag.out
+++ b/Test/baseResults/spv.bufferhandle16.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle16.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 48
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle18.frag.out b/Test/baseResults/spv.bufferhandle18.frag.out
index 567295d..0a5f6fb 100644
--- a/Test/baseResults/spv.bufferhandle18.frag.out
+++ b/Test/baseResults/spv.bufferhandle18.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle18.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 196
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle2.frag.out b/Test/baseResults/spv.bufferhandle2.frag.out
index 8fee6db..6c43fbe 100644
--- a/Test/baseResults/spv.bufferhandle2.frag.out
+++ b/Test/baseResults/spv.bufferhandle2.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle3.frag.out b/Test/baseResults/spv.bufferhandle3.frag.out
index c02c34c..ba50eb1 100644
--- a/Test/baseResults/spv.bufferhandle3.frag.out
+++ b/Test/baseResults/spv.bufferhandle3.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle3.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle4.frag.out b/Test/baseResults/spv.bufferhandle4.frag.out
index 3f568b0..7dff09c 100644
--- a/Test/baseResults/spv.bufferhandle4.frag.out
+++ b/Test/baseResults/spv.bufferhandle4.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle4.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle5.frag.out b/Test/baseResults/spv.bufferhandle5.frag.out
index 3f1d214..209459b 100644
--- a/Test/baseResults/spv.bufferhandle5.frag.out
+++ b/Test/baseResults/spv.bufferhandle5.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle5.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle6.frag.out b/Test/baseResults/spv.bufferhandle6.frag.out
index 866741f..b373a2f 100644
--- a/Test/baseResults/spv.bufferhandle6.frag.out
+++ b/Test/baseResults/spv.bufferhandle6.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle6.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 165
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle7.frag.out b/Test/baseResults/spv.bufferhandle7.frag.out
index d09eded..9beaee1 100644
--- a/Test/baseResults/spv.bufferhandle7.frag.out
+++ b/Test/baseResults/spv.bufferhandle7.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle7.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle8.frag.out b/Test/baseResults/spv.bufferhandle8.frag.out
index c37fa3f..95abfd9 100644
--- a/Test/baseResults/spv.bufferhandle8.frag.out
+++ b/Test/baseResults/spv.bufferhandle8.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle8.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle9.frag.out b/Test/baseResults/spv.bufferhandle9.frag.out
index 5b91eda..b452acc 100644
--- a/Test/baseResults/spv.bufferhandle9.frag.out
+++ b/Test/baseResults/spv.bufferhandle9.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandle9.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 56
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandleUvec2.frag.out b/Test/baseResults/spv.bufferhandleUvec2.frag.out
index 1e0cbcd..b1944cf 100755
--- a/Test/baseResults/spv.bufferhandleUvec2.frag.out
+++ b/Test/baseResults/spv.bufferhandleUvec2.frag.out
@@ -1,6 +1,6 @@
 spv.bufferhandleUvec2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 71
 
                               Capability Shader
diff --git a/Test/baseResults/spv.bufferhandle_Error.frag.out b/Test/baseResults/spv.bufferhandle_Error.frag.out
index a1ee9a4..345bfa5 100644
--- a/Test/baseResults/spv.bufferhandle_Error.frag.out
+++ b/Test/baseResults/spv.bufferhandle_Error.frag.out
@@ -14,12 +14,15 @@
 ERROR: 0:14: 'buffer_reference' : can only be used with buffer 
 ERROR: 0:30: 'length' :  array must be declared with a size before using this method
 ERROR: 0:31: 'length' :  array must be declared with a size before using this method
-ERROR: 0:35: '=' :  cannot convert from 'layout( column_major std430) buffer reference' to ' temp reference'
-ERROR: 0:40: 'assign' :  cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
+ERROR: 0:32: 'buffer reference indexing' : required extension not requested: GL_EXT_buffer_reference2
+ERROR: 0:32: '' : cannot index reference to buffer containing an unsized array 
+ERROR: 0:32: '' : cannot index buffer reference 
+ERROR: 0:36: '=' :  cannot convert from 'layout( column_major std430) buffer reference' to ' temp reference'
 ERROR: 0:41: 'assign' :  cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
 ERROR: 0:42: 'assign' :  cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
-ERROR: 0:45: '' :  syntax error, unexpected LEFT_BRACE, expecting COMMA or SEMICOLON
-ERROR: 20 compilation errors.  No code generated.
+ERROR: 0:43: 'assign' :  cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
+ERROR: 0:46: '' :  syntax error, unexpected LEFT_BRACE, expecting COMMA or SEMICOLON
+ERROR: 23 compilation errors.  No code generated.
 
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.builtInXFB.vert.out b/Test/baseResults/spv.builtInXFB.vert.out
index 556a698..7a8b17a 100644
--- a/Test/baseResults/spv.builtInXFB.vert.out
+++ b/Test/baseResults/spv.builtInXFB.vert.out
@@ -1,6 +1,6 @@
 spv.builtInXFB.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.computeShaderDerivatives.comp.out b/Test/baseResults/spv.computeShaderDerivatives.comp.out
index d332f35..052ac06 100644
--- a/Test/baseResults/spv.computeShaderDerivatives.comp.out
+++ b/Test/baseResults/spv.computeShaderDerivatives.comp.out
@@ -1,6 +1,6 @@
 spv.computeShaderDerivatives.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 212
 
                               Capability Shader
diff --git a/Test/baseResults/spv.computeShaderDerivatives2.comp.out b/Test/baseResults/spv.computeShaderDerivatives2.comp.out
index be1919b..3ef5ee4 100644
--- a/Test/baseResults/spv.computeShaderDerivatives2.comp.out
+++ b/Test/baseResults/spv.computeShaderDerivatives2.comp.out
@@ -1,6 +1,6 @@
 spv.computeShaderDerivatives2.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 212
 
                               Capability Shader
diff --git a/Test/baseResults/spv.conditionalDemote.frag.out b/Test/baseResults/spv.conditionalDemote.frag.out
index 10f2c23..f255176 100644
--- a/Test/baseResults/spv.conditionalDemote.frag.out
+++ b/Test/baseResults/spv.conditionalDemote.frag.out
@@ -1,6 +1,6 @@
 spv.conditionalDemote.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.conditionalDiscard.frag.out b/Test/baseResults/spv.conditionalDiscard.frag.out
index 2f2dcf2..a05afb9 100644
--- a/Test/baseResults/spv.conditionalDiscard.frag.out
+++ b/Test/baseResults/spv.conditionalDiscard.frag.out
@@ -1,6 +1,6 @@
 spv.conditionalDiscard.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/spv.constConstruct.vert.out b/Test/baseResults/spv.constConstruct.vert.out
index 5922b34..d3250a1 100644
--- a/Test/baseResults/spv.constConstruct.vert.out
+++ b/Test/baseResults/spv.constConstruct.vert.out
@@ -1,7 +1,7 @@
 spv.constConstruct.vert
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 150
 
                               Capability Shader
diff --git a/Test/baseResults/spv.constStruct.vert.out b/Test/baseResults/spv.constStruct.vert.out
index d04f33d..1fce728 100644
--- a/Test/baseResults/spv.constStruct.vert.out
+++ b/Test/baseResults/spv.constStruct.vert.out
@@ -1,6 +1,6 @@
 spv.constStruct.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/spv.constructComposite.comp.out b/Test/baseResults/spv.constructComposite.comp.out
index 6a23ecb..f1179d4 100644
--- a/Test/baseResults/spv.constructComposite.comp.out
+++ b/Test/baseResults/spv.constructComposite.comp.out
@@ -1,6 +1,6 @@
 spv.constructComposite.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.controlFlowAttributes.frag.out b/Test/baseResults/spv.controlFlowAttributes.frag.out
index c708232..c222f25 100644
--- a/Test/baseResults/spv.controlFlowAttributes.frag.out
+++ b/Test/baseResults/spv.controlFlowAttributes.frag.out
@@ -1,16 +1,16 @@
 spv.controlFlowAttributes.frag
-WARNING: 0:20: 'unroll' : expected no arguments 
-WARNING: 0:21: 'dont_unroll' : expected no arguments 
-WARNING: 0:22: 'dependency_infinite' : expected no arguments 
-WARNING: 0:23: 'dependency_length' : expected a single integer argument 
-WARNING: 0:24: '' : attribute with arguments not recognized, skipping 
-WARNING: 0:25: '' : attribute with arguments not recognized, skipping 
-WARNING: 0:26: '' : attribute with arguments not recognized, skipping 
+WARNING: 0:27: 'unroll' : expected no arguments 
+WARNING: 0:28: 'dont_unroll' : expected no arguments 
+WARNING: 0:29: 'dependency_infinite' : expected no arguments 
+WARNING: 0:30: 'dependency_length' : expected a single integer argument 
+WARNING: 0:31: '' : attribute with arguments not recognized, skipping 
+WARNING: 0:32: '' : attribute with arguments not recognized, skipping 
+WARNING: 0:33: '' : attribute with arguments not recognized, skipping 
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 118
+// Generated by (magic number): 80008
+// Id's are bound by 123
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -20,220 +20,231 @@
                               Source GLSL 450
                               SourceExtension  "GL_EXT_control_flow_attributes"
                               Name 4  "main"
-                              Name 8  "i"
-                              Name 36  "i"
-                              Name 47  "cond"
-                              Name 60  "i"
-                              Name 79  "i"
+                              Name 6  "f0("
+                              Name 8  "f1("
+                              Name 23  "i"
+                              Name 41  "i"
+                              Name 52  "cond"
+                              Name 65  "i"
+                              Name 84  "i"
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeInt 32 1
-               7:             TypePointer Function 6(int)
-               9:      6(int) Constant 0
-              16:      6(int) Constant 8
-              17:             TypeBool
-              20:      6(int) Constant 1
-              31:    17(bool) ConstantTrue
-              46:             TypePointer Private 17(bool)
-        47(cond):     46(ptr) Variable Private
-              54:    17(bool) ConstantFalse
-              55:      6(int) Constant 3
+              19:             TypeBool
+              20:    19(bool) ConstantTrue
+              21:             TypeInt 32 1
+              22:             TypePointer Function 21(int)
+              24:     21(int) Constant 0
+              31:     21(int) Constant 8
+              34:     21(int) Constant 1
+              51:             TypePointer Private 19(bool)
+        52(cond):     51(ptr) Variable Private
+              59:    19(bool) ConstantFalse
+              60:     21(int) Constant 3
          4(main):           2 Function None 3
                5:             Label
-            8(i):      7(ptr) Variable Function
-           36(i):      7(ptr) Variable Function
-           60(i):      7(ptr) Variable Function
-           79(i):      7(ptr) Variable Function
-                              Store 8(i) 9
-                              Branch 10
-              10:             Label
-                              LoopMerge 12 13 Unroll 
-                              Branch 14
-              14:             Label
-              15:      6(int) Load 8(i)
-              18:    17(bool) SLessThan 15 16
-                              BranchConditional 18 11 12
-              11:               Label
-                                Branch 13
-              13:               Label
-              19:      6(int)   Load 8(i)
-              21:      6(int)   IAdd 19 20
-                                Store 8(i) 21
-                                Branch 10
-              12:             Label
-                              Branch 22
-              22:             Label
-                              LoopMerge 24 25 DontUnroll 
-                              Branch 23
-              23:             Label
+           23(i):     22(ptr) Variable Function
+           41(i):     22(ptr) Variable Function
+           65(i):     22(ptr) Variable Function
+           84(i):     22(ptr) Variable Function
+                              Store 23(i) 24
                               Branch 25
               25:             Label
-                              Branch 22
-              24:             Label
-                              Branch 26
-              26:             Label
-                              LoopMerge 28 29 DontUnroll 
-                              Branch 30
-              30:             Label
-                              BranchConditional 31 27 28
-              27:               Label
-                                Branch 29
-              29:               Label
-                                Branch 26
-              28:             Label
-                              Branch 32
-              32:             Label
-                              LoopMerge 34 35 DependencyInfinite 
-                              Branch 33
-              33:             Label
-                              Branch 35
-              35:             Label
-                              BranchConditional 31 32 34
-              34:             Label
-                              Store 36(i) 9
+                              LoopMerge 27 28 Unroll 
+                              Branch 29
+              29:             Label
+              30:     21(int) Load 23(i)
+              32:    19(bool) SLessThan 30 31
+                              BranchConditional 32 26 27
+              26:               Label
+                                Branch 28
+              28:               Label
+              33:     21(int)   Load 23(i)
+              35:     21(int)   IAdd 33 34
+                                Store 23(i) 35
+                                Branch 25
+              27:             Label
+              36:           2 FunctionCall 6(f0()
                               Branch 37
               37:             Label
-                              LoopMerge 39 40 DependencyLength  4
-                              Branch 41
-              41:             Label
-              42:      6(int) Load 36(i)
-              43:    17(bool) SLessThan 42 16
-                              BranchConditional 43 38 39
-              38:               Label
-                                Branch 40
-              40:               Label
-              44:      6(int)   Load 36(i)
-              45:      6(int)   IAdd 44 20
-                                Store 36(i) 45
-                                Branch 37
+                              LoopMerge 39 40 DependencyInfinite 
+                              Branch 38
+              38:             Label
+                              Branch 40
+              40:             Label
+                              BranchConditional 20 37 39
               39:             Label
-              48:    17(bool) Load 47(cond)
-                              SelectionMerge 50 Flatten 
-                              BranchConditional 48 49 50
-              49:               Label
-                                Branch 50
-              50:             Label
-              51:    17(bool) Load 47(cond)
-                              SelectionMerge 53 DontFlatten 
-                              BranchConditional 51 52 53
-              52:               Label
-                                Store 47(cond) 54
-                                Branch 53
-              53:             Label
-                              SelectionMerge 57 DontFlatten 
-                              Switch 55 57 
-                                     case 3: 56
-              56:               Label
-                                Branch 57
-              57:             Label
-                              Store 60(i) 9
-                              Branch 61
-              61:             Label
-                              LoopMerge 63 64 None
-                              Branch 65
-              65:             Label
-              66:      6(int) Load 60(i)
-              67:    17(bool) SLessThan 66 16
-                              BranchConditional 67 62 63
-              62:               Label
-                                Branch 64
-              64:               Label
-              68:      6(int)   Load 60(i)
-              69:      6(int)   IAdd 68 20
-                                Store 60(i) 69
-                                Branch 61
-              63:             Label
+                              Store 41(i) 24
+                              Branch 42
+              42:             Label
+                              LoopMerge 44 45 DependencyLength  4
+                              Branch 46
+              46:             Label
+              47:     21(int) Load 41(i)
+              48:    19(bool) SLessThan 47 31
+                              BranchConditional 48 43 44
+              43:               Label
+                                Branch 45
+              45:               Label
+              49:     21(int)   Load 41(i)
+              50:     21(int)   IAdd 49 34
+                                Store 41(i) 50
+                                Branch 42
+              44:             Label
+              53:    19(bool) Load 52(cond)
+                              SelectionMerge 55 Flatten 
+                              BranchConditional 53 54 55
+              54:               Label
+                                Branch 55
+              55:             Label
+              56:    19(bool) Load 52(cond)
+                              SelectionMerge 58 DontFlatten 
+                              BranchConditional 56 57 58
+              57:               Label
+                                Store 52(cond) 59
+                                Branch 58
+              58:             Label
+                              SelectionMerge 62 DontFlatten 
+                              Switch 60 62 
+                                     case 3: 61
+              61:               Label
+                                Branch 62
+              62:             Label
+                              Store 65(i) 24
+                              Branch 66
+              66:             Label
+                              LoopMerge 68 69 None
                               Branch 70
               70:             Label
-                              LoopMerge 72 73 None
-                              Branch 74
-              74:             Label
-                              BranchConditional 31 71 72
-              71:               Label
-                                Branch 73
-              73:               Label
-                                Branch 70
-              72:             Label
+              71:     21(int) Load 65(i)
+              72:    19(bool) SLessThan 71 31
+                              BranchConditional 72 67 68
+              67:               Label
+                                Branch 69
+              69:               Label
+              73:     21(int)   Load 65(i)
+              74:     21(int)   IAdd 73 34
+                                Store 65(i) 74
+                                Branch 66
+              68:             Label
                               Branch 75
               75:             Label
                               LoopMerge 77 78 None
-                              Branch 76
-              76:             Label
-                              Branch 78
-              78:             Label
-                              BranchConditional 31 75 77
+                              Branch 79
+              79:             Label
+                              BranchConditional 20 76 77
+              76:               Label
+                                Branch 78
+              78:               Label
+                                Branch 75
               77:             Label
-                              Store 79(i) 9
                               Branch 80
               80:             Label
                               LoopMerge 82 83 None
-                              Branch 84
-              84:             Label
-              85:      6(int) Load 79(i)
-              86:    17(bool) SLessThan 85 16
-                              BranchConditional 86 81 82
-              81:               Label
-                                Branch 83
-              83:               Label
-              87:      6(int)   Load 79(i)
-              88:      6(int)   IAdd 87 20
-                                Store 79(i) 88
-                                Branch 80
+                              Branch 81
+              81:             Label
+                              Branch 83
+              83:             Label
+                              BranchConditional 20 80 82
               82:             Label
-              89:    17(bool) Load 47(cond)
-                              SelectionMerge 91 None
-                              BranchConditional 89 90 91
-              90:               Label
-                                Branch 91
-              91:             Label
-              92:    17(bool) Load 47(cond)
-                              SelectionMerge 94 None
-                              BranchConditional 92 93 94
-              93:               Label
-                                Store 47(cond) 54
-                                Branch 94
-              94:             Label
+                              Store 84(i) 24
+                              Branch 85
+              85:             Label
+                              LoopMerge 87 88 None
+                              Branch 89
+              89:             Label
+              90:     21(int) Load 84(i)
+              91:    19(bool) SLessThan 90 31
+                              BranchConditional 91 86 87
+              86:               Label
+                                Branch 88
+              88:               Label
+              92:     21(int)   Load 84(i)
+              93:     21(int)   IAdd 92 34
+                                Store 84(i) 93
+                                Branch 85
+              87:             Label
+              94:    19(bool) Load 52(cond)
                               SelectionMerge 96 None
-                              Switch 55 96 
-                                     case 3: 95
+                              BranchConditional 94 95 96
               95:               Label
                                 Branch 96
               96:             Label
-                              Branch 99
-              99:             Label
-                              LoopMerge 101 102 Unroll DontUnroll DependencyLength  2
-                              Branch 103
-             103:             Label
-             104:    17(bool) Load 47(cond)
-                              BranchConditional 104 100 101
-             100:               Label
-                                Branch 102
-             102:               Label
+              97:    19(bool) Load 52(cond)
+                              SelectionMerge 99 None
+                              BranchConditional 97 98 99
+              98:               Label
+                                Store 52(cond) 59
                                 Branch 99
+              99:             Label
+                              SelectionMerge 101 None
+                              Switch 60 101 
+                                     case 3: 100
+             100:               Label
+                                Branch 101
              101:             Label
-                              SelectionMerge 106 DontFlatten 
-                              Switch 55 106 
-                                     case 3: 105
+                              Branch 104
+             104:             Label
+                              LoopMerge 106 107 Unroll DontUnroll DependencyLength  2
+                              Branch 108
+             108:             Label
+             109:    19(bool) Load 52(cond)
+                              BranchConditional 109 105 106
              105:               Label
-                                Branch 106
+                                Branch 107
+             107:               Label
+                                Branch 104
              106:             Label
-             109:    17(bool) Load 47(cond)
-                              SelectionMerge 111 Flatten 
-                              BranchConditional 109 110 111
+                              SelectionMerge 111 DontFlatten 
+                              Switch 60 111 
+                                     case 3: 110
              110:               Label
                                 Branch 111
              111:             Label
-                              Branch 112
-             112:             Label
-                              LoopMerge 114 115 DependencyInfinite 
-                              Branch 116
-             116:             Label
-             117:    17(bool) Load 47(cond)
-                              BranchConditional 117 113 114
-             113:               Label
-                                Branch 115
+             114:    19(bool) Load 52(cond)
+                              SelectionMerge 116 Flatten 
+                              BranchConditional 114 115 116
              115:               Label
-                                Branch 112
-             114:             Label
+                                Branch 116
+             116:             Label
+                              Branch 117
+             117:             Label
+                              LoopMerge 119 120 DependencyInfinite 
+                              Branch 121
+             121:             Label
+             122:    19(bool) Load 52(cond)
+                              BranchConditional 122 118 119
+             118:               Label
+                                Branch 120
+             120:               Label
+                                Branch 117
+             119:             Label
+                              Return
+                              FunctionEnd
+          6(f0():           2 Function None 3
+               7:             Label
+                              Branch 10
+              10:             Label
+                              LoopMerge 12 13 DontUnroll 
+                              Branch 11
+              11:             Label
+                              Branch 13
+              13:             Label
+                              Branch 10
+              12:             Label
+                              Unreachable
+                              FunctionEnd
+          8(f1():           2 Function None 3
+               9:             Label
+                              Branch 14
+              14:             Label
+                              LoopMerge 16 17 DontUnroll 
+                              Branch 18
+              18:             Label
+                              BranchConditional 20 15 16
+              15:               Label
+                                Branch 17
+              17:               Label
+                                Branch 14
+              16:             Label
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out
index a321532..60129dd 100644
--- a/Test/baseResults/spv.conversion.frag.out
+++ b/Test/baseResults/spv.conversion.frag.out
@@ -1,6 +1,6 @@
 spv.conversion.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 455
 
                               Capability Shader
diff --git a/Test/baseResults/spv.coopmat.comp.out b/Test/baseResults/spv.coopmat.comp.out
index acdcbc4..4ef7028 100644
--- a/Test/baseResults/spv.coopmat.comp.out
+++ b/Test/baseResults/spv.coopmat.comp.out
@@ -1,6 +1,6 @@
 spv.coopmat.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 228
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dataOut.frag.out b/Test/baseResults/spv.dataOut.frag.out
index f384721..5dc14ce 100644
--- a/Test/baseResults/spv.dataOut.frag.out
+++ b/Test/baseResults/spv.dataOut.frag.out
@@ -1,6 +1,6 @@
 spv.dataOut.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dataOutIndirect.frag.out b/Test/baseResults/spv.dataOutIndirect.frag.out
index f371601..fa6a0da 100644
--- a/Test/baseResults/spv.dataOutIndirect.frag.out
+++ b/Test/baseResults/spv.dataOutIndirect.frag.out
@@ -1,6 +1,6 @@
 spv.dataOutIndirect.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dataOutIndirect.vert.out b/Test/baseResults/spv.dataOutIndirect.vert.out
index 9ba988c..fab5e58 100644
--- a/Test/baseResults/spv.dataOutIndirect.vert.out
+++ b/Test/baseResults/spv.dataOutIndirect.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:3: attribute deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-after-continue.vert.out b/Test/baseResults/spv.dead-after-continue.vert.out
new file mode 100644
index 0000000..f3b8792
--- /dev/null
+++ b/Test/baseResults/spv.dead-after-continue.vert.out
@@ -0,0 +1,54 @@
+spv.dead-after-continue.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 29
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 20 28
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "i"
+                              Name 20  "o"
+                              Name 28  "c"
+                              Decorate 20(o) Location 0
+                              Decorate 28(c) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              16:      6(int) Constant 5
+              17:             TypeBool
+              19:             TypePointer Output 6(int)
+           20(o):     19(ptr) Variable Output
+              21:      6(int) Constant 1
+              23:      6(int) Constant 2
+              26:      6(int) Constant 3
+              27:             TypePointer Input 6(int)
+           28(c):     27(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+            8(i):      7(ptr) Variable Function
+                              Store 8(i) 9
+                              Branch 10
+              10:             Label
+                              LoopMerge 12 13 None
+                              Branch 14
+              14:             Label
+              15:      6(int) Load 8(i)
+              18:    17(bool) SLessThan 15 16
+                              BranchConditional 18 11 12
+              11:               Label
+                                Store 20(o) 21
+                                Branch 13
+              13:               Label
+              24:      6(int)   Load 8(i)
+              25:      6(int)   IAdd 24 21
+                                Store 8(i) 25
+                                Branch 10
+              12:             Label
+                              Store 20(o) 26
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dead-after-discard.frag.out b/Test/baseResults/spv.dead-after-discard.frag.out
new file mode 100644
index 0000000..f378d04
--- /dev/null
+++ b/Test/baseResults/spv.dead-after-discard.frag.out
@@ -0,0 +1,31 @@
+spv.dead-after-discard.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 15
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 8 14
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "o"
+                              Name 14  "c"
+                              Decorate 8(o) Location 0
+                              Decorate 14(c) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Output 6(int)
+            8(o):      7(ptr) Variable Output
+               9:      6(int) Constant 1
+              11:      6(int) Constant 3
+              12:             TypeFloat 32
+              13:             TypePointer Input 12(float)
+           14(c):     13(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 8(o) 9
+                              Kill
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dead-after-loop-break.vert.out b/Test/baseResults/spv.dead-after-loop-break.vert.out
new file mode 100644
index 0000000..b653e39
--- /dev/null
+++ b/Test/baseResults/spv.dead-after-loop-break.vert.out
@@ -0,0 +1,67 @@
+spv.dead-after-loop-break.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 36
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 8 25
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "o"
+                              Name 11  "i"
+                              Name 25  "c"
+                              Decorate 8(o) Location 0
+                              Decorate 25(c) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Output 6(int)
+            8(o):      7(ptr) Variable Output
+               9:      6(int) Constant 1
+              10:             TypePointer Function 6(int)
+              12:      6(int) Constant 0
+              19:      6(int) Constant 5
+              20:             TypeBool
+              22:      6(int) Constant 2
+              24:             TypePointer Input 6(int)
+           25(c):     24(ptr) Variable Input
+              30:      6(int) Constant 3
+              32:      6(int) Constant 4
+              35:      6(int) Constant 6
+         4(main):           2 Function None 3
+               5:             Label
+           11(i):     10(ptr) Variable Function
+                              Store 8(o) 9
+                              Store 11(i) 12
+                              Branch 13
+              13:             Label
+                              LoopMerge 15 16 None
+                              Branch 17
+              17:             Label
+              18:      6(int) Load 11(i)
+              21:    20(bool) SLessThan 18 19
+                              BranchConditional 21 14 15
+              14:               Label
+                                Store 8(o) 22
+              23:      6(int)   Load 11(i)
+              26:      6(int)   Load 25(c)
+              27:    20(bool)   IEqual 23 26
+                                SelectionMerge 29 None
+                                BranchConditional 27 28 29
+              28:                 Label
+                                  Store 8(o) 30
+                                  Branch 15
+              29:               Label
+                                Store 8(o) 19
+                                Branch 16
+              16:               Label
+              33:      6(int)   Load 11(i)
+              34:      6(int)   IAdd 33 9
+                                Store 11(i) 34
+                                Branch 13
+              15:             Label
+                              Store 8(o) 35
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dead-after-return.vert.out b/Test/baseResults/spv.dead-after-return.vert.out
new file mode 100644
index 0000000..d963f9f
--- /dev/null
+++ b/Test/baseResults/spv.dead-after-return.vert.out
@@ -0,0 +1,29 @@
+spv.dead-after-return.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 14
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 8 13
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "o"
+                              Name 13  "c"
+                              Decorate 8(o) Location 0
+                              Decorate 13(c) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Output 6(int)
+            8(o):      7(ptr) Variable Output
+               9:      6(int) Constant 1
+              11:      6(int) Constant 3
+              12:             TypePointer Input 6(int)
+           13(c):     12(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 8(o) 9
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dead-after-switch-break.vert.out b/Test/baseResults/spv.dead-after-switch-break.vert.out
new file mode 100644
index 0000000..a506012
--- /dev/null
+++ b/Test/baseResults/spv.dead-after-switch-break.vert.out
@@ -0,0 +1,40 @@
+spv.dead-after-switch-break.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 21
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 8 14
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "c"
+                              Name 14  "o"
+                              Decorate 8(c) Location 0
+                              Decorate 14(o) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Input 6(int)
+            8(c):      7(ptr) Variable Input
+              13:             TypePointer Output 6(int)
+           14(o):     13(ptr) Variable Output
+              15:      6(int) Constant 1
+              17:      6(int) Constant 2
+              20:      6(int) Constant 3
+         4(main):           2 Function None 3
+               5:             Label
+               9:      6(int) Load 8(c)
+                              SelectionMerge 12 None
+                              Switch 9 11 
+                                     case 0: 10
+              11:               Label
+                                Branch 12
+              10:               Label
+                                Store 14(o) 15
+                                Branch 12
+              12:             Label
+                              Store 14(o) 20
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dead-complex-continue-after-return.vert.out b/Test/baseResults/spv.dead-complex-continue-after-return.vert.out
new file mode 100644
index 0000000..60e81bd
--- /dev/null
+++ b/Test/baseResults/spv.dead-complex-continue-after-return.vert.out
@@ -0,0 +1,55 @@
+spv.dead-complex-continue-after-return.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 31
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 11 30
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "i"
+                              Name 11  "o"
+                              Name 30  "c"
+                              Decorate 11(o) Location 0
+                              Decorate 30(c) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              10:             TypePointer Output 6(int)
+           11(o):     10(ptr) Variable Output
+              12:      6(int) Constant 1
+              19:      6(int) Constant 5
+              20:             TypeBool
+              22:      6(int) Constant 2
+              24:      6(int) Constant 3
+              27:      6(int) Constant 99
+              28:      6(int) Constant 4
+              29:             TypePointer Input 6(int)
+           30(c):     29(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+            8(i):      7(ptr) Variable Function
+                              Store 8(i) 9
+                              Store 11(o) 12
+                              Store 8(i) 9
+                              Branch 13
+              13:             Label
+                              LoopMerge 15 16 None
+                              Branch 17
+              17:             Label
+              18:      6(int) Load 8(i)
+              21:    20(bool) SLessThan 18 19
+                              BranchConditional 21 14 15
+              14:               Label
+                                Store 11(o) 22
+                                Return
+              16:               Label
+                                Branch 13
+              15:             Label
+                              Store 11(o) 28
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dead-complex-merge-after-return.vert.out b/Test/baseResults/spv.dead-complex-merge-after-return.vert.out
new file mode 100644
index 0000000..609a3ce
--- /dev/null
+++ b/Test/baseResults/spv.dead-complex-merge-after-return.vert.out
@@ -0,0 +1,51 @@
+spv.dead-complex-merge-after-return.vert
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 36
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 11 27
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "i"
+                              Name 11  "o"
+                              Name 27  "c"
+                              Decorate 11(o) Location 0
+                              Decorate 27(c) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              10:             TypePointer Output 6(int)
+           11(o):     10(ptr) Variable Output
+              12:      6(int) Constant 1
+              17:      6(int) Constant 2
+              19:      6(int) Constant 3
+              22:      6(int) Constant 5
+              23:             TypeBool
+              25:      6(int) Constant 4
+              26:             TypePointer Input 6(int)
+           27(c):     26(ptr) Variable Input
+              32:      6(int) Constant 100
+              34:      6(int) Constant 200
+              35:      6(int) Constant 300
+         4(main):           2 Function None 3
+               5:             Label
+            8(i):      7(ptr) Variable Function
+                              Store 8(i) 9
+                              Store 11(o) 12
+                              Branch 13
+              13:             Label
+                              LoopMerge 15 16 None
+                              Branch 14
+              14:             Label
+                              Store 11(o) 17
+                              Return
+              16:             Label
+                              Branch 13
+              15:             Label
+                              Unreachable
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out
index e212089..b68de49 100644
--- a/Test/baseResults/spv.debugInfo.1.1.frag.out
+++ b/Test/baseResults/spv.debugInfo.1.1.frag.out
@@ -2,7 +2,7 @@
 error: SPIRV-Tools Validation Errors
 error: Invalid SPIR-V binary version 1.3 for target environment SPIR-V 1.0 (under OpenGL 4.5 semantics).
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 124
 
                               Capability Shader
diff --git a/Test/baseResults/spv.debugInfo.frag.out b/Test/baseResults/spv.debugInfo.frag.out
index aaa988d..f27aac0 100644
--- a/Test/baseResults/spv.debugInfo.frag.out
+++ b/Test/baseResults/spv.debugInfo.frag.out
@@ -1,6 +1,6 @@
 spv.debugInfo.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 124
 
                               Capability Shader
diff --git a/Test/baseResults/spv.debugPrintf.frag.out b/Test/baseResults/spv.debugPrintf.frag.out
new file mode 100644
index 0000000..dbd0b4e
--- /dev/null
+++ b/Test/baseResults/spv.debugPrintf.frag.out
@@ -0,0 +1,31 @@
+spv.debugPrintf.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 17
+
+                              Capability Shader
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "GLSL.std.450"
+              11:             ExtInstImport  "NonSemantic.DebugPrintf"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+               6:             String  "ASDF \ ? \ %d %d %d"
+              13:             String  "ABAZ"
+              15:             String  "B#$B1Z"
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_debug_printf"
+                              Name 4  "main"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               7:             TypeInt 32 1
+               8:      7(int) Constant 1
+               9:      7(int) Constant 2
+              10:      7(int) Constant 3
+         4(main):           2 Function None 3
+               5:             Label
+              12:           2 ExtInst 11(NonSemantic.DebugPrintf) 1(DebugPrintf) 6 8 9 10
+              14:           2 ExtInst 11(NonSemantic.DebugPrintf) 1(DebugPrintf) 13
+              16:           2 ExtInst 11(NonSemantic.DebugPrintf) 1(DebugPrintf) 15
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debugPrintf_Error.frag.out b/Test/baseResults/spv.debugPrintf_Error.frag.out
new file mode 100644
index 0000000..31ddd9d
--- /dev/null
+++ b/Test/baseResults/spv.debugPrintf_Error.frag.out
@@ -0,0 +1,7 @@
+spv.debugPrintf_Error.frag
+ERROR: 0:7: 'string' : Expected hex value in escape sequence 
+ERROR: 0:10: 'string' : Invalid escape sequence 
+ERROR: 2 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.deepRvalue.frag.out b/Test/baseResults/spv.deepRvalue.frag.out
index 1869d76..776fdf8 100644
--- a/Test/baseResults/spv.deepRvalue.frag.out
+++ b/Test/baseResults/spv.deepRvalue.frag.out
@@ -1,6 +1,6 @@
 spv.deepRvalue.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 152
 
                               Capability Shader
diff --git a/Test/baseResults/spv.depthOut.frag.out b/Test/baseResults/spv.depthOut.frag.out
index 59afd3e..d212c89 100644
--- a/Test/baseResults/spv.depthOut.frag.out
+++ b/Test/baseResults/spv.depthOut.frag.out
@@ -1,6 +1,6 @@
 spv.depthOut.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.deviceGroup.frag.out b/Test/baseResults/spv.deviceGroup.frag.out
index 6710b77..2d16272 100644
--- a/Test/baseResults/spv.deviceGroup.frag.out
+++ b/Test/baseResults/spv.deviceGroup.frag.out
@@ -1,6 +1,6 @@
 spv.deviceGroup.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.discard-dce.frag.out b/Test/baseResults/spv.discard-dce.frag.out
index 9d138f2..c4a5cb2 100644
--- a/Test/baseResults/spv.discard-dce.frag.out
+++ b/Test/baseResults/spv.discard-dce.frag.out
@@ -1,6 +1,6 @@
 spv.discard-dce.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/spv.do-simple.vert.out b/Test/baseResults/spv.do-simple.vert.out
index 6014dfe..826cc1c 100644
--- a/Test/baseResults/spv.do-simple.vert.out
+++ b/Test/baseResults/spv.do-simple.vert.out
@@ -1,6 +1,6 @@
 spv.do-simple.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.do-while-continue-break.vert.out b/Test/baseResults/spv.do-while-continue-break.vert.out
index 2838880..36315a2 100644
--- a/Test/baseResults/spv.do-while-continue-break.vert.out
+++ b/Test/baseResults/spv.do-while-continue-break.vert.out
@@ -1,6 +1,6 @@
 spv.do-while-continue-break.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.doWhileLoop.frag.out b/Test/baseResults/spv.doWhileLoop.frag.out
index 808466e..945f0d7 100644
--- a/Test/baseResults/spv.doWhileLoop.frag.out
+++ b/Test/baseResults/spv.doWhileLoop.frag.out
@@ -1,6 +1,6 @@
 spv.doWhileLoop.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/spv.double.comp.out b/Test/baseResults/spv.double.comp.out
index e9470ac..7961fc6 100644
--- a/Test/baseResults/spv.double.comp.out
+++ b/Test/baseResults/spv.double.comp.out
@@ -1,6 +1,6 @@
 spv.double.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.drawParams.vert.out b/Test/baseResults/spv.drawParams.vert.out
index 8f3e2c0..e9d4970 100644
--- a/Test/baseResults/spv.drawParams.vert.out
+++ b/Test/baseResults/spv.drawParams.vert.out
@@ -1,6 +1,6 @@
 spv.drawParams.vert
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.earlyReturnDiscard.frag.out b/Test/baseResults/spv.earlyReturnDiscard.frag.out
index c44b722..a4eb8ca 100644
--- a/Test/baseResults/spv.earlyReturnDiscard.frag.out
+++ b/Test/baseResults/spv.earlyReturnDiscard.frag.out
@@ -1,6 +1,6 @@
 spv.earlyReturnDiscard.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 110
 
                               Capability Shader
@@ -160,7 +160,7 @@
              102:                 Label
                                   Return
              100:               Label
-                                Branch 67
+                                Unreachable
               67:             Label
              106:    7(fvec4) Load 9(color)
              107:    7(fvec4) Load 13(color2)
diff --git a/Test/baseResults/spv.explicittypes.frag.out b/Test/baseResults/spv.explicittypes.frag.out
index c07f66d..9318913 100644
--- a/Test/baseResults/spv.explicittypes.frag.out
+++ b/Test/baseResults/spv.explicittypes.frag.out
@@ -1,6 +1,6 @@
 spv.explicittypes.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 576
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
new file mode 100644
index 0000000..3cd60c7
--- /dev/null
+++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
@@ -0,0 +1,188 @@
+spv.ext.AnyHitShader.rahit
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 94
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeEXT"
+                              Name 18  "v2"
+                              Name 20  "gl_PrimitiveID"
+                              Name 22  "v3"
+                              Name 23  "gl_InstanceID"
+                              Name 25  "v4"
+                              Name 26  "gl_InstanceCustomIndexEXT"
+                              Name 31  "v5"
+                              Name 33  "gl_WorldRayOriginEXT"
+                              Name 35  "v6"
+                              Name 36  "gl_WorldRayDirectionEXT"
+                              Name 38  "v7"
+                              Name 39  "gl_ObjectRayOriginEXT"
+                              Name 41  "v8"
+                              Name 42  "gl_ObjectRayDirectionEXT"
+                              Name 45  "v9"
+                              Name 47  "gl_RayTminEXT"
+                              Name 49  "v10"
+                              Name 50  "gl_RayTmaxEXT"
+                              Name 52  "v11"
+                              Name 53  "gl_HitTEXT"
+                              Name 56  "v12"
+                              Name 58  "gl_HitKindEXT"
+                              Name 62  "v13"
+                              Name 64  "gl_ObjectToWorldEXT"
+                              Name 66  "v14"
+                              Name 67  "gl_WorldToObjectEXT"
+                              Name 69  "v15"
+                              Name 70  "gl_GeometryIndexEXT"
+                              Name 75  "v16"
+                              Name 76  "gl_ObjectToWorld3x4EXT"
+                              Name 79  "v17"
+                              Name 80  "gl_WorldToObject3x4EXT"
+                              Name 84  "incomingPayload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 26(gl_InstanceCustomIndexEXT) BuiltIn InstanceCustomIndexKHR
+                              Decorate 33(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
+                              Decorate 36(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR
+                              Decorate 39(gl_ObjectRayOriginEXT) BuiltIn ObjectRayOriginKHR
+                              Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
+                              Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
+                              Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
+                              Decorate 53(gl_HitTEXT) BuiltIn HitTKHR
+                              Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR
+                              Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
+                              Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
+                              Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR
+                              Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
+                              Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
+                              Decorate 84(incomingPayload) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+              10:             TypePointer Input 7(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+14(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:             TypePointer Input 16(int)
+20(gl_PrimitiveID):     19(ptr) Variable Input
+23(gl_InstanceID):     19(ptr) Variable Input
+26(gl_InstanceCustomIndexEXT):     19(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:             TypePointer Input 29(fvec3)
+33(gl_WorldRayOriginEXT):     32(ptr) Variable Input
+36(gl_WorldRayDirectionEXT):     32(ptr) Variable Input
+39(gl_ObjectRayOriginEXT):     32(ptr) Variable Input
+42(gl_ObjectRayDirectionEXT):     32(ptr) Variable Input
+              44:             TypePointer Function 28(float)
+              46:             TypePointer Input 28(float)
+47(gl_RayTminEXT):     46(ptr) Variable Input
+50(gl_RayTmaxEXT):     46(ptr) Variable Input
+  53(gl_HitTEXT):     46(ptr) Variable Input
+              55:             TypePointer Function 6(int)
+              57:             TypePointer Input 6(int)
+58(gl_HitKindEXT):     57(ptr) Variable Input
+              60:             TypeMatrix 29(fvec3) 4
+              61:             TypePointer Function 60
+              63:             TypePointer Input 60
+64(gl_ObjectToWorldEXT):     63(ptr) Variable Input
+67(gl_WorldToObjectEXT):     63(ptr) Variable Input
+70(gl_GeometryIndexEXT):     19(ptr) Variable Input
+              72:             TypeVector 28(float) 4
+              73:             TypeMatrix 72(fvec4) 3
+              74:             TypePointer Function 73
+76(gl_ObjectToWorld3x4EXT):     63(ptr) Variable Input
+80(gl_WorldToObject3x4EXT):     63(ptr) Variable Input
+              83:             TypePointer IncomingRayPayloadKHR 72(fvec4)
+84(incomingPayload):     83(ptr) Variable IncomingRayPayloadKHR
+              85:   28(float) Constant 1056964608
+              86:   72(fvec4) ConstantComposite 85 85 85 85
+              88:     16(int) Constant 1
+              89:             TypeBool
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          18(v2):     17(ptr) Variable Function
+          22(v3):     17(ptr) Variable Function
+          25(v4):     17(ptr) Variable Function
+          31(v5):     30(ptr) Variable Function
+          35(v6):     30(ptr) Variable Function
+          38(v7):     30(ptr) Variable Function
+          41(v8):     30(ptr) Variable Function
+          45(v9):     44(ptr) Variable Function
+         49(v10):     44(ptr) Variable Function
+         52(v11):     44(ptr) Variable Function
+         56(v12):     55(ptr) Variable Function
+         62(v13):     61(ptr) Variable Function
+         66(v14):     61(ptr) Variable Function
+         69(v15):     17(ptr) Variable Function
+         75(v16):     74(ptr) Variable Function
+         79(v17):     74(ptr) Variable Function
+              12:    7(ivec3) Load 11(gl_LaunchIDEXT)
+                              Store 9(v0) 12
+              15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
+                              Store 13(v1) 15
+              21:     16(int) Load 20(gl_PrimitiveID)
+                              Store 18(v2) 21
+              24:     16(int) Load 23(gl_InstanceID)
+                              Store 22(v3) 24
+              27:     16(int) Load 26(gl_InstanceCustomIndexEXT)
+                              Store 25(v4) 27
+              34:   29(fvec3) Load 33(gl_WorldRayOriginEXT)
+                              Store 31(v5) 34
+              37:   29(fvec3) Load 36(gl_WorldRayDirectionEXT)
+                              Store 35(v6) 37
+              40:   29(fvec3) Load 39(gl_ObjectRayOriginEXT)
+                              Store 38(v7) 40
+              43:   29(fvec3) Load 42(gl_ObjectRayDirectionEXT)
+                              Store 41(v8) 43
+              48:   28(float) Load 47(gl_RayTminEXT)
+                              Store 45(v9) 48
+              51:   28(float) Load 50(gl_RayTmaxEXT)
+                              Store 49(v10) 51
+              54:   28(float) Load 53(gl_HitTEXT)
+                              Store 52(v11) 54
+              59:      6(int) Load 58(gl_HitKindEXT)
+                              Store 56(v12) 59
+              65:          60 Load 64(gl_ObjectToWorldEXT)
+                              Store 62(v13) 65
+              68:          60 Load 67(gl_WorldToObjectEXT)
+                              Store 66(v14) 68
+              71:     16(int) Load 70(gl_GeometryIndexEXT)
+                              Store 69(v15) 71
+              77:          60 Load 76(gl_ObjectToWorld3x4EXT)
+              78:          73 Transpose 77
+                              Store 75(v16) 78
+              81:          60 Load 80(gl_WorldToObject3x4EXT)
+              82:          73 Transpose 81
+                              Store 79(v17) 82
+                              Store 84(incomingPayload) 86
+              87:     16(int) Load 18(v2)
+              90:    89(bool) IEqual 87 88
+                              SelectionMerge 92 None
+                              BranchConditional 90 91 93
+              91:               Label
+                                IgnoreIntersectionKHR
+                                Branch 92
+              93:               Label
+                                TerminateRayKHR
+                                Branch 92
+              92:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.AnyHitShader_Errors.rahit.out b/Test/baseResults/spv.ext.AnyHitShader_Errors.rahit.out
new file mode 100644
index 0000000..8c47429
--- /dev/null
+++ b/Test/baseResults/spv.ext.AnyHitShader_Errors.rahit.out
@@ -0,0 +1,8 @@
+spv.ext.AnyHitShader_Errors.rahit
+ERROR: 0:8: 'assign' :  l-value required "payload" (cannot modify hitAttributeNV in this stage)
+ERROR: 0:9: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:10: 'traceRayEXT' : no matching overloaded function found 
+ERROR: 3 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
new file mode 100644
index 0000000..278b5c1
--- /dev/null
+++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
@@ -0,0 +1,194 @@
+spv.ext.ClosestHitShader.rchit
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 101
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint ClosestHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeEXT"
+                              Name 18  "v2"
+                              Name 20  "gl_PrimitiveID"
+                              Name 22  "v3"
+                              Name 23  "gl_InstanceID"
+                              Name 25  "v4"
+                              Name 26  "gl_InstanceCustomIndexEXT"
+                              Name 31  "v5"
+                              Name 33  "gl_WorldRayOriginEXT"
+                              Name 35  "v6"
+                              Name 36  "gl_WorldRayDirectionEXT"
+                              Name 38  "v7"
+                              Name 39  "gl_ObjectRayOriginEXT"
+                              Name 41  "v8"
+                              Name 42  "gl_ObjectRayDirectionEXT"
+                              Name 45  "v9"
+                              Name 47  "gl_RayTminEXT"
+                              Name 49  "v10"
+                              Name 50  "gl_RayTmaxEXT"
+                              Name 52  "v11"
+                              Name 53  "gl_HitTEXT"
+                              Name 56  "v12"
+                              Name 58  "gl_HitKindEXT"
+                              Name 62  "v13"
+                              Name 64  "gl_ObjectToWorldEXT"
+                              Name 66  "v14"
+                              Name 67  "gl_WorldToObjectEXT"
+                              Name 69  "v15"
+                              Name 70  "gl_GeometryIndexEXT"
+                              Name 75  "v16"
+                              Name 76  "gl_ObjectToWorld3x4EXT"
+                              Name 79  "v17"
+                              Name 80  "gl_WorldToObject3x4EXT"
+                              Name 85  "accEXT"
+                              Name 98  "localPayload"
+                              Name 100  "incomingPayload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 26(gl_InstanceCustomIndexEXT) BuiltIn InstanceCustomIndexKHR
+                              Decorate 33(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
+                              Decorate 36(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR
+                              Decorate 39(gl_ObjectRayOriginEXT) BuiltIn ObjectRayOriginKHR
+                              Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
+                              Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
+                              Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
+                              Decorate 53(gl_HitTEXT) BuiltIn HitTKHR
+                              Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR
+                              Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
+                              Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
+                              Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR
+                              Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
+                              Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
+                              Decorate 85(accEXT) DescriptorSet 0
+                              Decorate 85(accEXT) Binding 0
+                              Decorate 98(localPayload) Location 0
+                              Decorate 100(incomingPayload) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+              10:             TypePointer Input 7(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+14(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:             TypePointer Input 16(int)
+20(gl_PrimitiveID):     19(ptr) Variable Input
+23(gl_InstanceID):     19(ptr) Variable Input
+26(gl_InstanceCustomIndexEXT):     19(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:             TypePointer Input 29(fvec3)
+33(gl_WorldRayOriginEXT):     32(ptr) Variable Input
+36(gl_WorldRayDirectionEXT):     32(ptr) Variable Input
+39(gl_ObjectRayOriginEXT):     32(ptr) Variable Input
+42(gl_ObjectRayDirectionEXT):     32(ptr) Variable Input
+              44:             TypePointer Function 28(float)
+              46:             TypePointer Input 28(float)
+47(gl_RayTminEXT):     46(ptr) Variable Input
+50(gl_RayTmaxEXT):     46(ptr) Variable Input
+  53(gl_HitTEXT):     46(ptr) Variable Input
+              55:             TypePointer Function 6(int)
+              57:             TypePointer Input 6(int)
+58(gl_HitKindEXT):     57(ptr) Variable Input
+              60:             TypeMatrix 29(fvec3) 4
+              61:             TypePointer Function 60
+              63:             TypePointer Input 60
+64(gl_ObjectToWorldEXT):     63(ptr) Variable Input
+67(gl_WorldToObjectEXT):     63(ptr) Variable Input
+70(gl_GeometryIndexEXT):     19(ptr) Variable Input
+              72:             TypeVector 28(float) 4
+              73:             TypeMatrix 72(fvec4) 3
+              74:             TypePointer Function 73
+76(gl_ObjectToWorld3x4EXT):     63(ptr) Variable Input
+80(gl_WorldToObject3x4EXT):     63(ptr) Variable Input
+              83:             TypeAccelerationStructureKHR
+              84:             TypePointer UniformConstant 83
+      85(accEXT):     84(ptr) Variable UniformConstant
+              87:      6(int) Constant 0
+              88:      6(int) Constant 1
+              89:      6(int) Constant 2
+              90:      6(int) Constant 3
+              91:   28(float) Constant 1056964608
+              92:   29(fvec3) ConstantComposite 91 91 91
+              93:   28(float) Constant 1065353216
+              94:   29(fvec3) ConstantComposite 93 93 93
+              95:   28(float) Constant 1061158912
+              96:     16(int) Constant 1
+              97:             TypePointer RayPayloadKHR 72(fvec4)
+98(localPayload):     97(ptr) Variable RayPayloadKHR
+              99:             TypePointer IncomingRayPayloadKHR 72(fvec4)
+100(incomingPayload):     99(ptr) Variable IncomingRayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          18(v2):     17(ptr) Variable Function
+          22(v3):     17(ptr) Variable Function
+          25(v4):     17(ptr) Variable Function
+          31(v5):     30(ptr) Variable Function
+          35(v6):     30(ptr) Variable Function
+          38(v7):     30(ptr) Variable Function
+          41(v8):     30(ptr) Variable Function
+          45(v9):     44(ptr) Variable Function
+         49(v10):     44(ptr) Variable Function
+         52(v11):     44(ptr) Variable Function
+         56(v12):     55(ptr) Variable Function
+         62(v13):     61(ptr) Variable Function
+         66(v14):     61(ptr) Variable Function
+         69(v15):     17(ptr) Variable Function
+         75(v16):     74(ptr) Variable Function
+         79(v17):     74(ptr) Variable Function
+              12:    7(ivec3) Load 11(gl_LaunchIDEXT)
+                              Store 9(v0) 12
+              15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
+                              Store 13(v1) 15
+              21:     16(int) Load 20(gl_PrimitiveID)
+                              Store 18(v2) 21
+              24:     16(int) Load 23(gl_InstanceID)
+                              Store 22(v3) 24
+              27:     16(int) Load 26(gl_InstanceCustomIndexEXT)
+                              Store 25(v4) 27
+              34:   29(fvec3) Load 33(gl_WorldRayOriginEXT)
+                              Store 31(v5) 34
+              37:   29(fvec3) Load 36(gl_WorldRayDirectionEXT)
+                              Store 35(v6) 37
+              40:   29(fvec3) Load 39(gl_ObjectRayOriginEXT)
+                              Store 38(v7) 40
+              43:   29(fvec3) Load 42(gl_ObjectRayDirectionEXT)
+                              Store 41(v8) 43
+              48:   28(float) Load 47(gl_RayTminEXT)
+                              Store 45(v9) 48
+              51:   28(float) Load 50(gl_RayTmaxEXT)
+                              Store 49(v10) 51
+              54:   28(float) Load 53(gl_HitTEXT)
+                              Store 52(v11) 54
+              59:      6(int) Load 58(gl_HitKindEXT)
+                              Store 56(v12) 59
+              65:          60 Load 64(gl_ObjectToWorldEXT)
+                              Store 62(v13) 65
+              68:          60 Load 67(gl_WorldToObjectEXT)
+                              Store 66(v14) 68
+              71:     16(int) Load 70(gl_GeometryIndexEXT)
+                              Store 69(v15) 71
+              77:          60 Load 76(gl_ObjectToWorld3x4EXT)
+              78:          73 Transpose 77
+                              Store 75(v16) 78
+              81:          60 Load 80(gl_WorldToObject3x4EXT)
+              82:          73 Transpose 81
+                              Store 79(v17) 82
+              86:          83 Load 85(accEXT)
+                              TraceRayKHR 86 87 88 89 90 87 92 91 94 95 96
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out
new file mode 100644
index 0000000..6c87d1c
--- /dev/null
+++ b/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out
@@ -0,0 +1,10 @@
+spv.ext.ClosestHitShader_Errors.rchit
+ERROR: 0:8: 'assign' :  l-value required "payload" (cannot modify hitAttributeNV in this stage)
+ERROR: 0:9: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:10: 'terminateRayEXT' : no matching overloaded function found 
+ERROR: 0:11: 'ignoreIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:12: 'gl_RayFlagsSkipAABBEXT' : required extension not requested: GL_EXT_ray_flags_primitive_culling
+ERROR: 5 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.IntersectShader.rint.out b/Test/baseResults/spv.ext.IntersectShader.rint.out
new file mode 100644
index 0000000..b8b8de2
--- /dev/null
+++ b/Test/baseResults/spv.ext.IntersectShader.rint.out
@@ -0,0 +1,156 @@
+spv.ext.IntersectShader.rint
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 81
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint IntersectionKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 65 69
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeEXT"
+                              Name 18  "v2"
+                              Name 20  "gl_PrimitiveID"
+                              Name 22  "v3"
+                              Name 23  "gl_InstanceID"
+                              Name 25  "v4"
+                              Name 26  "gl_InstanceCustomIndexEXT"
+                              Name 31  "v5"
+                              Name 33  "gl_WorldRayOriginEXT"
+                              Name 35  "v6"
+                              Name 36  "gl_WorldRayDirectionEXT"
+                              Name 38  "v7"
+                              Name 39  "gl_ObjectRayOriginEXT"
+                              Name 41  "v8"
+                              Name 42  "gl_ObjectRayDirectionEXT"
+                              Name 45  "v9"
+                              Name 47  "gl_RayTminEXT"
+                              Name 49  "v10"
+                              Name 50  "gl_RayTmaxEXT"
+                              Name 54  "v11"
+                              Name 56  "gl_ObjectToWorldEXT"
+                              Name 58  "v12"
+                              Name 59  "gl_WorldToObjectEXT"
+                              Name 64  "v13"
+                              Name 65  "gl_ObjectToWorld3x4EXT"
+                              Name 68  "v14"
+                              Name 69  "gl_WorldToObject3x4EXT"
+                              Name 73  "iAttr"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 23(gl_InstanceID) BuiltIn InstanceId
+                              Decorate 26(gl_InstanceCustomIndexEXT) BuiltIn InstanceCustomIndexKHR
+                              Decorate 33(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
+                              Decorate 36(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR
+                              Decorate 39(gl_ObjectRayOriginEXT) BuiltIn ObjectRayOriginKHR
+                              Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
+                              Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
+                              Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
+                              Decorate 56(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
+                              Decorate 59(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
+                              Decorate 65(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR
+                              Decorate 69(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+              10:             TypePointer Input 7(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+14(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              16:             TypeInt 32 1
+              17:             TypePointer Function 16(int)
+              19:             TypePointer Input 16(int)
+20(gl_PrimitiveID):     19(ptr) Variable Input
+23(gl_InstanceID):     19(ptr) Variable Input
+26(gl_InstanceCustomIndexEXT):     19(ptr) Variable Input
+              28:             TypeFloat 32
+              29:             TypeVector 28(float) 3
+              30:             TypePointer Function 29(fvec3)
+              32:             TypePointer Input 29(fvec3)
+33(gl_WorldRayOriginEXT):     32(ptr) Variable Input
+36(gl_WorldRayDirectionEXT):     32(ptr) Variable Input
+39(gl_ObjectRayOriginEXT):     32(ptr) Variable Input
+42(gl_ObjectRayDirectionEXT):     32(ptr) Variable Input
+              44:             TypePointer Function 28(float)
+              46:             TypePointer Input 28(float)
+47(gl_RayTminEXT):     46(ptr) Variable Input
+50(gl_RayTmaxEXT):     46(ptr) Variable Input
+              52:             TypeMatrix 29(fvec3) 4
+              53:             TypePointer Function 52
+              55:             TypePointer Input 52
+56(gl_ObjectToWorldEXT):     55(ptr) Variable Input
+59(gl_WorldToObjectEXT):     55(ptr) Variable Input
+              61:             TypeVector 28(float) 4
+              62:             TypeMatrix 61(fvec4) 3
+              63:             TypePointer Function 62
+65(gl_ObjectToWorld3x4EXT):     55(ptr) Variable Input
+69(gl_WorldToObject3x4EXT):     55(ptr) Variable Input
+              72:             TypePointer HitAttributeKHR 61(fvec4)
+       73(iAttr):     72(ptr) Variable HitAttributeKHR
+              74:   28(float) Constant 1056964608
+              75:   28(float) Constant 0
+              76:   28(float) Constant 1065353216
+              77:   61(fvec4) ConstantComposite 74 74 75 76
+              78:      6(int) Constant 1
+              79:             TypeBool
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          18(v2):     17(ptr) Variable Function
+          22(v3):     17(ptr) Variable Function
+          25(v4):     17(ptr) Variable Function
+          31(v5):     30(ptr) Variable Function
+          35(v6):     30(ptr) Variable Function
+          38(v7):     30(ptr) Variable Function
+          41(v8):     30(ptr) Variable Function
+          45(v9):     44(ptr) Variable Function
+         49(v10):     44(ptr) Variable Function
+         54(v11):     53(ptr) Variable Function
+         58(v12):     53(ptr) Variable Function
+         64(v13):     63(ptr) Variable Function
+         68(v14):     63(ptr) Variable Function
+              12:    7(ivec3) Load 11(gl_LaunchIDEXT)
+                              Store 9(v0) 12
+              15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
+                              Store 13(v1) 15
+              21:     16(int) Load 20(gl_PrimitiveID)
+                              Store 18(v2) 21
+              24:     16(int) Load 23(gl_InstanceID)
+                              Store 22(v3) 24
+              27:     16(int) Load 26(gl_InstanceCustomIndexEXT)
+                              Store 25(v4) 27
+              34:   29(fvec3) Load 33(gl_WorldRayOriginEXT)
+                              Store 31(v5) 34
+              37:   29(fvec3) Load 36(gl_WorldRayDirectionEXT)
+                              Store 35(v6) 37
+              40:   29(fvec3) Load 39(gl_ObjectRayOriginEXT)
+                              Store 38(v7) 40
+              43:   29(fvec3) Load 42(gl_ObjectRayDirectionEXT)
+                              Store 41(v8) 43
+              48:   28(float) Load 47(gl_RayTminEXT)
+                              Store 45(v9) 48
+              51:   28(float) Load 50(gl_RayTmaxEXT)
+                              Store 49(v10) 51
+              57:          52 Load 56(gl_ObjectToWorldEXT)
+                              Store 54(v11) 57
+              60:          52 Load 59(gl_WorldToObjectEXT)
+                              Store 58(v12) 60
+              66:          52 Load 65(gl_ObjectToWorld3x4EXT)
+              67:          62 Transpose 66
+                              Store 64(v13) 67
+              70:          52 Load 69(gl_WorldToObject3x4EXT)
+              71:          62 Transpose 70
+                              Store 68(v14) 71
+                              Store 73(iAttr) 77
+              80:    79(bool) ReportIntersectionKHR 74 78
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.IntersectShader_Errors.rint.out b/Test/baseResults/spv.ext.IntersectShader_Errors.rint.out
new file mode 100644
index 0000000..03f9b27
--- /dev/null
+++ b/Test/baseResults/spv.ext.IntersectShader_Errors.rint.out
@@ -0,0 +1,10 @@
+spv.ext.IntersectShader_Errors.rint
+ERROR: 0:3: 'rayPayloadInEXT' : not supported in this stage: intersection
+ERROR: 0:4: 'rayPayloadEXT' : not supported in this stage: intersection
+ERROR: 0:8: 'gl_HitTEXT' : undeclared identifier 
+ERROR: 0:9: 'gl_HitKindEXT' : undeclared identifier 
+ERROR: 0:10: 'traceRayEXT' : no matching overloaded function found 
+ERROR: 5 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out
new file mode 100644
index 0000000..dd3f15f
--- /dev/null
+++ b/Test/baseResults/spv.ext.MissShader.rmiss.out
@@ -0,0 +1,99 @@
+spv.ext.MissShader.rmiss
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 54
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MissKHR 4  "main" 11 14 21 24 29 32
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 9  "v0"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 13  "v1"
+                              Name 14  "gl_LaunchSizeEXT"
+                              Name 19  "v2"
+                              Name 21  "gl_WorldRayOriginEXT"
+                              Name 23  "v3"
+                              Name 24  "gl_WorldRayDirectionEXT"
+                              Name 27  "v4"
+                              Name 29  "gl_RayTminEXT"
+                              Name 31  "v5"
+                              Name 32  "gl_RayTmaxEXT"
+                              Name 36  "accEXT"
+                              Name 51  "localPayload"
+                              Name 53  "incomingPayload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
+                              Decorate 24(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR
+                              Decorate 29(gl_RayTminEXT) BuiltIn RayTminKHR
+                              Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
+                              Decorate 36(accEXT) DescriptorSet 0
+                              Decorate 36(accEXT) Binding 0
+                              Decorate 51(localPayload) Location 0
+                              Decorate 53(incomingPayload) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+              10:             TypePointer Input 7(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+14(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 3
+              18:             TypePointer Function 17(fvec3)
+              20:             TypePointer Input 17(fvec3)
+21(gl_WorldRayOriginEXT):     20(ptr) Variable Input
+24(gl_WorldRayDirectionEXT):     20(ptr) Variable Input
+              26:             TypePointer Function 16(float)
+              28:             TypePointer Input 16(float)
+29(gl_RayTminEXT):     28(ptr) Variable Input
+32(gl_RayTmaxEXT):     28(ptr) Variable Input
+              34:             TypeAccelerationStructureKHR
+              35:             TypePointer UniformConstant 34
+      36(accEXT):     35(ptr) Variable UniformConstant
+              38:      6(int) Constant 0
+              39:      6(int) Constant 1
+              40:      6(int) Constant 2
+              41:      6(int) Constant 3
+              42:   16(float) Constant 1056964608
+              43:   17(fvec3) ConstantComposite 42 42 42
+              44:   16(float) Constant 1065353216
+              45:   17(fvec3) ConstantComposite 44 44 44
+              46:   16(float) Constant 1061158912
+              47:             TypeInt 32 1
+              48:     47(int) Constant 1
+              49:             TypeVector 16(float) 4
+              50:             TypePointer RayPayloadKHR 49(fvec4)
+51(localPayload):     50(ptr) Variable RayPayloadKHR
+              52:             TypePointer IncomingRayPayloadKHR 49(fvec4)
+53(incomingPayload):     52(ptr) Variable IncomingRayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+           9(v0):      8(ptr) Variable Function
+          13(v1):      8(ptr) Variable Function
+          19(v2):     18(ptr) Variable Function
+          23(v3):     18(ptr) Variable Function
+          27(v4):     26(ptr) Variable Function
+          31(v5):     26(ptr) Variable Function
+              12:    7(ivec3) Load 11(gl_LaunchIDEXT)
+                              Store 9(v0) 12
+              15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
+                              Store 13(v1) 15
+              22:   17(fvec3) Load 21(gl_WorldRayOriginEXT)
+                              Store 19(v2) 22
+              25:   17(fvec3) Load 24(gl_WorldRayDirectionEXT)
+                              Store 23(v3) 25
+              30:   16(float) Load 29(gl_RayTminEXT)
+                              Store 27(v4) 30
+              33:   16(float) Load 32(gl_RayTmaxEXT)
+                              Store 31(v5) 33
+              37:          34 Load 36(accEXT)
+                              TraceRayKHR 37 38 39 40 41 38 43 42 45 46 48
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out b/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out
new file mode 100644
index 0000000..929a2a7
--- /dev/null
+++ b/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out
@@ -0,0 +1,21 @@
+spv.ext.MissShader_Errors.rmiss
+ERROR: 0:3: 'hitAttributeEXT' : not supported in this stage: miss
+ERROR: 0:6: 'gl_PrimitiveID' : undeclared identifier 
+ERROR: 0:6: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:7: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
+ERROR: 0:7: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:8: 'gl_InstanceCustomIndexEXT' : undeclared identifier 
+ERROR: 0:8: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:9: 'gl_ObjectToWorldEXT' : undeclared identifier 
+ERROR: 0:9: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:10: 'gl_WorldToObjectEXT' : undeclared identifier 
+ERROR: 0:10: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:11: 'gl_HitTEXT' : undeclared identifier 
+ERROR: 0:12: 'gl_HitKindEXT' : undeclared identifier 
+ERROR: 0:13: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:14: 'ignoreIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:15: 'terminateRayEXT' : no matching overloaded function found 
+ERROR: 16 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.RayCallable.rcall.out b/Test/baseResults/spv.ext.RayCallable.rcall.out
new file mode 100644
index 0000000..ac3b2b5
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayCallable.rcall.out
@@ -0,0 +1,60 @@
+spv.ext.RayCallable.rcall
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 30
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint CallableKHR 4  "main" 11 14
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 9  "id"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 13  "size"
+                              Name 14  "gl_LaunchSizeEXT"
+                              Name 16  "dataBlock"
+                              MemberName 16(dataBlock) 0  "data1"
+                              Name 18  ""
+                              Name 29  "data0"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 16(dataBlock) Block
+                              Decorate 18 Location 1
+                              Decorate 29(data0) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+              10:             TypePointer Input 7(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+14(gl_LaunchSizeEXT):     10(ptr) Variable Input
+   16(dataBlock):             TypeStruct 6(int)
+              17:             TypePointer IncomingCallableDataKHR 16(dataBlock)
+              18:     17(ptr) Variable IncomingCallableDataKHR
+              19:             TypeInt 32 1
+              20:     19(int) Constant 0
+              21:      6(int) Constant 256
+              22:             TypePointer IncomingCallableDataKHR 6(int)
+              24:      6(int) Constant 2
+              25:     19(int) Constant 1
+              26:             TypeFloat 32
+              27:             TypeVector 26(float) 4
+              28:             TypePointer CallableDataKHR 27(fvec4)
+       29(data0):     28(ptr) Variable CallableDataKHR
+         4(main):           2 Function None 3
+               5:             Label
+           9(id):      8(ptr) Variable Function
+        13(size):      8(ptr) Variable Function
+              12:    7(ivec3) Load 11(gl_LaunchIDEXT)
+                              Store 9(id) 12
+              15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
+                              Store 13(size) 15
+              23:     22(ptr) AccessChain 18 20
+                              Store 23 21
+                              ExecuteCallableKHR 24 25
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out b/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out
new file mode 100644
index 0000000..4699342
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out
@@ -0,0 +1,35 @@
+spv.ext.RayCallable_Errors.rcall
+ERROR: 0:3: 'hitAttributeEXT' : not supported in this stage: callable
+ERROR: 0:4: 'rayPayloadEXT' : not supported in this stage: callable
+ERROR: 0:5: 'rayPayloadInEXT' : not supported in this stage: callable
+ERROR: 0:9: 'gl_PrimitiveID' : undeclared identifier 
+ERROR: 0:9: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:10: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
+ERROR: 0:10: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:11: 'gl_InstanceCustomIndexEXT' : undeclared identifier 
+ERROR: 0:11: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:12: 'gl_WorldRayOriginEXT' : undeclared identifier 
+ERROR: 0:12: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:13: 'gl_WorldRayDirectionEXT' : undeclared identifier 
+ERROR: 0:13: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:14: 'gl_ObjectRayOriginEXT' : undeclared identifier 
+ERROR: 0:14: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:15: 'gl_ObjectRayDirectionEXT' : undeclared identifier 
+ERROR: 0:15: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:16: 'gl_RayTminEXT' : undeclared identifier 
+ERROR: 0:17: 'gl_RayTmaxEXT' : undeclared identifier 
+ERROR: 0:18: 'gl_ObjectToWorldEXT' : undeclared identifier 
+ERROR: 0:18: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:19: 'gl_WorldToObjectEXT' : undeclared identifier 
+ERROR: 0:19: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:20: 'gl_HitTEXT' : undeclared identifier 
+ERROR: 0:21: 'gl_HitKindEXT' : undeclared identifier 
+ERROR: 0:22: 'gl_IncomingRayFlagsEXT' : undeclared identifier 
+ERROR: 0:22: '=' :  cannot convert from ' temp float' to ' temp highp uint'
+ERROR: 0:23: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:24: 'ignoreIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:25: 'terminateRayEXT' : no matching overloaded function found 
+ERROR: 30 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.RayConstants.rgen.out b/Test/baseResults/spv.ext.RayConstants.rgen.out
new file mode 100644
index 0000000..5903ec9
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayConstants.rgen.out
@@ -0,0 +1,46 @@
+spv.ext.RayConstants.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 27
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main"
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "accEXT"
+                              Name 26  "payload"
+                              Decorate 8(accEXT) DescriptorSet 0
+                              Decorate 8(accEXT) Binding 0
+                              Decorate 26(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeAccelerationStructureKHR
+               7:             TypePointer UniformConstant 6
+       8(accEXT):      7(ptr) Variable UniformConstant
+              10:             TypeInt 32 0
+              11:     10(int) Constant 255
+              12:     10(int) Constant 0
+              13:     10(int) Constant 1
+              14:             TypeFloat 32
+              15:             TypeVector 14(float) 3
+              16:   14(float) Constant 0
+              17:   15(fvec3) ConstantComposite 16 16 16
+              18:   14(float) Constant 1056964608
+              19:   14(float) Constant 1065353216
+              20:   15(fvec3) ConstantComposite 19 19 19
+              21:   14(float) Constant 1061158912
+              22:             TypeInt 32 1
+              23:     22(int) Constant 1
+              24:             TypeVector 14(float) 4
+              25:             TypePointer RayPayloadKHR 24(fvec4)
+     26(payload):     25(ptr) Variable RayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+               9:           6 Load 8(accEXT)
+                              TraceRayKHR 9 11 12 13 13 12 17 18 20 21 23
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenShader.rgen.out b/Test/baseResults/spv.ext.RayGenShader.rgen.out
new file mode 100644
index 0000000..da16fa4
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayGenShader.rgen.out
@@ -0,0 +1,104 @@
+spv.ext.RayGenShader.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 58
+
+                              Capability RayTraversalPrimitiveCullingProvisionalKHR
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 11 21
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_flags_primitive_culling"
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeEXT"
+                              Name 24  "sy"
+                              Name 29  "accEXT0"
+                              Name 38  "block"
+                              MemberName 38(block) 0  "dir"
+                              MemberName 38(block) 1  "origin"
+                              Name 40  ""
+                              Name 51  "accEXT1"
+                              Name 54  "imageu"
+                              Name 57  "payload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 29(accEXT0) DescriptorSet 0
+                              Decorate 29(accEXT0) Binding 0
+                              MemberDecorate 38(block) 0 Offset 0
+                              MemberDecorate 38(block) 1 Offset 16
+                              Decorate 38(block) BufferBlock
+                              Decorate 51(accEXT1) DescriptorSet 0
+                              Decorate 51(accEXT1) Binding 1
+                              Decorate 54(imageu) DescriptorSet 0
+                              Decorate 54(imageu) Binding 2
+                              Decorate 57(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              27:             TypeAccelerationStructureKHR
+              28:             TypePointer UniformConstant 27
+     29(accEXT0):     28(ptr) Variable UniformConstant
+              35:      6(int) Constant 768
+              36:             TypeFloat 32
+              37:             TypeVector 36(float) 3
+       38(block):             TypeStruct 37(fvec3) 37(fvec3)
+              39:             TypePointer ShaderRecordBufferKHR 38(block)
+              40:     39(ptr) Variable ShaderRecordBufferKHR
+              41:             TypeInt 32 1
+              42:     41(int) Constant 1
+              43:             TypePointer ShaderRecordBufferKHR 37(fvec3)
+              46:   36(float) Constant 1056964608
+              47:     41(int) Constant 0
+              50:   36(float) Constant 1061158912
+     51(accEXT1):     28(ptr) Variable UniformConstant
+              52:             TypeImage 6(int) 2D nonsampled format:R32ui
+              53:             TypePointer UniformConstant 52
+      54(imageu):     53(ptr) Variable UniformConstant
+              55:             TypeVector 36(float) 4
+              56:             TypePointer RayPayloadKHR 55(fvec4)
+     57(payload):     56(ptr) Variable RayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              30:          27 Load 29(accEXT0)
+              31:      6(int) Load 8(lx)
+              32:      6(int) Load 16(ly)
+              33:      6(int) Load 20(sx)
+              34:      6(int) Load 24(sy)
+              44:     43(ptr) AccessChain 40 42
+              45:   37(fvec3) Load 44
+              48:     43(ptr) AccessChain 40 47
+              49:   37(fvec3) Load 48
+                              TraceRayKHR 30 31 32 33 34 35 45 46 49 50 42
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenShader11.rgen.out b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
new file mode 100644
index 0000000..30ed902
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
@@ -0,0 +1,91 @@
+spv.ext.RayGenShader11.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 53
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 11 21
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeEXT"
+                              Name 24  "sy"
+                              Name 29  "accEXT"
+                              Name 37  "block"
+                              MemberName 37(block) 0  "dir"
+                              MemberName 37(block) 1  "origin"
+                              Name 39  ""
+                              Name 52  "payload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 29(accEXT) DescriptorSet 0
+                              Decorate 29(accEXT) Binding 0
+                              MemberDecorate 37(block) 0 Offset 0
+                              MemberDecorate 37(block) 1 Offset 16
+                              Decorate 37(block) BufferBlock
+                              Decorate 52(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              27:             TypeAccelerationStructureKHR
+              28:             TypePointer UniformConstant 27
+      29(accEXT):     28(ptr) Variable UniformConstant
+              35:             TypeFloat 32
+              36:             TypeVector 35(float) 3
+       37(block):             TypeStruct 36(fvec3) 36(fvec3)
+              38:             TypePointer ShaderRecordBufferKHR 37(block)
+              39:     38(ptr) Variable ShaderRecordBufferKHR
+              40:             TypeInt 32 1
+              41:     40(int) Constant 1
+              42:             TypePointer ShaderRecordBufferKHR 36(fvec3)
+              45:   35(float) Constant 1056964608
+              46:     40(int) Constant 0
+              49:   35(float) Constant 1061158912
+              50:             TypeVector 35(float) 4
+              51:             TypePointer RayPayloadKHR 50(fvec4)
+     52(payload):     51(ptr) Variable RayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              30:          27 Load 29(accEXT)
+              31:      6(int) Load 8(lx)
+              32:      6(int) Load 16(ly)
+              33:      6(int) Load 20(sx)
+              34:      6(int) Load 24(sy)
+              43:     42(ptr) AccessChain 39 41
+              44:   36(fvec3) Load 43
+              47:     42(ptr) AccessChain 39 46
+              48:   36(fvec3) Load 47
+                              TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
new file mode 100644
index 0000000..3962bcb
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
@@ -0,0 +1,141 @@
+spv.ext.RayGenShaderArray.rgen
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 89
+
+                              Capability ShaderNonUniformEXT
+                              Capability RuntimeDescriptorArrayEXT
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_EXT_descriptor_indexing"
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 11 21
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "lx"
+                              Name 11  "gl_LaunchIDEXT"
+                              Name 16  "ly"
+                              Name 20  "sx"
+                              Name 21  "gl_LaunchSizeEXT"
+                              Name 24  "sy"
+                              Name 30  "accEXT0"
+                              Name 34  "block"
+                              MemberName 34(block) 0  "dir"
+                              MemberName 34(block) 1  "origin"
+                              MemberName 34(block) 2  "i"
+                              Name 36  ""
+                              Name 60  "accEXT1"
+                              Name 88  "payload"
+                              Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
+                              Decorate 30(accEXT0) DescriptorSet 0
+                              Decorate 30(accEXT0) Binding 0
+                              MemberDecorate 34(block) 0 Offset 0
+                              MemberDecorate 34(block) 1 Offset 16
+                              MemberDecorate 34(block) 2 Offset 28
+                              Decorate 34(block) BufferBlock
+                              Decorate 60(accEXT1) DescriptorSet 0
+                              Decorate 60(accEXT1) Binding 1
+                              Decorate 75 DecorationNonUniformEXT
+                              Decorate 76 DecorationNonUniformEXT
+                              Decorate 77 DecorationNonUniformEXT
+                              Decorate 88(payload) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LaunchIDEXT):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              17:      6(int) Constant 1
+21(gl_LaunchSizeEXT):     10(ptr) Variable Input
+              27:             TypeAccelerationStructureKHR
+              28:             TypeRuntimeArray 27
+              29:             TypePointer UniformConstant 28
+     30(accEXT0):     29(ptr) Variable UniformConstant
+              31:             TypeFloat 32
+              32:             TypeVector 31(float) 3
+              33:             TypeInt 32 1
+       34(block):             TypeStruct 32(fvec3) 32(fvec3) 33(int)
+              35:             TypePointer ShaderRecordBufferKHR 34(block)
+              36:     35(ptr) Variable ShaderRecordBufferKHR
+              37:     33(int) Constant 2
+              38:             TypePointer ShaderRecordBufferKHR 33(int)
+              41:             TypePointer UniformConstant 27
+              48:     33(int) Constant 1
+              49:             TypePointer ShaderRecordBufferKHR 32(fvec3)
+              52:   31(float) Constant 1056964608
+              53:     33(int) Constant 0
+              56:   31(float) Constant 1061158912
+              57:      6(int) Constant 2
+              58:             TypeArray 27 57
+              59:             TypePointer UniformConstant 58
+     60(accEXT1):     59(ptr) Variable UniformConstant
+              86:             TypeVector 31(float) 4
+              87:             TypePointer RayPayloadKHR 86(fvec4)
+     88(payload):     87(ptr) Variable RayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+           8(lx):      7(ptr) Variable Function
+          16(ly):      7(ptr) Variable Function
+          20(sx):      7(ptr) Variable Function
+          24(sy):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 12
+              15:      6(int) Load 14
+                              Store 8(lx) 15
+              18:     13(ptr) AccessChain 11(gl_LaunchIDEXT) 17
+              19:      6(int) Load 18
+                              Store 16(ly) 19
+              22:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12
+              23:      6(int) Load 22
+                              Store 20(sx) 23
+              25:     13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17
+              26:      6(int) Load 25
+                              Store 24(sy) 26
+              39:     38(ptr) AccessChain 36 37
+              40:     33(int) Load 39
+              42:     41(ptr) AccessChain 30(accEXT0) 40
+              43:          27 Load 42
+              44:      6(int) Load 8(lx)
+              45:      6(int) Load 16(ly)
+              46:      6(int) Load 20(sx)
+              47:      6(int) Load 24(sy)
+              50:     49(ptr) AccessChain 36 48
+              51:   32(fvec3) Load 50
+              54:     49(ptr) AccessChain 36 53
+              55:   32(fvec3) Load 54
+                              TraceRayKHR 43 44 45 46 47 12 51 52 55 56 48
+              61:     38(ptr) AccessChain 36 37
+              62:     33(int) Load 61
+              63:     41(ptr) AccessChain 60(accEXT1) 62
+              64:          27 Load 63
+              65:      6(int) Load 8(lx)
+              66:      6(int) Load 16(ly)
+              67:      6(int) Load 20(sx)
+              68:      6(int) Load 24(sy)
+              69:     49(ptr) AccessChain 36 48
+              70:   32(fvec3) Load 69
+              71:     49(ptr) AccessChain 36 53
+              72:   32(fvec3) Load 71
+                              TraceRayKHR 64 65 66 67 68 12 70 52 72 56 48
+              73:     38(ptr) AccessChain 36 37
+              74:     33(int) Load 73
+              75:     33(int) CopyObject 74
+              76:     41(ptr) AccessChain 30(accEXT0) 75
+              77:          27 Load 76
+              78:      6(int) Load 8(lx)
+              79:      6(int) Load 16(ly)
+              80:      6(int) Load 20(sx)
+              81:      6(int) Load 24(sy)
+              82:     49(ptr) AccessChain 36 48
+              83:   32(fvec3) Load 82
+              84:     49(ptr) AccessChain 36 53
+              85:   32(fvec3) Load 84
+                              TraceRayKHR 77 78 79 80 81 12 83 52 85 56 48
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out b/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out
new file mode 100644
index 0000000..6dc7480
--- /dev/null
+++ b/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out
@@ -0,0 +1,40 @@
+spv.ext.RayGenShader_Errors.rgen
+ERROR: 0:3: 'hitAttributeEXT' : not supported in this stage: ray-generation
+ERROR: 0:4: 'rayPayloadInEXT' : not supported in this stage: ray-generation
+ERROR: 0:5: 'shaderRecordNV' : can only be used with a buffer 
+ERROR: 0:9: 'binding' : cannot be used with shaderRecordNV 
+ERROR: 0:12: 'set' : cannot be used with shaderRecordNV 
+ERROR: 0:23: 'accelerationStructureNV' : accelerationStructureNV can only be used in uniform variables or function parameters: a
+ERROR: 0:23: '=' :  cannot convert from ' const int' to ' temp accelerationStructureNV'
+ERROR: 0:24: 'gl_PrimitiveID' : undeclared identifier 
+ERROR: 0:24: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:25: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?)
+ERROR: 0:25: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:26: 'gl_InstanceCustomIndexEXT' : undeclared identifier 
+ERROR: 0:26: '=' :  cannot convert from ' temp float' to ' temp highp int'
+ERROR: 0:27: 'gl_WorldRayOriginEXT' : undeclared identifier 
+ERROR: 0:27: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:28: 'gl_WorldRayDirectionEXT' : undeclared identifier 
+ERROR: 0:28: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:29: 'gl_ObjectRayOriginEXT' : undeclared identifier 
+ERROR: 0:29: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:30: 'gl_ObjectRayDirectionEXT' : undeclared identifier 
+ERROR: 0:30: '=' :  cannot convert from ' temp float' to ' temp highp 3-component vector of float'
+ERROR: 0:31: 'gl_RayTminEXT' : undeclared identifier 
+ERROR: 0:32: 'gl_RayTmaxEXT' : undeclared identifier 
+ERROR: 0:33: 'gl_ObjectToWorldEXT' : undeclared identifier 
+ERROR: 0:33: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:34: 'gl_WorldToObjectEXT' : undeclared identifier 
+ERROR: 0:34: '=' :  cannot convert from ' temp float' to ' temp highp 4X3 matrix of float'
+ERROR: 0:35: 'gl_HitTEXT' : undeclared identifier 
+ERROR: 0:36: 'gl_HitKindEXT' : undeclared identifier 
+ERROR: 0:37: 'reportIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:38: 'ignoreIntersectionEXT' : no matching overloaded function found 
+ERROR: 0:39: 'terminateRayEXT' : no matching overloaded function found 
+ERROR: 0:40: 'assign' :  l-value required "anon@3" (can't modify a shaderrecordnv qualified buffer)
+ERROR: 33 compilation errors.  No code generated.
+
+
+ERROR: Linking ray-generation stage: Only one shaderRecordNV buffer block is allowed per stage
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.extPostDepthCoverage.frag.out b/Test/baseResults/spv.extPostDepthCoverage.frag.out
index 85a2359..28d207b 100644
--- a/Test/baseResults/spv.extPostDepthCoverage.frag.out
+++ b/Test/baseResults/spv.extPostDepthCoverage.frag.out
@@ -1,6 +1,6 @@
 spv.extPostDepthCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 6
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16.frag.out b/Test/baseResults/spv.float16.frag.out
index 1f955c2..ca1bca1 100644
--- a/Test/baseResults/spv.float16.frag.out
+++ b/Test/baseResults/spv.float16.frag.out
@@ -1,7 +1,7 @@
 spv.float16.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 534
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16Fetch.frag.out b/Test/baseResults/spv.float16Fetch.frag.out
index 45c80fe..92ff631 100644
--- a/Test/baseResults/spv.float16Fetch.frag.out
+++ b/Test/baseResults/spv.float16Fetch.frag.out
@@ -1,7 +1,7 @@
 spv.float16Fetch.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 5923
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16convertonlyarith.comp.out b/Test/baseResults/spv.float16convertonlyarith.comp.out
index 6abf0d4..5c8c292 100644
--- a/Test/baseResults/spv.float16convertonlyarith.comp.out
+++ b/Test/baseResults/spv.float16convertonlyarith.comp.out
@@ -1,6 +1,6 @@
 spv.float16convertonlyarith.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float16convertonlystorage.comp.out b/Test/baseResults/spv.float16convertonlystorage.comp.out
index a2ff1d0..b37bb6b 100644
--- a/Test/baseResults/spv.float16convertonlystorage.comp.out
+++ b/Test/baseResults/spv.float16convertonlystorage.comp.out
@@ -1,6 +1,6 @@
 spv.float16convertonlystorage.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float32.frag.out b/Test/baseResults/spv.float32.frag.out
index f1b0d02..db413c4 100644
--- a/Test/baseResults/spv.float32.frag.out
+++ b/Test/baseResults/spv.float32.frag.out
@@ -1,6 +1,6 @@
 spv.float32.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 533
 
                               Capability Shader
diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out
index 231f070..b98c870 100644
--- a/Test/baseResults/spv.float64.frag.out
+++ b/Test/baseResults/spv.float64.frag.out
@@ -1,7 +1,7 @@
 spv.float64.frag
 Validation failed
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 524
 
                               Capability Shader
diff --git a/Test/baseResults/spv.flowControl.frag.out b/Test/baseResults/spv.flowControl.frag.out
index 30c2a4b..fc68306 100644
--- a/Test/baseResults/spv.flowControl.frag.out
+++ b/Test/baseResults/spv.flowControl.frag.out
@@ -1,6 +1,6 @@
 spv.flowControl.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-complex-condition.vert.out b/Test/baseResults/spv.for-complex-condition.vert.out
index 41275a4..78252ee 100644
--- a/Test/baseResults/spv.for-complex-condition.vert.out
+++ b/Test/baseResults/spv.for-complex-condition.vert.out
@@ -1,6 +1,6 @@
 spv.for-complex-condition.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-continue-break.vert.out b/Test/baseResults/spv.for-continue-break.vert.out
index ff94a93..50c034e 100644
--- a/Test/baseResults/spv.for-continue-break.vert.out
+++ b/Test/baseResults/spv.for-continue-break.vert.out
@@ -1,6 +1,6 @@
 spv.for-continue-break.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 45
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-nobody.vert.out b/Test/baseResults/spv.for-nobody.vert.out
index 2a3bcf4..26844c2 100644
--- a/Test/baseResults/spv.for-nobody.vert.out
+++ b/Test/baseResults/spv.for-nobody.vert.out
@@ -1,6 +1,6 @@
 spv.for-nobody.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-notest.vert.out b/Test/baseResults/spv.for-notest.vert.out
index 36c4a96..ff85cb4 100644
--- a/Test/baseResults/spv.for-notest.vert.out
+++ b/Test/baseResults/spv.for-notest.vert.out
@@ -1,6 +1,6 @@
 spv.for-notest.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
@@ -38,5 +38,5 @@
                               Store 8(i) 19
                               Branch 10
               12:             Label
-                              Return
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/spv.for-simple.vert.out b/Test/baseResults/spv.for-simple.vert.out
index ecb539f..a3e5d86 100644
--- a/Test/baseResults/spv.for-simple.vert.out
+++ b/Test/baseResults/spv.for-simple.vert.out
@@ -1,6 +1,6 @@
 spv.for-simple.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.forLoop.frag.out b/Test/baseResults/spv.forLoop.frag.out
index a07921c..b4b0f5d 100644
--- a/Test/baseResults/spv.forLoop.frag.out
+++ b/Test/baseResults/spv.forLoop.frag.out
@@ -1,6 +1,6 @@
 spv.forLoop.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 131
 
                               Capability Shader
diff --git a/Test/baseResults/spv.forwardFun.frag.out b/Test/baseResults/spv.forwardFun.frag.out
index 32875b2..26140af 100644
--- a/Test/baseResults/spv.forwardFun.frag.out
+++ b/Test/baseResults/spv.forwardFun.frag.out
@@ -1,6 +1,6 @@
 spv.forwardFun.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability Shader
@@ -99,8 +99,7 @@
               45:               Label
                                 ReturnValue 46
               42:             Label
-              48:    8(float) Undef
-                              ReturnValue 48
+                              Unreachable
                               FunctionEnd
     16(foo(vf4;):    8(float) Function None 14
          15(bar):     13(ptr) FunctionParameter
diff --git a/Test/baseResults/spv.fragmentDensity-es.frag.out b/Test/baseResults/spv.fragmentDensity-es.frag.out
index 01ac383..69f92c8 100644
--- a/Test/baseResults/spv.fragmentDensity-es.frag.out
+++ b/Test/baseResults/spv.fragmentDensity-es.frag.out
@@ -1,6 +1,6 @@
 spv.fragmentDensity-es.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fragmentDensity.frag.out b/Test/baseResults/spv.fragmentDensity.frag.out
index 8bbc37c..5bdb43a 100644
--- a/Test/baseResults/spv.fragmentDensity.frag.out
+++ b/Test/baseResults/spv.fragmentDensity.frag.out
@@ -1,6 +1,6 @@
 spv.fragmentDensity.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fragmentShaderBarycentric.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric.frag.out
index ffb3527..fbded6e 100644
--- a/Test/baseResults/spv.fragmentShaderBarycentric.frag.out
+++ b/Test/baseResults/spv.fragmentShaderBarycentric.frag.out
@@ -1,6 +1,6 @@
 spv.fragmentShaderBarycentric.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out
index 05dce7a..22b84ba 100644
--- a/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out
+++ b/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out
@@ -1,6 +1,6 @@
 spv.fragmentShaderBarycentric2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fsi.frag.out b/Test/baseResults/spv.fsi.frag.out
index 51fb068..b0c9713 100644
--- a/Test/baseResults/spv.fsi.frag.out
+++ b/Test/baseResults/spv.fsi.frag.out
@@ -1,6 +1,6 @@
 spv.fsi.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.fullyCovered.frag.out b/Test/baseResults/spv.fullyCovered.frag.out
index 76c8e44..4dbea15 100644
--- a/Test/baseResults/spv.fullyCovered.frag.out
+++ b/Test/baseResults/spv.fullyCovered.frag.out
@@ -1,6 +1,6 @@
 spv.fullyCovered.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.functionCall.frag.out b/Test/baseResults/spv.functionCall.frag.out
index 269b74e..4fa7863 100644
--- a/Test/baseResults/spv.functionCall.frag.out
+++ b/Test/baseResults/spv.functionCall.frag.out
@@ -4,7 +4,7 @@
 WARNING: 0:5: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 76
 
                               Capability Shader
@@ -105,8 +105,7 @@
               44:               Label
                                 ReturnValue 45
               41:             Label
-              47:    6(float) Undef
-                              ReturnValue 47
+                              Unreachable
                               FunctionEnd
 18(missingReturn():    6(float) Function None 15
               19:             Label
diff --git a/Test/baseResults/spv.functionNestedOpaque.vert.out b/Test/baseResults/spv.functionNestedOpaque.vert.out
index df590c1..4543895 100644
--- a/Test/baseResults/spv.functionNestedOpaque.vert.out
+++ b/Test/baseResults/spv.functionNestedOpaque.vert.out
@@ -1,7 +1,7 @@
 spv.functionNestedOpaque.vert
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.functionParameterTypes.frag.out b/Test/baseResults/spv.functionParameterTypes.frag.out
index 24e780e..decc190 100644
--- a/Test/baseResults/spv.functionParameterTypes.frag.out
+++ b/Test/baseResults/spv.functionParameterTypes.frag.out
@@ -1,6 +1,6 @@
 spv.functionParameterTypes.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 34
 
                               Capability Shader
diff --git a/Test/baseResults/spv.functionSemantics.frag.out b/Test/baseResults/spv.functionSemantics.frag.out
index 49bdf7c..000a7bc 100644
--- a/Test/baseResults/spv.functionSemantics.frag.out
+++ b/Test/baseResults/spv.functionSemantics.frag.out
@@ -1,6 +1,6 @@
 spv.functionSemantics.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 156
 
                               Capability Shader
diff --git a/Test/baseResults/spv.glFragColor.frag.out b/Test/baseResults/spv.glFragColor.frag.out
index 55fb24f..af25280 100644
--- a/Test/baseResults/spv.glFragColor.frag.out
+++ b/Test/baseResults/spv.glFragColor.frag.out
@@ -1,6 +1,6 @@
 spv.glFragColor.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 12
 
                               Capability Shader
diff --git a/Test/baseResults/spv.glsl.register.autoassign.frag.out b/Test/baseResults/spv.glsl.register.autoassign.frag.out
index 9c8ccb5..9872f4a 100644
--- a/Test/baseResults/spv.glsl.register.autoassign.frag.out
+++ b/Test/baseResults/spv.glsl.register.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.glsl.register.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 142
 
                               Capability Shader
diff --git a/Test/baseResults/spv.glsl.register.noautoassign.frag.out b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
index 44d63ed..b52e220 100644
--- a/Test/baseResults/spv.glsl.register.noautoassign.frag.out
+++ b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
@@ -1,6 +1,6 @@
 spv.glsl.register.noautoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 142
 
                               Capability Shader
diff --git a/Test/baseResults/spv.hlslDebugInfo.frag.out b/Test/baseResults/spv.hlslDebugInfo.frag.out
index 35a6a4d..1d2e6b4 100644
--- a/Test/baseResults/spv.hlslDebugInfo.frag.out
+++ b/Test/baseResults/spv.hlslDebugInfo.frag.out
@@ -1,6 +1,6 @@
 spv.hlslDebugInfo.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 19
 
                               Capability Shader
diff --git a/Test/baseResults/spv.hlslOffsets.vert.out b/Test/baseResults/spv.hlslOffsets.vert.out
index 7236754..b1cdb6b 100644
--- a/Test/baseResults/spv.hlslOffsets.vert.out
+++ b/Test/baseResults/spv.hlslOffsets.vert.out
@@ -18,7 +18,7 @@
 0:?     'anon@0' (layout( binding=0 column_major std430) buffer block{layout( column_major std430) buffer highp float m0, layout( column_major std430) buffer highp 3-component vector of float m4, layout( column_major std430) buffer highp float m16, layout( column_major std430 offset=20) buffer highp 3-component vector of float m20, layout( column_major std430) buffer highp 3-component vector of float m32, layout( column_major std430) buffer highp 2-component vector of float m48, layout( column_major std430) buffer highp 2-component vector of float m56, layout( column_major std430) buffer highp float m64, layout( column_major std430) buffer highp 2-component vector of float m68, layout( column_major std430) buffer highp float m76, layout( column_major std430) buffer highp float m80, layout( column_major std430 offset=88) buffer highp 2-component vector of float m88, layout( column_major std430) buffer highp 2-component vector of float m96, layout( column_major std430) buffer 2-component vector of double m112})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 14
 
                               Capability Shader
diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out
index 0fefd01..63d26d8 100644
--- a/Test/baseResults/spv.image.frag.out
+++ b/Test/baseResults/spv.image.frag.out
@@ -1,7 +1,7 @@
 spv.image.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 395
 
                               Capability Shader
diff --git a/Test/baseResults/spv.imageLoadStoreLod.frag.out b/Test/baseResults/spv.imageLoadStoreLod.frag.out
index 28cd4f9..ec16d90 100644
--- a/Test/baseResults/spv.imageLoadStoreLod.frag.out
+++ b/Test/baseResults/spv.imageLoadStoreLod.frag.out
@@ -1,7 +1,6 @@
 spv.imageLoadStoreLod.frag
-Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 82
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int16.amd.frag.out b/Test/baseResults/spv.int16.amd.frag.out
index 26c701d..3f6179b 100644
--- a/Test/baseResults/spv.int16.amd.frag.out
+++ b/Test/baseResults/spv.int16.amd.frag.out
@@ -1,6 +1,6 @@
 spv.int16.amd.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 560
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out
index a7b9bfe..ff8a446 100644
--- a/Test/baseResults/spv.int16.frag.out
+++ b/Test/baseResults/spv.int16.frag.out
@@ -1,6 +1,6 @@
 spv.int16.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 523
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int32.frag.out b/Test/baseResults/spv.int32.frag.out
index e5c7889..1e8cd70 100644
--- a/Test/baseResults/spv.int32.frag.out
+++ b/Test/baseResults/spv.int32.frag.out
@@ -1,6 +1,6 @@
 spv.int32.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 493
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out
index b1375a6..4510134 100644
--- a/Test/baseResults/spv.int64.frag.out
+++ b/Test/baseResults/spv.int64.frag.out
@@ -1,7 +1,7 @@
 spv.int64.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 489
 
                               Capability Shader
diff --git a/Test/baseResults/spv.int8.frag.out b/Test/baseResults/spv.int8.frag.out
index 0a4740d..c84ca7e 100644
--- a/Test/baseResults/spv.int8.frag.out
+++ b/Test/baseResults/spv.int8.frag.out
@@ -1,6 +1,6 @@
 spv.int8.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 518
 
                               Capability Shader
diff --git a/Test/baseResults/spv.intOps.vert.out b/Test/baseResults/spv.intOps.vert.out
index 2a63783..272233e 100644
--- a/Test/baseResults/spv.intOps.vert.out
+++ b/Test/baseResults/spv.intOps.vert.out
@@ -1,6 +1,6 @@
 spv.intOps.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 268
 
                               Capability Shader
diff --git a/Test/baseResults/spv.intcoopmat.comp.out b/Test/baseResults/spv.intcoopmat.comp.out
index 06f5623..940ba33 100644
--- a/Test/baseResults/spv.intcoopmat.comp.out
+++ b/Test/baseResults/spv.intcoopmat.comp.out
@@ -1,6 +1,6 @@
 spv.intcoopmat.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 262
 
                               Capability Shader
diff --git a/Test/baseResults/spv.interpOps.frag.out b/Test/baseResults/spv.interpOps.frag.out
index 699524d..7ec4f9f 100644
--- a/Test/baseResults/spv.interpOps.frag.out
+++ b/Test/baseResults/spv.interpOps.frag.out
@@ -1,6 +1,6 @@
 spv.interpOps.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 100
 
                               Capability Shader
diff --git a/Test/baseResults/spv.layoutNested.vert.out b/Test/baseResults/spv.layoutNested.vert.out
index b5ef883..44d58ab 100644
--- a/Test/baseResults/spv.layoutNested.vert.out
+++ b/Test/baseResults/spv.layoutNested.vert.out
@@ -1,6 +1,6 @@
 spv.layoutNested.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/spv.length.frag.out b/Test/baseResults/spv.length.frag.out
index 8e799fb..de391bc 100644
--- a/Test/baseResults/spv.length.frag.out
+++ b/Test/baseResults/spv.length.frag.out
@@ -1,6 +1,6 @@
 spv.length.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out
index f5fad54..adfa0fd 100644
--- a/Test/baseResults/spv.localAggregates.frag.out
+++ b/Test/baseResults/spv.localAggregates.frag.out
@@ -1,6 +1,6 @@
 spv.localAggregates.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 136
 
                               Capability Shader
diff --git a/Test/baseResults/spv.loops.frag.out b/Test/baseResults/spv.loops.frag.out
index 046360f..a3a3423 100644
--- a/Test/baseResults/spv.loops.frag.out
+++ b/Test/baseResults/spv.loops.frag.out
@@ -1,6 +1,6 @@
 spv.loops.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 725
 
                               Capability Shader
diff --git a/Test/baseResults/spv.loopsArtificial.frag.out b/Test/baseResults/spv.loopsArtificial.frag.out
index d0d6054..65329d4 100644
--- a/Test/baseResults/spv.loopsArtificial.frag.out
+++ b/Test/baseResults/spv.loopsArtificial.frag.out
@@ -1,6 +1,6 @@
 spv.loopsArtificial.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 158
 
                               Capability Shader
diff --git a/Test/baseResults/spv.matFun.vert.out b/Test/baseResults/spv.matFun.vert.out
index 8ed378f..d39160d 100644
--- a/Test/baseResults/spv.matFun.vert.out
+++ b/Test/baseResults/spv.matFun.vert.out
@@ -1,6 +1,6 @@
 spv.matFun.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 103
 
                               Capability Shader
diff --git a/Test/baseResults/spv.matrix.frag.out b/Test/baseResults/spv.matrix.frag.out
index c2b4a1f..f7b6ce3 100644
--- a/Test/baseResults/spv.matrix.frag.out
+++ b/Test/baseResults/spv.matrix.frag.out
@@ -1,6 +1,6 @@
 spv.matrix.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 286
 
                               Capability Shader
diff --git a/Test/baseResults/spv.matrix2.frag.out b/Test/baseResults/spv.matrix2.frag.out
index dc574a4..77a098a 100644
--- a/Test/baseResults/spv.matrix2.frag.out
+++ b/Test/baseResults/spv.matrix2.frag.out
@@ -1,6 +1,6 @@
 spv.matrix2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 221
 
                               Capability Shader
diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out
index 93c6b2d..737e862 100644
--- a/Test/baseResults/spv.memoryQualifier.frag.out
+++ b/Test/baseResults/spv.memoryQualifier.frag.out
@@ -1,7 +1,7 @@
 spv.memoryQualifier.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 97
 
                               Capability Shader
diff --git a/Test/baseResults/spv.memoryScopeSemantics.comp.out b/Test/baseResults/spv.memoryScopeSemantics.comp.out
index 8c4e576..b8721f2 100644
--- a/Test/baseResults/spv.memoryScopeSemantics.comp.out
+++ b/Test/baseResults/spv.memoryScopeSemantics.comp.out
@@ -1,11 +1,12 @@
 spv.memoryScopeSemantics.comp
 // Module Version 10300
-// Generated by (magic number): 80007
-// Id's are bound by 163
+// Generated by (magic number): 80008
+// Id's are bound by 169
 
                               Capability Shader
                               Capability Int64
                               Capability Int64Atomics
+                              Capability StorageImageMultisample
                               Capability VulkanMemoryModelKHR
                               Capability VulkanMemoryModelDeviceScopeKHR
                               Extension  "SPV_KHR_vulkan_memory_model"
@@ -49,6 +50,7 @@
                               Name 151  "BufferM"
                               MemberName 151(BufferM) 0  "x"
                               Name 153  "bufferm"
+                              Name 165  "imageMS"
                               Decorate 36(imagei) DescriptorSet 0
                               Decorate 36(imagei) Binding 1
                               Decorate 46(imageu) DescriptorSet 0
@@ -83,6 +85,8 @@
                               Decorate 151(BufferM) Block
                               Decorate 153(bufferm) DescriptorSet 0
                               Decorate 153(bufferm) Binding 9
+                              Decorate 165(imageMS) DescriptorSet 0
+                              Decorate 165(imageMS) Binding 10
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -174,6 +178,10 @@
              152:             TypePointer StorageBuffer 151(BufferM)
     153(bufferm):    152(ptr) Variable StorageBuffer
              161:      6(int) Constant 32768
+             163:             TypeImage 6(int) 2D multi-sampled nonsampled format:R32i
+             164:             TypePointer UniformConstant 163
+    165(imageMS):    164(ptr) Variable UniformConstant
+             167:      6(int) Constant 4294967289
          4(main):           2 Function None 3
                5:             Label
         8(origi):      7(ptr) Variable Function
@@ -271,5 +279,9 @@
              159:     15(int) AtomicIAdd 158 12 17 51
              160:     69(ptr) AccessChain 68(bufferu) 38
              162:     15(int) AtomicIAdd 160 12 42 16
+             166:     40(ptr) ImageTexelPointer 165(imageMS) 39 12
+                              AtomicStore 166 12 33 14
+             168:     40(ptr) ImageTexelPointer 36(imagei) 39 17
+                              AtomicStore 168 12 33 167
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.merge-unreachable.frag.out b/Test/baseResults/spv.merge-unreachable.frag.out
index 7ec0f33..3eab4ec 100644
--- a/Test/baseResults/spv.merge-unreachable.frag.out
+++ b/Test/baseResults/spv.merge-unreachable.frag.out
@@ -1,6 +1,6 @@
 spv.merge-unreachable.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 25
 
                               Capability Shader
@@ -37,5 +37,5 @@
               23:               Label
                                 Return
               21:             Label
-                              Return
+                              Unreachable
                               FunctionEnd
diff --git a/Test/baseResults/spv.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
index 38d363b..cea7e4d 100644
--- a/Test/baseResults/spv.meshShaderBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderBuiltins.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 148
 
                               Capability ClipDistance
diff --git a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
index b912aca..75f8c63 100644
--- a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderPerViewBuiltins.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 126
 
                               Capability MultiViewport
diff --git a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
index 266f662..de019a2 100644
--- a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
+++ b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderPerViewUserDefined.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 108
 
                               Capability MeshShadingNV
diff --git a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
index 4afbef9..e9ebd44 100644
--- a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderRedeclBuiltins.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 129
 
                               Capability ClipDistance
diff --git a/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out
index 6672dc2..38542d5 100644
--- a/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderRedeclPerViewBuiltins.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 120
 
                               Capability PerViewAttributesNV
diff --git a/Test/baseResults/spv.meshShaderSharedMem.mesh.out b/Test/baseResults/spv.meshShaderSharedMem.mesh.out
index dd0003d..adac07f 100644
--- a/Test/baseResults/spv.meshShaderSharedMem.mesh.out
+++ b/Test/baseResults/spv.meshShaderSharedMem.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderSharedMem.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 77
 
                               Capability StorageImageWriteWithoutFormat
diff --git a/Test/baseResults/spv.meshShaderTaskMem.mesh.out b/Test/baseResults/spv.meshShaderTaskMem.mesh.out
index e14f7a8..057e0fd 100644
--- a/Test/baseResults/spv.meshShaderTaskMem.mesh.out
+++ b/Test/baseResults/spv.meshShaderTaskMem.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderTaskMem.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 58
 
                               Capability MeshShadingNV
diff --git a/Test/baseResults/spv.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.meshShaderUserDefined.mesh.out
index c3ec915..43579bb 100644
--- a/Test/baseResults/spv.meshShaderUserDefined.mesh.out
+++ b/Test/baseResults/spv.meshShaderUserDefined.mesh.out
@@ -1,6 +1,6 @@
 spv.meshShaderUserDefined.mesh
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 138
 
                               Capability MeshShadingNV
diff --git a/Test/baseResults/spv.meshTaskShader.task.out b/Test/baseResults/spv.meshTaskShader.task.out
index a835d7f..96d37c4 100644
--- a/Test/baseResults/spv.meshTaskShader.task.out
+++ b/Test/baseResults/spv.meshTaskShader.task.out
@@ -1,6 +1,6 @@
 spv.meshTaskShader.task
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 116
 
                               Capability StorageImageWriteWithoutFormat
diff --git a/Test/baseResults/spv.multiStruct.comp.out b/Test/baseResults/spv.multiStruct.comp.out
index 7e88a59..679a4bd 100644
--- a/Test/baseResults/spv.multiStruct.comp.out
+++ b/Test/baseResults/spv.multiStruct.comp.out
@@ -1,6 +1,6 @@
 spv.multiStruct.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 161
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiStructFuncall.frag.out b/Test/baseResults/spv.multiStructFuncall.frag.out
index a3a4480..9312fe9 100644
--- a/Test/baseResults/spv.multiStructFuncall.frag.out
+++ b/Test/baseResults/spv.multiStructFuncall.frag.out
@@ -1,6 +1,6 @@
 spv.multiStructFuncall.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiView.frag.out b/Test/baseResults/spv.multiView.frag.out
index 9dbd36b..5363352 100644
--- a/Test/baseResults/spv.multiView.frag.out
+++ b/Test/baseResults/spv.multiView.frag.out
@@ -1,6 +1,6 @@
 spv.multiView.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
index c06a890..16e81a1 100644
--- a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
+++ b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
@@ -1,6 +1,6 @@
 spv.multiviewPerViewAttributes.tesc
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 41
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.vert.out b/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
index c8377cf..acca44e 100644
--- a/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
+++ b/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
@@ -1,6 +1,6 @@
 spv.multiviewPerViewAttributes.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out
index 1bad3fa..6bbb032 100644
--- a/Test/baseResults/spv.newTexture.frag.out
+++ b/Test/baseResults/spv.newTexture.frag.out
@@ -1,7 +1,7 @@
 spv.newTexture.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 284
 
                               Capability Shader
diff --git a/Test/baseResults/spv.noBuiltInLoc.vert.out b/Test/baseResults/spv.noBuiltInLoc.vert.out
index 066f81f..7a45e72 100644
--- a/Test/baseResults/spv.noBuiltInLoc.vert.out
+++ b/Test/baseResults/spv.noBuiltInLoc.vert.out
@@ -1,6 +1,6 @@
 spv.noBuiltInLoc.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.noDeadDecorations.vert.out b/Test/baseResults/spv.noDeadDecorations.vert.out
index d7e3702..a555ba2 100644
--- a/Test/baseResults/spv.noDeadDecorations.vert.out
+++ b/Test/baseResults/spv.noDeadDecorations.vert.out
@@ -1,6 +1,6 @@
 spv.noDeadDecorations.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/spv.noWorkgroup.comp.out b/Test/baseResults/spv.noWorkgroup.comp.out
index 2624fdc..92ae670 100644
--- a/Test/baseResults/spv.noWorkgroup.comp.out
+++ b/Test/baseResults/spv.noWorkgroup.comp.out
@@ -1,6 +1,6 @@
 spv.noWorkgroup.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 12
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonSquare.vert.out b/Test/baseResults/spv.nonSquare.vert.out
index 679a5f0..9746fe0 100644
--- a/Test/baseResults/spv.nonSquare.vert.out
+++ b/Test/baseResults/spv.nonSquare.vert.out
@@ -1,6 +1,6 @@
 spv.nonSquare.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 90
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out
index 3aaa873..6b7d407 100644
--- a/Test/baseResults/spv.nonuniform.frag.out
+++ b/Test/baseResults/spv.nonuniform.frag.out
@@ -1,6 +1,6 @@
 spv.nonuniform.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 212
 
                               Capability Shader
@@ -59,16 +59,20 @@
                               Name 203  "S"
                               MemberName 203(S) 0  "a"
                               Name 205  "s"
+                              Decorate 9(nupi) DecorationNonUniformEXT
                               Decorate 13 DecorationNonUniformEXT
                               Decorate 17(nu_li) DecorationNonUniformEXT
+                              Decorate 17(nu_li) DecorationNonUniformEXT
                               Decorate 19 DecorationNonUniformEXT
                               Decorate 24 DecorationNonUniformEXT
                               Decorate 28 DecorationNonUniformEXT
                               Decorate 29 DecorationNonUniformEXT
                               Decorate 35(nu_inv4) Location 0
                               Decorate 35(nu_inv4) DecorationNonUniformEXT
+                              Decorate 39 DecorationNonUniformEXT
                               Decorate 40 DecorationNonUniformEXT
                               Decorate 41(nu_gf) DecorationNonUniformEXT
+                              Decorate 41(nu_gf) DecorationNonUniformEXT
                               Decorate 42 DecorationNonUniformEXT
                               Decorate 43 DecorationNonUniformEXT
                               Decorate 47(inputAttachmentDyn) DescriptorSet 0
@@ -85,47 +89,71 @@
                               Decorate 92(nu_ii) Flat
                               Decorate 92(nu_ii) Location 1
                               Decorate 92(nu_ii) DecorationNonUniformEXT
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 93 DecorationNonUniformEXT
+                              Decorate 95 DecorationNonUniformEXT
                               Decorate 96 DecorationNonUniformEXT
                               MemberDecorate 99(bname) 0 Offset 0
                               Decorate 99(bname) BufferBlock
                               Decorate 102(storageBuffer) DescriptorSet 0
                               Decorate 102(storageBuffer) Binding 4
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 103 DecorationNonUniformEXT
+                              Decorate 104 DecorationNonUniformEXT
                               Decorate 105 DecorationNonUniformEXT
                               Decorate 112(sampledImage) DescriptorSet 0
                               Decorate 112(sampledImage) Binding 5
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 113 DecorationNonUniformEXT
+                              Decorate 115 DecorationNonUniformEXT
                               Decorate 116 DecorationNonUniformEXT
                               Decorate 127(storageImage) DescriptorSet 0
                               Decorate 127(storageImage) Binding 6
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 128 DecorationNonUniformEXT
+                              Decorate 130 DecorationNonUniformEXT
                               Decorate 131 DecorationNonUniformEXT
                               Decorate 139(inputAttachment) DescriptorSet 0
                               Decorate 139(inputAttachment) Binding 7
                               Decorate 139(inputAttachment) InputAttachmentIndex 1
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 140 DecorationNonUniformEXT
+                              Decorate 141 DecorationNonUniformEXT
                               Decorate 142 DecorationNonUniformEXT
                               Decorate 149(uniformTexelBuffer) DescriptorSet 0
                               Decorate 149(uniformTexelBuffer) Binding 8
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 150 DecorationNonUniformEXT
+                              Decorate 151 DecorationNonUniformEXT
                               Decorate 152 DecorationNonUniformEXT
                               Decorate 160(storageTexelBuffer) DescriptorSet 0
                               Decorate 160(storageTexelBuffer) Binding 9
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 161 DecorationNonUniformEXT
+                              Decorate 162 DecorationNonUniformEXT
                               Decorate 163 DecorationNonUniformEXT
                               Decorate 170(v) DecorationNonUniformEXT
+                              Decorate 172 DecorationNonUniformEXT
                               Decorate 173 DecorationNonUniformEXT
+                              Decorate 174 DecorationNonUniformEXT
                               Decorate 175 DecorationNonUniformEXT
+                              Decorate 179 DecorationNonUniformEXT
                               Decorate 180 DecorationNonUniformEXT
+                              Decorate 181 DecorationNonUniformEXT
                               Decorate 182 DecorationNonUniformEXT
+                              Decorate 92(nu_ii) DecorationNonUniformEXT
                               Decorate 186 DecorationNonUniformEXT
+                              Decorate 187 DecorationNonUniformEXT
                               Decorate 188 DecorationNonUniformEXT
+                              Decorate 189 DecorationNonUniformEXT
                               Decorate 190 DecorationNonUniformEXT
                               Decorate 195(m) DecorationNonUniformEXT
+                              Decorate 196 DecorationNonUniformEXT
                               Decorate 197 DecorationNonUniformEXT
                               Decorate 205(s) DecorationNonUniformEXT
+                              Decorate 206 DecorationNonUniformEXT
                               Decorate 207 DecorationNonUniformEXT
+                              Decorate 208 DecorationNonUniformEXT
                               Decorate 209 DecorationNonUniformEXT
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.nonuniform2.frag.out b/Test/baseResults/spv.nonuniform2.frag.out
index 3f101fe..759f4c4 100644
--- a/Test/baseResults/spv.nonuniform2.frag.out
+++ b/Test/baseResults/spv.nonuniform2.frag.out
@@ -1,6 +1,6 @@
 spv.nonuniform2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
@@ -25,6 +25,7 @@
                               Decorate 16(rIndex) Flat
                               Decorate 16(rIndex) Location 3
                               Decorate 18 DecorationNonUniformEXT
+                              Decorate 20 DecorationNonUniformEXT
                               Decorate 21 DecorationNonUniformEXT
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.nonuniform3.frag.out b/Test/baseResults/spv.nonuniform3.frag.out
new file mode 100644
index 0000000..9314261
--- /dev/null
+++ b/Test/baseResults/spv.nonuniform3.frag.out
@@ -0,0 +1,61 @@
+spv.nonuniform3.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 32
+
+                              Capability Shader
+                              Capability ShaderNonUniformEXT
+                              Capability RuntimeDescriptorArrayEXT
+                              Extension  "SPV_EXT_descriptor_indexing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 16
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              Name 4  "main"
+                              Name 9  "FragColor"
+                              Name 13  "uTex"
+                              Name 16  "Index"
+                              Name 23  "uSamp"
+                              Decorate 9(FragColor) Location 0
+                              Decorate 13(uTex) DescriptorSet 0
+                              Decorate 13(uTex) Binding 0
+                              Decorate 16(Index) Flat
+                              Decorate 16(Index) Location 0
+                              Decorate 23(uSamp) DescriptorSet 1
+                              Decorate 23(uSamp) Binding 0
+                              Decorate 27 DecorationNonUniformEXT
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+    9(FragColor):      8(ptr) Variable Output
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypeRuntimeArray 10
+              12:             TypePointer UniformConstant 11
+        13(uTex):     12(ptr) Variable UniformConstant
+              14:             TypeInt 32 1
+              15:             TypePointer Input 14(int)
+       16(Index):     15(ptr) Variable Input
+              18:             TypePointer UniformConstant 10
+              21:             TypeSampler
+              22:             TypePointer UniformConstant 21
+       23(uSamp):     22(ptr) Variable UniformConstant
+              25:             TypeSampledImage 10
+              28:             TypeVector 6(float) 2
+              29:    6(float) Constant 1056964608
+              30:   28(fvec2) ConstantComposite 29 29
+         4(main):           2 Function None 3
+               5:             Label
+              17:     14(int) Load 16(Index)
+              19:     18(ptr) AccessChain 13(uTex) 17
+              20:          10 Load 19
+              24:          21 Load 23(uSamp)
+              26:          25 SampledImage 20 24
+              27:          25 CopyObject 26
+              31:    7(fvec4) ImageSampleImplicitLod 27 30
+                              Store 9(FragColor) 31
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.nonuniform4.frag.out b/Test/baseResults/spv.nonuniform4.frag.out
new file mode 100644
index 0000000..a9dd520
--- /dev/null
+++ b/Test/baseResults/spv.nonuniform4.frag.out
@@ -0,0 +1,50 @@
+spv.nonuniform4.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 24
+
+                              Capability Shader
+                              Capability ImageBuffer
+                              Capability ShaderNonUniformEXT
+                              Capability RuntimeDescriptorArrayEXT
+                              Capability StorageTexelBufferArrayNonUniformIndexingEXT
+                              Extension  "SPV_EXT_descriptor_indexing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 13
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              Name 4  "main"
+                              Name 10  "data"
+                              Name 13  "rIndex"
+                              Decorate 10(data) DescriptorSet 0
+                              Decorate 10(data) Binding 4
+                              Decorate 13(rIndex) Flat
+                              Decorate 13(rIndex) Location 3
+                              Decorate 15 DecorationNonUniformEXT
+                              Decorate 21 DecorationNonUniformEXT
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeImage 6(int) Buffer nonsampled format:R32ui
+               8:             TypeRuntimeArray 7
+               9:             TypePointer UniformConstant 8
+        10(data):      9(ptr) Variable UniformConstant
+              11:             TypeInt 32 1
+              12:             TypePointer Input 11(int)
+      13(rIndex):     12(ptr) Variable Input
+              16:             TypePointer UniformConstant 7
+              18:     11(int) Constant 0
+              19:      6(int) Constant 0
+              20:             TypePointer Image 6(int)
+              22:      6(int) Constant 1
+         4(main):           2 Function None 3
+               5:             Label
+              14:     11(int) Load 13(rIndex)
+              15:     11(int) CopyObject 14
+              17:     16(ptr) AccessChain 10(data) 15
+              21:     20(ptr) ImageTexelPointer 17 18 19
+              23:      6(int) AtomicIAdd 21 22 19 19
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.nonuniform5.frag.out b/Test/baseResults/spv.nonuniform5.frag.out
new file mode 100644
index 0000000..8ce131a
--- /dev/null
+++ b/Test/baseResults/spv.nonuniform5.frag.out
@@ -0,0 +1,56 @@
+spv.nonuniform5.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 23
+
+                              Capability Shader
+                              Capability ShaderNonUniformEXT
+                              Capability RuntimeDescriptorArrayEXT
+                              Capability UniformBufferArrayNonUniformIndexingEXT
+                              Extension  "SPV_EXT_descriptor_indexing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 16
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              Name 4  "main"
+                              Name 9  "FragColor"
+                              Name 10  "UBO"
+                              MemberName 10(UBO) 0  "v"
+                              Name 13  "ubos"
+                              Name 16  "Index"
+                              Decorate 9(FragColor) Location 0
+                              MemberDecorate 10(UBO) 0 Offset 0
+                              Decorate 10(UBO) Block
+                              Decorate 13(ubos) DescriptorSet 0
+                              Decorate 13(ubos) Binding 0
+                              Decorate 16(Index) Flat
+                              Decorate 16(Index) Location 0
+                              Decorate 18 DecorationNonUniformEXT
+                              Decorate 21 DecorationNonUniformEXT
+                              Decorate 22 DecorationNonUniformEXT
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+    9(FragColor):      8(ptr) Variable Output
+         10(UBO):             TypeStruct 7(fvec4)
+              11:             TypeRuntimeArray 10(UBO)
+              12:             TypePointer Uniform 11
+        13(ubos):     12(ptr) Variable Uniform
+              14:             TypeInt 32 1
+              15:             TypePointer Input 14(int)
+       16(Index):     15(ptr) Variable Input
+              19:     14(int) Constant 0
+              20:             TypePointer Uniform 7(fvec4)
+         4(main):           2 Function None 3
+               5:             Label
+              17:     14(int) Load 16(Index)
+              18:     14(int) CopyObject 17
+              21:     20(ptr) AccessChain 13(ubos) 18 19
+              22:    7(fvec4) Load 21
+                              Store 9(FragColor) 22
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.offsets.frag.out b/Test/baseResults/spv.offsets.frag.out
index 17d7b86..08a75e9 100644
--- a/Test/baseResults/spv.offsets.frag.out
+++ b/Test/baseResults/spv.offsets.frag.out
@@ -1,6 +1,6 @@
 spv.offsets.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.paramMemory.frag.out b/Test/baseResults/spv.paramMemory.frag.out
index cba2fbd..df13c65 100644
--- a/Test/baseResults/spv.paramMemory.frag.out
+++ b/Test/baseResults/spv.paramMemory.frag.out
@@ -1,7 +1,7 @@
 spv.paramMemory.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 64
 
                               Capability Shader
diff --git a/Test/baseResults/spv.perprimitiveNV.frag.out b/Test/baseResults/spv.perprimitiveNV.frag.out
index eaff400..9943ee9 100644
--- a/Test/baseResults/spv.perprimitiveNV.frag.out
+++ b/Test/baseResults/spv.perprimitiveNV.frag.out
@@ -1,6 +1,6 @@
 spv.perprimitiveNV.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/spv.pp.line.frag.out b/Test/baseResults/spv.pp.line.frag.out
index 5794177..12c5fa5 100644
--- a/Test/baseResults/spv.pp.line.frag.out
+++ b/Test/baseResults/spv.pp.line.frag.out
@@ -3,7 +3,7 @@
 WARNING: spv.pp.line.frag:7: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader
diff --git a/Test/baseResults/spv.precise.tesc.out b/Test/baseResults/spv.precise.tesc.out
index 95a048f..840e7b3 100644
--- a/Test/baseResults/spv.precise.tesc.out
+++ b/Test/baseResults/spv.precise.tesc.out
@@ -1,6 +1,6 @@
 spv.precise.tesc
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.precise.tese.out b/Test/baseResults/spv.precise.tese.out
index a73cbd8..b59ac0e 100644
--- a/Test/baseResults/spv.precise.tese.out
+++ b/Test/baseResults/spv.precise.tese.out
@@ -1,6 +1,6 @@
 spv.precise.tese
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 119
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.precision.frag.out b/Test/baseResults/spv.precision.frag.out
index 5ddb492..ac4c0aa 100644
--- a/Test/baseResults/spv.precision.frag.out
+++ b/Test/baseResults/spv.precision.frag.out
@@ -1,6 +1,6 @@
 spv.precision.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 127
 
                               Capability Shader
diff --git a/Test/baseResults/spv.precisionNonESSamp.frag.out b/Test/baseResults/spv.precisionNonESSamp.frag.out
index 0620c41..97681f3 100644
--- a/Test/baseResults/spv.precisionNonESSamp.frag.out
+++ b/Test/baseResults/spv.precisionNonESSamp.frag.out
@@ -1,6 +1,6 @@
 spv.precisionNonESSamp.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 47
 
                               Capability Shader
diff --git a/Test/baseResults/spv.prepost.frag.out b/Test/baseResults/spv.prepost.frag.out
index 3b4bfd8..a0dbbd4 100644
--- a/Test/baseResults/spv.prepost.frag.out
+++ b/Test/baseResults/spv.prepost.frag.out
@@ -1,6 +1,6 @@
 spv.prepost.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 94
 
                               Capability Shader
diff --git a/Test/baseResults/spv.privateVariableTypes.frag.out b/Test/baseResults/spv.privateVariableTypes.frag.out
index 9b4063e..1b8e1a5 100644
--- a/Test/baseResults/spv.privateVariableTypes.frag.out
+++ b/Test/baseResults/spv.privateVariableTypes.frag.out
@@ -1,6 +1,6 @@
 spv.privateVariableTypes.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.pushConstant.vert.out b/Test/baseResults/spv.pushConstant.vert.out
index 40ee328..5348edb 100644
--- a/Test/baseResults/spv.pushConstant.vert.out
+++ b/Test/baseResults/spv.pushConstant.vert.out
@@ -1,6 +1,6 @@
 spv.pushConstant.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.pushConstantAnon.vert.out b/Test/baseResults/spv.pushConstantAnon.vert.out
index b03855d..3932b42 100644
--- a/Test/baseResults/spv.pushConstantAnon.vert.out
+++ b/Test/baseResults/spv.pushConstantAnon.vert.out
@@ -1,6 +1,6 @@
 spv.pushConstantAnon.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.qualifiers.vert.out b/Test/baseResults/spv.qualifiers.vert.out
index ffdc6f8..47f73a0 100644
--- a/Test/baseResults/spv.qualifiers.vert.out
+++ b/Test/baseResults/spv.qualifiers.vert.out
@@ -1,6 +1,6 @@
 spv.qualifiers.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out
index 87dbb8c..97d845a 100644
--- a/Test/baseResults/spv.queryL.frag.out
+++ b/Test/baseResults/spv.queryL.frag.out
@@ -1,7 +1,7 @@
 spv.queryL.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 224
 
                               Capability Shader
diff --git a/Test/baseResults/spv.rankShift.comp.out b/Test/baseResults/spv.rankShift.comp.out
index 3ca7514..e0fba77 100644
--- a/Test/baseResults/spv.rankShift.comp.out
+++ b/Test/baseResults/spv.rankShift.comp.out
@@ -1,6 +1,6 @@
 spv.rankShift.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.autoassign-2.frag.out b/Test/baseResults/spv.register.autoassign-2.frag.out
index 533e388..9fd317e 100644
--- a/Test/baseResults/spv.register.autoassign-2.frag.out
+++ b/Test/baseResults/spv.register.autoassign-2.frag.out
@@ -1,6 +1,6 @@
 spv.register.autoassign-2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 47
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.autoassign.frag.out b/Test/baseResults/spv.register.autoassign.frag.out
index 123ea35..74118ef 100644
--- a/Test/baseResults/spv.register.autoassign.frag.out
+++ b/Test/baseResults/spv.register.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.register.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.noautoassign.frag.out b/Test/baseResults/spv.register.noautoassign.frag.out
index 3259f41..1292b0b 100644
--- a/Test/baseResults/spv.register.noautoassign.frag.out
+++ b/Test/baseResults/spv.register.noautoassign.frag.out
@@ -1,6 +1,6 @@
 spv.register.noautoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.subpass.frag.out b/Test/baseResults/spv.register.subpass.frag.out
index c42832a..21f7955 100644
--- a/Test/baseResults/spv.register.subpass.frag.out
+++ b/Test/baseResults/spv.register.subpass.frag.out
@@ -1,6 +1,6 @@
 spv.register.subpass.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out
index 2ee30bc..a575e78 100644
--- a/Test/baseResults/spv.rw.autoassign.frag.out
+++ b/Test/baseResults/spv.rw.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.rw.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sample.frag.out b/Test/baseResults/spv.sample.frag.out
index e4d38f3..57fbf31 100644
--- a/Test/baseResults/spv.sample.frag.out
+++ b/Test/baseResults/spv.sample.frag.out
@@ -1,6 +1,6 @@
 spv.sample.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 13
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sampleId.frag.out b/Test/baseResults/spv.sampleId.frag.out
index 894d8db..1412da2 100644
--- a/Test/baseResults/spv.sampleId.frag.out
+++ b/Test/baseResults/spv.sampleId.frag.out
@@ -1,6 +1,6 @@
 spv.sampleId.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
index 3a9872e..2892325 100644
--- a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
+++ b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out
@@ -1,6 +1,6 @@
 spv.sampleMaskOverrideCoverage.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.samplePosition.frag.out b/Test/baseResults/spv.samplePosition.frag.out
index 882423e..b06c768 100644
--- a/Test/baseResults/spv.samplePosition.frag.out
+++ b/Test/baseResults/spv.samplePosition.frag.out
@@ -1,6 +1,6 @@
 spv.samplePosition.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/spv.samplerlessTextureFunctions.frag.out b/Test/baseResults/spv.samplerlessTextureFunctions.frag.out
index 0f09b43..c12201e 100644
--- a/Test/baseResults/spv.samplerlessTextureFunctions.frag.out
+++ b/Test/baseResults/spv.samplerlessTextureFunctions.frag.out
@@ -1,6 +1,6 @@
 spv.samplerlessTextureFunctions.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 51
 
                               Capability Shader
diff --git a/Test/baseResults/spv.scalarlayout.frag.out b/Test/baseResults/spv.scalarlayout.frag.out
index 0168bc3..1b26242 100644
--- a/Test/baseResults/spv.scalarlayout.frag.out
+++ b/Test/baseResults/spv.scalarlayout.frag.out
@@ -1,7 +1,7 @@
 spv.scalarlayout.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.scalarlayoutfloat16.frag.out b/Test/baseResults/spv.scalarlayoutfloat16.frag.out
index dac7e3a..c88fa7f 100644
--- a/Test/baseResults/spv.scalarlayoutfloat16.frag.out
+++ b/Test/baseResults/spv.scalarlayoutfloat16.frag.out
@@ -1,7 +1,7 @@
 spv.scalarlayoutfloat16.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.separate.frag.out b/Test/baseResults/spv.separate.frag.out
index 27cd3be..690ab2f 100644
--- a/Test/baseResults/spv.separate.frag.out
+++ b/Test/baseResults/spv.separate.frag.out
@@ -1,7 +1,7 @@
 spv.separate.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 319
 
                               Capability Shader
diff --git a/Test/baseResults/spv.set.vert.out b/Test/baseResults/spv.set.vert.out
index 16d771f..fe4326f 100644
--- a/Test/baseResults/spv.set.vert.out
+++ b/Test/baseResults/spv.set.vert.out
@@ -1,6 +1,6 @@
 spv.set.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out
index 1c616ee..3ddee0f 100644
--- a/Test/baseResults/spv.shaderBallot.comp.out
+++ b/Test/baseResults/spv.shaderBallot.comp.out
@@ -1,6 +1,6 @@
 spv.shaderBallot.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 318
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderBallotAMD.comp.out b/Test/baseResults/spv.shaderBallotAMD.comp.out
index 62ce6f2..eb8f404 100644
--- a/Test/baseResults/spv.shaderBallotAMD.comp.out
+++ b/Test/baseResults/spv.shaderBallotAMD.comp.out
@@ -1,6 +1,6 @@
 spv.shaderBallotAMD.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1343
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderDrawParams.vert.out b/Test/baseResults/spv.shaderDrawParams.vert.out
index d6b43e8..ad51de1 100644
--- a/Test/baseResults/spv.shaderDrawParams.vert.out
+++ b/Test/baseResults/spv.shaderDrawParams.vert.out
@@ -1,6 +1,6 @@
 spv.shaderDrawParams.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderFragMaskAMD.frag.out b/Test/baseResults/spv.shaderFragMaskAMD.frag.out
index 788d3ee..b1e5c0d 100644
--- a/Test/baseResults/spv.shaderFragMaskAMD.frag.out
+++ b/Test/baseResults/spv.shaderFragMaskAMD.frag.out
@@ -1,6 +1,6 @@
 spv.shaderFragMaskAMD.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 80
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderGroupVote.comp.out b/Test/baseResults/spv.shaderGroupVote.comp.out
index e45f585..a09e798 100644
--- a/Test/baseResults/spv.shaderGroupVote.comp.out
+++ b/Test/baseResults/spv.shaderGroupVote.comp.out
@@ -1,6 +1,6 @@
 spv.shaderGroupVote.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderImageFootprint.frag.out b/Test/baseResults/spv.shaderImageFootprint.frag.out
index 8218ee4..7559564 100644
--- a/Test/baseResults/spv.shaderImageFootprint.frag.out
+++ b/Test/baseResults/spv.shaderImageFootprint.frag.out
@@ -1,6 +1,6 @@
 spv.shaderImageFootprint.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 622
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shaderStencilExport.frag.out b/Test/baseResults/spv.shaderStencilExport.frag.out
index 8fc691e..37fce5f 100644
--- a/Test/baseResults/spv.shaderStencilExport.frag.out
+++ b/Test/baseResults/spv.shaderStencilExport.frag.out
@@ -1,6 +1,6 @@
 spv.shaderStencilExport.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 10
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shadingRate.frag.out b/Test/baseResults/spv.shadingRate.frag.out
index 1147776..ce56113 100644
--- a/Test/baseResults/spv.shadingRate.frag.out
+++ b/Test/baseResults/spv.shadingRate.frag.out
@@ -1,6 +1,6 @@
 spv.shadingRate.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shiftOps.frag.out b/Test/baseResults/spv.shiftOps.frag.out
index 3085a55..15df236 100644
--- a/Test/baseResults/spv.shiftOps.frag.out
+++ b/Test/baseResults/spv.shiftOps.frag.out
@@ -1,6 +1,6 @@
 spv.shiftOps.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader
diff --git a/Test/baseResults/spv.shortCircuit.frag.out b/Test/baseResults/spv.shortCircuit.frag.out
index d651824..6104b04 100644
--- a/Test/baseResults/spv.shortCircuit.frag.out
+++ b/Test/baseResults/spv.shortCircuit.frag.out
@@ -1,6 +1,6 @@
 spv.shortCircuit.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 147
 
                               Capability Shader
diff --git a/Test/baseResults/spv.simpleFunctionCall.frag.out b/Test/baseResults/spv.simpleFunctionCall.frag.out
index 627b31c..8e666a6 100644
--- a/Test/baseResults/spv.simpleFunctionCall.frag.out
+++ b/Test/baseResults/spv.simpleFunctionCall.frag.out
@@ -1,6 +1,6 @@
 spv.simpleFunctionCall.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 19
 
                               Capability Shader
diff --git a/Test/baseResults/spv.simpleMat.vert.out b/Test/baseResults/spv.simpleMat.vert.out
index 8557458..ff51dc0 100644
--- a/Test/baseResults/spv.simpleMat.vert.out
+++ b/Test/baseResults/spv.simpleMat.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:3: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.smBuiltins.frag.out b/Test/baseResults/spv.smBuiltins.frag.out
index fda06eb..9f4cc60 100644
--- a/Test/baseResults/spv.smBuiltins.frag.out
+++ b/Test/baseResults/spv.smBuiltins.frag.out
@@ -1,6 +1,6 @@
 spv.smBuiltins.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.smBuiltins.vert.out b/Test/baseResults/spv.smBuiltins.vert.out
index 8423e5b..0453b0c 100644
--- a/Test/baseResults/spv.smBuiltins.vert.out
+++ b/Test/baseResults/spv.smBuiltins.vert.out
@@ -1,6 +1,6 @@
 spv.smBuiltins.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out
index 7fdea0c..3414200 100644
--- a/Test/baseResults/spv.sparseTexture.frag.out
+++ b/Test/baseResults/spv.sparseTexture.frag.out
@@ -1,7 +1,7 @@
 spv.sparseTexture.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 438
 
                               Capability Shader
diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out
index ff7dce5..fedd64a 100644
--- a/Test/baseResults/spv.sparseTextureClamp.frag.out
+++ b/Test/baseResults/spv.sparseTextureClamp.frag.out
@@ -1,7 +1,7 @@
 spv.sparseTextureClamp.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 360
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConst.vert.out b/Test/baseResults/spv.specConst.vert.out
index 70fbd09..116c136 100644
--- a/Test/baseResults/spv.specConst.vert.out
+++ b/Test/baseResults/spv.specConst.vert.out
@@ -1,6 +1,6 @@
 spv.specConst.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstant.comp.out b/Test/baseResults/spv.specConstant.comp.out
index 2f64150..e0ad699 100644
--- a/Test/baseResults/spv.specConstant.comp.out
+++ b/Test/baseResults/spv.specConstant.comp.out
@@ -1,6 +1,6 @@
 spv.specConstant.comp
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out
index 49bcca6..206e30a 100644
--- a/Test/baseResults/spv.specConstant.vert.out
+++ b/Test/baseResults/spv.specConstant.vert.out
@@ -1,6 +1,6 @@
 spv.specConstant.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 81
 
                               Capability Shader
@@ -11,7 +11,7 @@
                               Source GLSL 400
                               Name 4  "main"
                               Name 9  "arraySize"
-                              Name 14  "foo(vf4[s4393];"
+                              Name 14  "foo(vf4[s4546];"
                               Name 13  "p"
                               Name 17  "builtin_spec_constant("
                               Name 20  "color"
@@ -102,10 +102,10 @@
                               Store 20(color) 46
               48:          10 Load 22(ucol)
                               Store 47(param) 48
-              49:           2 FunctionCall 14(foo(vf4[s4393];) 47(param)
+              49:           2 FunctionCall 14(foo(vf4[s4546];) 47(param)
                               Return
                               FunctionEnd
-14(foo(vf4[s4393];):           2 Function None 12
+14(foo(vf4[s4546];):           2 Function None 12
            13(p):     11(ptr) FunctionParameter
               15:             Label
               54:     24(ptr) AccessChain 53(dupUcol) 23
diff --git a/Test/baseResults/spv.specConstantComposite.vert.out b/Test/baseResults/spv.specConstantComposite.vert.out
index 58d4b6a..20a071b 100644
--- a/Test/baseResults/spv.specConstantComposite.vert.out
+++ b/Test/baseResults/spv.specConstantComposite.vert.out
@@ -1,6 +1,6 @@
 spv.specConstantComposite.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstantOperations.vert.out b/Test/baseResults/spv.specConstantOperations.vert.out
index 0f141e3..747d50b 100644
--- a/Test/baseResults/spv.specConstantOperations.vert.out
+++ b/Test/baseResults/spv.specConstantOperations.vert.out
@@ -1,6 +1,6 @@
 spv.specConstantOperations.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specTexture.frag.out b/Test/baseResults/spv.specTexture.frag.out
new file mode 100755
index 0000000..a4cf47d
--- /dev/null
+++ b/Test/baseResults/spv.specTexture.frag.out
@@ -0,0 +1,43 @@
+spv.specTexture.frag
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 23
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9
+                              ExecutionMode 4 OriginLowerLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "color_out"
+                              Name 13  "tex"
+                              Name 19  "offs"
+                              Decorate 9(color_out) Location 0
+                              Decorate 13(tex) DescriptorSet 0
+                              Decorate 13(tex) Binding 0
+                              Decorate 19(offs) SpecId 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+    9(color_out):      8(ptr) Variable Output
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypeSampledImage 10
+              12:             TypePointer UniformConstant 11
+         13(tex):     12(ptr) Variable UniformConstant
+              15:             TypeVector 6(float) 2
+              16:    6(float) Constant 0
+              17:   15(fvec2) ConstantComposite 16 16
+              18:             TypeInt 32 1
+        19(offs):     18(int) SpecConstant 0
+              20:             TypeVector 18(int) 2
+              21:   20(ivec2) SpecConstantComposite 19(offs) 19(offs)
+         4(main):           2 Function None 3
+               5:             Label
+              14:          11 Load 13(tex)
+              22:    7(fvec4) ImageSampleExplicitLod 14 17 Lod ConstOffset 16 21
+                              Store 9(color_out) 22
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ssbo.autoassign.frag.out b/Test/baseResults/spv.ssbo.autoassign.frag.out
index 40afa15..7d64847 100644
--- a/Test/baseResults/spv.ssbo.autoassign.frag.out
+++ b/Test/baseResults/spv.ssbo.autoassign.frag.out
@@ -1,6 +1,6 @@
 spv.ssbo.autoassign.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseResults/spv.ssboAlias.frag.out b/Test/baseResults/spv.ssboAlias.frag.out
index f03d2ca..1711d9d 100644
--- a/Test/baseResults/spv.ssboAlias.frag.out
+++ b/Test/baseResults/spv.ssboAlias.frag.out
@@ -1,6 +1,6 @@
 spv.ssboAlias.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 44
 
                               Capability Shader
diff --git a/Test/baseResults/spv.stereoViewRendering.tesc.out b/Test/baseResults/spv.stereoViewRendering.tesc.out
index 43afff9..2cab064 100644
--- a/Test/baseResults/spv.stereoViewRendering.tesc.out
+++ b/Test/baseResults/spv.stereoViewRendering.tesc.out
@@ -1,6 +1,6 @@
 spv.stereoViewRendering.tesc
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.stereoViewRendering.vert.out b/Test/baseResults/spv.stereoViewRendering.vert.out
index afd8c75..acb8338 100644
--- a/Test/baseResults/spv.stereoViewRendering.vert.out
+++ b/Test/baseResults/spv.stereoViewRendering.vert.out
@@ -1,6 +1,6 @@
 spv.stereoViewRendering.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.storageBuffer.vert.out b/Test/baseResults/spv.storageBuffer.vert.out
index 5006e4c..79cf9f1 100644
--- a/Test/baseResults/spv.storageBuffer.vert.out
+++ b/Test/baseResults/spv.storageBuffer.vert.out
@@ -1,6 +1,6 @@
 spv.storageBuffer.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.structAssignment.frag.out b/Test/baseResults/spv.structAssignment.frag.out
index 4b357da..d61c0e4 100644
--- a/Test/baseResults/spv.structAssignment.frag.out
+++ b/Test/baseResults/spv.structAssignment.frag.out
@@ -3,7 +3,7 @@
          "precision mediump int; precision highp float;" 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/spv.structDeref.frag.out b/Test/baseResults/spv.structDeref.frag.out
index 6888a85..2a114d7 100644
--- a/Test/baseResults/spv.structDeref.frag.out
+++ b/Test/baseResults/spv.structDeref.frag.out
@@ -1,6 +1,6 @@
 spv.structDeref.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 123
 
                               Capability Shader
diff --git a/Test/baseResults/spv.structure.frag.out b/Test/baseResults/spv.structure.frag.out
index f1da59f..e8f8b39 100644
--- a/Test/baseResults/spv.structure.frag.out
+++ b/Test/baseResults/spv.structure.frag.out
@@ -1,6 +1,6 @@
 spv.structure.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 60
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroup.frag.out b/Test/baseResults/spv.subgroup.frag.out
index 4dd636e..ee932bf 100644
--- a/Test/baseResults/spv.subgroup.frag.out
+++ b/Test/baseResults/spv.subgroup.frag.out
@@ -1,6 +1,6 @@
 spv.subgroup.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroup.geom.out b/Test/baseResults/spv.subgroup.geom.out
index a68343a..279e646 100644
--- a/Test/baseResults/spv.subgroup.geom.out
+++ b/Test/baseResults/spv.subgroup.geom.out
@@ -1,6 +1,6 @@
 spv.subgroup.geom
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.subgroup.tesc.out b/Test/baseResults/spv.subgroup.tesc.out
index 4e362e2..bc55b4e 100644
--- a/Test/baseResults/spv.subgroup.tesc.out
+++ b/Test/baseResults/spv.subgroup.tesc.out
@@ -1,6 +1,6 @@
 spv.subgroup.tesc
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.subgroup.tese.out b/Test/baseResults/spv.subgroup.tese.out
index e09f558..6b0a5ce 100644
--- a/Test/baseResults/spv.subgroup.tese.out
+++ b/Test/baseResults/spv.subgroup.tese.out
@@ -1,6 +1,6 @@
 spv.subgroup.tese
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Tessellation
diff --git a/Test/baseResults/spv.subgroup.vert.out b/Test/baseResults/spv.subgroup.vert.out
index 2fbc92b..6deaf55 100644
--- a/Test/baseResults/spv.subgroup.vert.out
+++ b/Test/baseResults/spv.subgroup.vert.out
@@ -1,6 +1,6 @@
 spv.subgroup.vert
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupArithmetic.comp.out b/Test/baseResults/spv.subgroupArithmetic.comp.out
index f4e251a..29ea9ec 100644
--- a/Test/baseResults/spv.subgroupArithmetic.comp.out
+++ b/Test/baseResults/spv.subgroupArithmetic.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupArithmetic.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 2085
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupBallot.comp.out b/Test/baseResults/spv.subgroupBallot.comp.out
index ea152d9..9fe1964 100644
--- a/Test/baseResults/spv.subgroupBallot.comp.out
+++ b/Test/baseResults/spv.subgroupBallot.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupBallot.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 397
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupBasic.comp.out b/Test/baseResults/spv.subgroupBasic.comp.out
index 641534d..2f6571b 100644
--- a/Test/baseResults/spv.subgroupBasic.comp.out
+++ b/Test/baseResults/spv.subgroupBasic.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupBasic.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupClustered.comp.out b/Test/baseResults/spv.subgroupClustered.comp.out
index 150eb8a..3971281 100644
--- a/Test/baseResults/spv.subgroupClustered.comp.out
+++ b/Test/baseResults/spv.subgroupClustered.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupClustered.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 737
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
index 453d6fc..263f48d 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesArithmetic.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 3665
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
index 4e1b2dc..9f6a8c0 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesBallot.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 441
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
index b0b94b5..af3385e 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesClustered.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1273
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
index 2f5a570..9de4b98 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesPartitioned.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 1558
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
index 7d37a41..ebd6132 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesQuad.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 806
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
index d647ded..f241389 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesShuffle.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 497
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
index ef5def5..06150b0 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesShuffleRelative.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 497
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out b/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
index a32c25d..63cc844 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupExtendedTypesVote.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 277
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupPartitioned.comp.out b/Test/baseResults/spv.subgroupPartitioned.comp.out
index 742e5bc..e16e309 100644
--- a/Test/baseResults/spv.subgroupPartitioned.comp.out
+++ b/Test/baseResults/spv.subgroupPartitioned.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupPartitioned.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 2506
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupQuad.comp.out b/Test/baseResults/spv.subgroupQuad.comp.out
index 435c490..1c5e963 100644
--- a/Test/baseResults/spv.subgroupQuad.comp.out
+++ b/Test/baseResults/spv.subgroupQuad.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupQuad.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 616
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupShuffle.comp.out b/Test/baseResults/spv.subgroupShuffle.comp.out
index 991c6fa..532b0d2 100644
--- a/Test/baseResults/spv.subgroupShuffle.comp.out
+++ b/Test/baseResults/spv.subgroupShuffle.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupShuffle.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 379
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupShuffleRelative.comp.out b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
index 3aad760..ae5589a 100644
--- a/Test/baseResults/spv.subgroupShuffleRelative.comp.out
+++ b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupShuffleRelative.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 379
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subgroupVote.comp.out b/Test/baseResults/spv.subgroupVote.comp.out
index 4fdbb0b..6f6f8cf 100644
--- a/Test/baseResults/spv.subgroupVote.comp.out
+++ b/Test/baseResults/spv.subgroupVote.comp.out
@@ -1,6 +1,6 @@
 spv.subgroupVote.comp
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 216
 
                               Capability Shader
diff --git a/Test/baseResults/spv.subpass.frag.out b/Test/baseResults/spv.subpass.frag.out
index 706624d..4bc556a 100644
--- a/Test/baseResults/spv.subpass.frag.out
+++ b/Test/baseResults/spv.subpass.frag.out
@@ -1,6 +1,6 @@
 spv.subpass.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 67
 
                               Capability Shader
diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out
index 47cc5d4..729257c 100644
--- a/Test/baseResults/spv.switch.frag.out
+++ b/Test/baseResults/spv.switch.frag.out
@@ -4,7 +4,7 @@
 WARNING: 0:139: 'switch' : last case/default label not followed by statements 
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 269
 
                               Capability Shader
diff --git a/Test/baseResults/spv.swizzle.frag.out b/Test/baseResults/spv.swizzle.frag.out
index 2a132d5..9b31a26 100644
--- a/Test/baseResults/spv.swizzle.frag.out
+++ b/Test/baseResults/spv.swizzle.frag.out
@@ -1,6 +1,6 @@
 spv.swizzle.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 108
 
                               Capability Shader
diff --git a/Test/baseResults/spv.swizzleInversion.frag.out b/Test/baseResults/spv.swizzleInversion.frag.out
index 0aee7ae..7964360 100644
--- a/Test/baseResults/spv.swizzleInversion.frag.out
+++ b/Test/baseResults/spv.swizzleInversion.frag.out
@@ -1,6 +1,6 @@
 spv.swizzleInversion.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 46
 
                               Capability Shader
diff --git a/Test/baseResults/spv.test.frag.out b/Test/baseResults/spv.test.frag.out
index 02e4f66..db77cbb 100644
--- a/Test/baseResults/spv.test.frag.out
+++ b/Test/baseResults/spv.test.frag.out
@@ -1,6 +1,6 @@
 spv.test.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 55
 
                               Capability Shader
diff --git a/Test/baseResults/spv.test.vert.out b/Test/baseResults/spv.test.vert.out
index 3303c88..3b06c66 100644
--- a/Test/baseResults/spv.test.vert.out
+++ b/Test/baseResults/spv.test.vert.out
@@ -2,7 +2,7 @@
 WARNING: 0:5: attribute deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out
index d518ad7..3ea7338 100644
--- a/Test/baseResults/spv.texture.frag.out
+++ b/Test/baseResults/spv.texture.frag.out
@@ -4,7 +4,7 @@
 WARNING: 0:12: varying deprecated in version 130; may be removed in future release
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 305
 
                               Capability Shader
diff --git a/Test/baseResults/spv.texture.sampler.transform.frag.out b/Test/baseResults/spv.texture.sampler.transform.frag.out
index 612f2a9..f2306e7 100644
--- a/Test/baseResults/spv.texture.sampler.transform.frag.out
+++ b/Test/baseResults/spv.texture.sampler.transform.frag.out
@@ -1,6 +1,6 @@
 spv.texture.sampler.transform.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out
index f3f979c..3f9336b 100644
--- a/Test/baseResults/spv.texture.vert.out
+++ b/Test/baseResults/spv.texture.vert.out
@@ -1,6 +1,6 @@
 spv.texture.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 150
 
                               Capability Shader
diff --git a/Test/baseResults/spv.textureBuffer.vert.out b/Test/baseResults/spv.textureBuffer.vert.out
index 252a9c8..4631290 100644
--- a/Test/baseResults/spv.textureBuffer.vert.out
+++ b/Test/baseResults/spv.textureBuffer.vert.out
@@ -1,6 +1,6 @@
 spv.textureBuffer.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 42
 
                               Capability Shader
diff --git a/Test/baseResults/spv.textureGatherBiasLod.frag.out b/Test/baseResults/spv.textureGatherBiasLod.frag.out
index cd18688..aada70d 100644
--- a/Test/baseResults/spv.textureGatherBiasLod.frag.out
+++ b/Test/baseResults/spv.textureGatherBiasLod.frag.out
@@ -1,7 +1,7 @@
 spv.textureGatherBiasLod.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 298
 
                               Capability Shader
diff --git a/Test/baseResults/spv.types.frag.out b/Test/baseResults/spv.types.frag.out
index e6fd3e0..3f7fd12 100644
--- a/Test/baseResults/spv.types.frag.out
+++ b/Test/baseResults/spv.types.frag.out
@@ -1,6 +1,6 @@
 spv.types.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 260
 
                               Capability Shader
diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out
index e6fe5e4..612b323 100644
--- a/Test/baseResults/spv.uint.frag.out
+++ b/Test/baseResults/spv.uint.frag.out
@@ -1,6 +1,6 @@
 spv.uint.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 213
 
                               Capability Shader
diff --git a/Test/baseResults/spv.uniformArray.frag.out b/Test/baseResults/spv.uniformArray.frag.out
index 0f9883e..339d1de 100644
--- a/Test/baseResults/spv.uniformArray.frag.out
+++ b/Test/baseResults/spv.uniformArray.frag.out
@@ -1,6 +1,6 @@
 spv.uniformArray.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/spv.unit1.frag.out b/Test/baseResults/spv.unit1.frag.out
index d64d437..b2ec724 100644
--- a/Test/baseResults/spv.unit1.frag.out
+++ b/Test/baseResults/spv.unit1.frag.out
@@ -193,7 +193,7 @@
 0:?     'h3' ( global highp float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 69
 
                               Capability Shader
diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out
index 87d934e..cc6d96b 100644
--- a/Test/baseResults/spv.variableArrayIndex.frag.out
+++ b/Test/baseResults/spv.variableArrayIndex.frag.out
@@ -1,6 +1,6 @@
 spv.variableArrayIndex.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 93
 
                               Capability Shader
diff --git a/Test/baseResults/spv.varyingArray.frag.out b/Test/baseResults/spv.varyingArray.frag.out
index 2628f82..d5a59ae 100644
--- a/Test/baseResults/spv.varyingArray.frag.out
+++ b/Test/baseResults/spv.varyingArray.frag.out
@@ -1,6 +1,6 @@
 spv.varyingArray.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 61
 
                               Capability Shader
diff --git a/Test/baseResults/spv.varyingArrayIndirect.frag.out b/Test/baseResults/spv.varyingArrayIndirect.frag.out
index 60e9857..799def9 100644
--- a/Test/baseResults/spv.varyingArrayIndirect.frag.out
+++ b/Test/baseResults/spv.varyingArrayIndirect.frag.out
@@ -1,6 +1,6 @@
 spv.varyingArrayIndirect.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/spv.vecMatConstruct.frag.out b/Test/baseResults/spv.vecMatConstruct.frag.out
index 57ecd67..004b2bc 100644
--- a/Test/baseResults/spv.vecMatConstruct.frag.out
+++ b/Test/baseResults/spv.vecMatConstruct.frag.out
@@ -1,6 +1,6 @@
 spv.vecMatConstruct.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 62
 
                               Capability Shader
diff --git a/Test/baseResults/spv.viewportArray2.tesc.out b/Test/baseResults/spv.viewportArray2.tesc.out
index a4016d4..78ee00d 100644
--- a/Test/baseResults/spv.viewportArray2.tesc.out
+++ b/Test/baseResults/spv.viewportArray2.tesc.out
@@ -1,7 +1,7 @@
 spv.viewportArray2.tesc
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 25
 
                               Capability Geometry
diff --git a/Test/baseResults/spv.viewportArray2.vert.out b/Test/baseResults/spv.viewportArray2.vert.out
index df116cf..6d419a6 100644
--- a/Test/baseResults/spv.viewportArray2.vert.out
+++ b/Test/baseResults/spv.viewportArray2.vert.out
@@ -1,6 +1,6 @@
 spv.viewportArray2.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 19
 
                               Capability Shader
diff --git a/Test/baseResults/spv.voidFunction.frag.out b/Test/baseResults/spv.voidFunction.frag.out
index fbaee87..804b32c 100644
--- a/Test/baseResults/spv.voidFunction.frag.out
+++ b/Test/baseResults/spv.voidFunction.frag.out
@@ -1,6 +1,6 @@
 spv.voidFunction.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.volatileAtomic.comp.out b/Test/baseResults/spv.volatileAtomic.comp.out
new file mode 100644
index 0000000..8326374
--- /dev/null
+++ b/Test/baseResults/spv.volatileAtomic.comp.out
@@ -0,0 +1,40 @@
+spv.volatileAtomic.comp
+// Module Version 10000
+// Generated by (magic number): 80008
+// Id's are bound by 18
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "D"
+                              MemberName 8(D) 0  "d"
+                              Name 10  "d"
+                              Decorate 7 ArrayStride 4
+                              MemberDecorate 8(D) 0 Volatile
+                              MemberDecorate 8(D) 0 Coherent
+                              MemberDecorate 8(D) 0 Offset 0
+                              Decorate 8(D) BufferBlock
+                              Decorate 10(d) DescriptorSet 0
+                              Decorate 10(d) Binding 3
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeRuntimeArray 6(int)
+            8(D):             TypeStruct 7
+               9:             TypePointer Uniform 8(D)
+           10(d):      9(ptr) Variable Uniform
+              11:             TypeInt 32 1
+              12:     11(int) Constant 0
+              13:             TypePointer Uniform 6(int)
+              15:      6(int) Constant 0
+              16:      6(int) Constant 1
+         4(main):           2 Function None 3
+               5:             Label
+              14:     13(ptr) AccessChain 10(d) 12 12
+              17:      6(int) AtomicExchange 14 16 15 15
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.vulkan110.int16.frag.out b/Test/baseResults/spv.vulkan110.int16.frag.out
index 11f1cd3..b94593c 100644
--- a/Test/baseResults/spv.vulkan110.int16.frag.out
+++ b/Test/baseResults/spv.vulkan110.int16.frag.out
@@ -1,6 +1,6 @@
 spv.vulkan110.int16.frag
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 523
 
                               Capability Shader
diff --git a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
index a019471..7592cf7 100644
--- a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
+++ b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
@@ -1,6 +1,6 @@
 spv.vulkan110.storageBuffer.vert
 // Module Version 10300
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.while-continue-break.vert.out b/Test/baseResults/spv.while-continue-break.vert.out
index d49bca0..132f503 100644
--- a/Test/baseResults/spv.while-continue-break.vert.out
+++ b/Test/baseResults/spv.while-continue-break.vert.out
@@ -1,6 +1,6 @@
 spv.while-continue-break.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 41
 
                               Capability Shader
diff --git a/Test/baseResults/spv.while-simple.vert.out b/Test/baseResults/spv.while-simple.vert.out
index b507da3..ea9a980 100644
--- a/Test/baseResults/spv.while-simple.vert.out
+++ b/Test/baseResults/spv.while-simple.vert.out
@@ -1,6 +1,6 @@
 spv.while-simple.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader
diff --git a/Test/baseResults/spv.whileLoop.frag.out b/Test/baseResults/spv.whileLoop.frag.out
index e294972..67d44f4 100644
--- a/Test/baseResults/spv.whileLoop.frag.out
+++ b/Test/baseResults/spv.whileLoop.frag.out
@@ -1,6 +1,6 @@
 spv.whileLoop.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfb.vert.out b/Test/baseResults/spv.xfb.vert.out
index 3cd93d5..7eb38b3 100644
--- a/Test/baseResults/spv.xfb.vert.out
+++ b/Test/baseResults/spv.xfb.vert.out
@@ -1,6 +1,6 @@
 spv.xfb.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 16
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfb2.vert.out b/Test/baseResults/spv.xfb2.vert.out
index a8551a1..0f593da 100644
--- a/Test/baseResults/spv.xfb2.vert.out
+++ b/Test/baseResults/spv.xfb2.vert.out
@@ -1,6 +1,6 @@
 spv.xfb2.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfb3.vert.out b/Test/baseResults/spv.xfb3.vert.out
index 0218847..77894b4 100644
--- a/Test/baseResults/spv.xfb3.vert.out
+++ b/Test/baseResults/spv.xfb3.vert.out
@@ -1,6 +1,6 @@
 spv.xfb3.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out b/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out
index 066aa3a..52ce965 100644
--- a/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out
+++ b/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out
@@ -1,6 +1,6 @@
 spv.xfbOffsetOnBlockMembersAssignment.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out b/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
index 668d24a..13be843 100644
--- a/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
+++ b/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
@@ -1,6 +1,6 @@
 spv.xfbOffsetOnStructMembersAssignment.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out b/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out
index ebc4962..7159f4a 100644
--- a/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out
+++ b/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out
@@ -1,6 +1,6 @@
 spv.xfbOverlapOffsetCheckWithBlockAndMember.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/spv.xfbStrideJustOnce.vert.out b/Test/baseResults/spv.xfbStrideJustOnce.vert.out
index 9b459b5..270d17a 100644
--- a/Test/baseResults/spv.xfbStrideJustOnce.vert.out
+++ b/Test/baseResults/spv.xfbStrideJustOnce.vert.out
@@ -1,6 +1,6 @@
 spv.xfbStrideJustOnce.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/test.conf b/Test/baseResults/test.conf
index cff7716..98b2a84 100644
--- a/Test/baseResults/test.conf
+++ b/Test/baseResults/test.conf
@@ -90,6 +90,7 @@
 MaxTaskWorkGroupSizeY_NV 1
 MaxTaskWorkGroupSizeZ_NV 1
 MaxMeshViewCountNV 4
+MaxDualSourceDrawBuffersEXT 1
 nonInductiveForLoops 1
 whileLoops 1
 doWhileLoops 1
diff --git a/Test/baseResults/versionsErrors.frag.out b/Test/baseResults/versionsErrors.frag.out
index dbeb941..b072669 100644
--- a/Test/baseResults/versionsErrors.frag.out
+++ b/Test/baseResults/versionsErrors.frag.out
@@ -7,6 +7,7 @@
 
 
 Shader version: 110
+Requested GL_ARB_texture_rectangle
 ERROR: node is still EOpNull!
 0:42  Function Definition: main( ( global void)
 0:42    Function Parameters: 
@@ -27,6 +28,7 @@
 
 
 Shader version: 110
+Requested GL_ARB_texture_rectangle
 ERROR: node is still EOpNull!
 0:42  Function Definition: main( ( global void)
 0:42    Function Parameters: 
diff --git a/Test/baseResults/vulkan.ast.vert.out b/Test/baseResults/vulkan.ast.vert.out
index 72a4570..2bf2065 100644
--- a/Test/baseResults/vulkan.ast.vert.out
+++ b/Test/baseResults/vulkan.ast.vert.out
@@ -258,7 +258,7 @@
 0:?       2 (const int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out
index c81ed25..e620898 100644
--- a/Test/baseResults/vulkan.frag.out
+++ b/Test/baseResults/vulkan.frag.out
@@ -7,14 +7,14 @@
 ERROR: 0:9: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:10: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:14: 'sampler2D' : sampler-constructor requires two arguments 
-ERROR: 0:15: 'sampler2D' : sampler-constructor first argument must be a scalar textureXXX type 
-ERROR: 0:16: 'sampler2D' : sampler-constructor first argument must be a scalar textureXXX type 
-ERROR: 0:17: 'sampler2D' : sampler-constructor second argument must be a scalar type 'sampler' 
-ERROR: 0:18: 'sampler2D' : sampler-constructor second argument must be a scalar type 'sampler' 
-ERROR: 0:19: 'sampler2D' : sampler-constructor second argument must be a scalar type 'sampler' 
+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 
+ERROR: 0:18: 'sampler2D' : sampler-constructor second argument must be a scalar sampler or samplerShadow 
+ERROR: 0:19: 'sampler2D' : sampler-constructor second argument must be a scalar sampler or samplerShadow 
 ERROR: 0:21: 'sampler3D' : sampler-constructor cannot make an array of samplers 
-ERROR: 0:22: 'sampler2D' : sampler-constructor first argument must be a scalar textureXXX type 
-ERROR: 0:23: 'sampler2D' : sampler-constructor first argument must match type and dimensionality of constructor type 
+ERROR: 0:22: 'sampler2D' : sampler-constructor first argument must be a scalar *texture* type 
+ERROR: 0:23: 'sampler2D' : sampler-constructor first argument must be a *texture* type matching the dimensionality and sampled type of the constructor 
 ERROR: 0:28: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: s2D
 ERROR: 0:29: 'sampler3D' : sampler-constructor cannot make an array of samplers 
 ERROR: 0:29: 'sampler3D' : sampler/image types can only be used in uniform variables or function parameters: s3d
diff --git a/Test/baseResults/web.array.frag.out b/Test/baseResults/web.array.frag.out
index df70be1..61c9db9 100644
--- a/Test/baseResults/web.array.frag.out
+++ b/Test/baseResults/web.array.frag.out
@@ -1,6 +1,6 @@
 ; SPIR-V
 ; Version: 1.0
-; Generator: Khronos Glslang Reference Front End; 7
+; Generator: Khronos Glslang Reference Front End; 8
 ; Bound: 74
 ; Schema: 0
                OpCapability Shader
diff --git a/Test/baseResults/web.basic.vert.out b/Test/baseResults/web.basic.vert.out
index cd9805b..46c147f 100644
--- a/Test/baseResults/web.basic.vert.out
+++ b/Test/baseResults/web.basic.vert.out
@@ -1,6 +1,6 @@
 ; SPIR-V
 ; Version: 1.0
-; Generator: Khronos Glslang Reference Front End; 7
+; Generator: Khronos Glslang Reference Front End; 8
 ; Bound: 38
 ; Schema: 0
                OpCapability Shader
diff --git a/Test/baseResults/web.builtins.frag.out b/Test/baseResults/web.builtins.frag.out
index 2862dc1..ecf0304 100644
--- a/Test/baseResults/web.builtins.frag.out
+++ b/Test/baseResults/web.builtins.frag.out
@@ -1,6 +1,6 @@
 ; SPIR-V
 ; Version: 1.0
-; Generator: Khronos Glslang Reference Front End; 7
+; Generator: Khronos Glslang Reference Front End; 8
 ; Bound: 69
 ; Schema: 0
                OpCapability Shader
diff --git a/Test/baseResults/web.builtins.vert.out b/Test/baseResults/web.builtins.vert.out
index 9ea6672..597e731 100644
--- a/Test/baseResults/web.builtins.vert.out
+++ b/Test/baseResults/web.builtins.vert.out
@@ -1,6 +1,6 @@
 ; SPIR-V
 ; Version: 1.0
-; Generator: Khronos Glslang Reference Front End; 7
+; Generator: Khronos Glslang Reference Front End; 8
 ; Bound: 33
 ; Schema: 0
                OpCapability Shader
diff --git a/Test/baseResults/web.comp.out b/Test/baseResults/web.comp.out
new file mode 100644
index 0000000..d0a911e
--- /dev/null
+++ b/Test/baseResults/web.comp.out
@@ -0,0 +1,157 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 108
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main" %gl_NumWorkGroups %gl_WorkGroupID %gl_LocalInvocationID %gl_GlobalInvocationID %gl_LocalInvocationIndex
+               OpExecutionMode %main LocalSize 2 5 7
+               OpSource ESSL 310
+               OpName %main "main"
+               OpName %bName "bName"
+               OpMemberName %bName 0 "size"
+               OpMemberName %bName 1 "count"
+               OpMemberName %bName 2 "data"
+               OpName %bInst "bInst"
+               OpName %s "s"
+               OpName %arrX "arrX"
+               OpName %arrY "arrY"
+               OpName %arrZ "arrZ"
+               OpName %gl_NumWorkGroups "gl_NumWorkGroups"
+               OpName %gl_WorkGroupID "gl_WorkGroupID"
+               OpName %gl_LocalInvocationID "gl_LocalInvocationID"
+               OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
+               OpName %gl_LocalInvocationIndex "gl_LocalInvocationIndex"
+               OpDecorate %_runtimearr_v4float ArrayStride 16
+               OpMemberDecorate %bName 0 Offset 0
+               OpMemberDecorate %bName 1 Offset 16
+               OpMemberDecorate %bName 2 Offset 32
+               OpDecorate %bName BufferBlock
+               OpDecorate %bInst DescriptorSet 0
+               OpDecorate %bInst Binding 0
+               OpDecorate %39 SpecId 18
+               OpDecorate %41 SpecId 19
+               OpDecorate %gl_WorkGroupSize BuiltIn WorkgroupSize
+               OpDecorate %gl_NumWorkGroups BuiltIn NumWorkgroups
+               OpDecorate %gl_WorkGroupID BuiltIn WorkgroupId
+               OpDecorate %gl_LocalInvocationID BuiltIn LocalInvocationId
+               OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
+               OpDecorate %gl_LocalInvocationIndex BuiltIn LocalInvocationIndex
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+       %uint = OpTypeInt 32 0
+     %uint_2 = OpConstant %uint 2
+   %uint_264 = OpConstant %uint 264
+        %int = OpTypeInt 32 1
+     %v3uint = OpTypeVector %uint 3
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_runtimearr_v4float = OpTypeRuntimeArray %v4float
+      %bName = OpTypeStruct %int %v3uint %_runtimearr_v4float
+%_ptr_Uniform_bName = OpTypePointer Uniform %bName
+      %bInst = OpVariable %_ptr_Uniform_bName Uniform
+      %int_2 = OpConstant %int 2
+      %int_0 = OpConstant %int 0
+%_ptr_Uniform_int = OpTypePointer Uniform %int
+    %float_7 = OpConstant %float 7
+         %24 = OpConstantComposite %v4float %float_7 %float_7 %float_7 %float_7
+%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
+     %uint_1 = OpConstant %uint 1
+  %uint_3400 = OpConstant %uint 3400
+    %uint_72 = OpConstant %uint 72
+%uint_197645 = OpConstant %uint 197645
+%_arr_v4float_uint_197645 = OpTypeArray %v4float %uint_197645
+%_ptr_Workgroup__arr_v4float_uint_197645 = OpTypePointer Workgroup %_arr_v4float_uint_197645
+          %s = OpVariable %_ptr_Workgroup__arr_v4float_uint_197645 Workgroup
+      %int_3 = OpConstant %int 3
+    %float_0 = OpConstant %float 0
+         %39 = OpSpecConstant %uint 2
+     %uint_5 = OpConstant %uint 5
+         %41 = OpSpecConstant %uint 7
+%gl_WorkGroupSize = OpSpecConstantComposite %v3uint %39 %uint_5 %41
+     %uint_0 = OpConstant %uint 0
+%_arr_int_44 = OpTypeArray %int %44
+%_ptr_Private__arr_int_44 = OpTypePointer Private %_arr_int_44
+       %arrX = OpVariable %_ptr_Private__arr_int_44 Private
+%_ptr_Private_int = OpTypePointer Private %int
+%_arr_int_52 = OpTypeArray %int %52
+%_ptr_Private__arr_int_52 = OpTypePointer Private %_arr_int_52
+       %arrY = OpVariable %_ptr_Private__arr_int_52 Private
+%_arr_int_59 = OpTypeArray %int %59
+%_ptr_Private__arr_int_59 = OpTypePointer Private %_arr_int_59
+       %arrZ = OpVariable %_ptr_Private__arr_int_59 Private
+%_ptr_Workgroup_v4float = OpTypePointer Workgroup %v4float
+      %int_1 = OpConstant %int 1
+%_ptr_Input_v3uint = OpTypePointer Input %v3uint
+%gl_NumWorkGroups = OpVariable %_ptr_Input_v3uint Input
+%gl_WorkGroupID = OpVariable %_ptr_Input_v3uint Input
+%gl_LocalInvocationID = OpVariable %_ptr_Input_v3uint Input
+%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
+%_ptr_Input_uint = OpTypePointer Input %uint
+%gl_LocalInvocationIndex = OpVariable %_ptr_Input_uint Input
+%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
+      %int_5 = OpConstant %int 5
+ %int_197645 = OpConstant %int 197645
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_264
+         %20 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+         %21 = OpLoad %int %20
+         %22 = OpSDiv %int %21 %int_2
+         %26 = OpAccessChain %_ptr_Uniform_v4float %bInst %int_2 %22
+         %27 = OpLoad %v4float %26
+         %28 = OpFMul %v4float %27 %24
+         %29 = OpAccessChain %_ptr_Uniform_v4float %bInst %int_2 %22
+               OpStore %29 %28
+               OpMemoryBarrier %uint_1 %uint_3400
+               OpMemoryBarrier %uint_2 %uint_3400
+               OpMemoryBarrier %uint_1 %uint_264
+               OpMemoryBarrier %uint_1 %uint_72
+         %44 = OpCompositeExtract %uint %gl_WorkGroupSize 0
+         %49 = OpAccessChain %_ptr_Private_int %arrX %int_0
+         %50 = OpLoad %int %49
+         %51 = OpConvertSToF %float %50
+         %52 = OpCompositeExtract %uint %gl_WorkGroupSize 1
+         %56 = OpAccessChain %_ptr_Private_int %arrY %int_0
+         %57 = OpLoad %int %56
+         %58 = OpConvertSToF %float %57
+         %59 = OpCompositeExtract %uint %gl_WorkGroupSize 2
+         %63 = OpAccessChain %_ptr_Private_int %arrZ %int_0
+         %64 = OpLoad %int %63
+         %65 = OpConvertSToF %float %64
+         %66 = OpCompositeConstruct %v4float %float_0 %51 %58 %65
+         %68 = OpAccessChain %_ptr_Workgroup_v4float %s %int_3
+               OpStore %68 %66
+         %72 = OpLoad %v3uint %gl_NumWorkGroups
+         %73 = OpIAdd %v3uint %72 %gl_WorkGroupSize
+         %75 = OpLoad %v3uint %gl_WorkGroupID
+         %76 = OpIAdd %v3uint %73 %75
+         %78 = OpLoad %v3uint %gl_LocalInvocationID
+         %79 = OpIAdd %v3uint %76 %78
+         %81 = OpLoad %v3uint %gl_GlobalInvocationID
+         %84 = OpLoad %uint %gl_LocalInvocationIndex
+         %85 = OpCompositeConstruct %v3uint %84 %84 %84
+         %86 = OpIMul %v3uint %81 %85
+         %87 = OpIAdd %v3uint %79 %86
+         %89 = OpAccessChain %_ptr_Uniform_v3uint %bInst %int_1
+               OpStore %89 %87
+         %90 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+         %91 = OpAtomicIAdd %int %90 %uint_1 %uint_0 %int_2
+         %92 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+         %93 = OpAtomicSMin %int %92 %uint_1 %uint_0 %int_2
+         %94 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+         %95 = OpAtomicSMax %int %94 %uint_1 %uint_0 %int_2
+         %96 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+         %97 = OpAtomicAnd %int %96 %uint_1 %uint_0 %int_2
+         %98 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+         %99 = OpAtomicOr %int %98 %uint_1 %uint_0 %int_2
+        %100 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+        %101 = OpAtomicXor %int %100 %uint_1 %uint_0 %int_2
+        %102 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+        %103 = OpAtomicExchange %int %102 %uint_1 %uint_0 %int_2
+        %104 = OpAccessChain %_ptr_Uniform_int %bInst %int_0
+        %106 = OpAtomicCompareExchange %int %104 %uint_1 %uint_0 %uint_0 %int_2 %int_5
+               OpReturn
+               OpFunctionEnd
diff --git a/Test/baseResults/web.controlFlow.frag.out b/Test/baseResults/web.controlFlow.frag.out
index ebfa5be..5719989 100644
--- a/Test/baseResults/web.controlFlow.frag.out
+++ b/Test/baseResults/web.controlFlow.frag.out
@@ -1,6 +1,6 @@
 ; SPIR-V
 ; Version: 1.0
-; Generator: Khronos Glslang Reference Front End; 7
+; Generator: Khronos Glslang Reference Front End; 8
 ; Bound: 193
 ; Schema: 0
                OpCapability Shader
diff --git a/Test/baseResults/web.operations.frag.out b/Test/baseResults/web.operations.frag.out
index eb01624..d7e4d6e 100644
--- a/Test/baseResults/web.operations.frag.out
+++ b/Test/baseResults/web.operations.frag.out
@@ -1,6 +1,6 @@
 ; SPIR-V
 ; Version: 1.0
-; Generator: Khronos Glslang Reference Front End; 7
+; Generator: Khronos Glslang Reference Front End; 8
 ; Bound: 207
 ; Schema: 0
                OpCapability Shader
diff --git a/Test/baseResults/web.separate.frag.out b/Test/baseResults/web.separate.frag.out
new file mode 100644
index 0000000..5a99298
--- /dev/null
+++ b/Test/baseResults/web.separate.frag.out
@@ -0,0 +1,178 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 8
+; Bound: 99
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %color %i
+               OpExecutionMode %main OriginUpperLeft
+               OpSource ESSL 310
+               OpName %main "main"
+               OpName %color "color"
+               OpName %t2d "t2d"
+               OpName %s "s"
+               OpName %t3d "t3d"
+               OpName %sA "sA"
+               OpName %sShadow "sShadow"
+               OpName %i "i"
+               OpName %tex2D "tex2D"
+               OpName %texCube "texCube"
+               OpName %tex2DArray "tex2DArray"
+               OpName %itex2D "itex2D"
+               OpName %itex3D "itex3D"
+               OpName %itexCube "itexCube"
+               OpName %itex2DArray "itex2DArray"
+               OpName %utex2D "utex2D"
+               OpName %utex3D "utex3D"
+               OpName %utexCube "utexCube"
+               OpName %utex2DArray "utex2DArray"
+               OpName %tex3D "tex3D"
+               OpDecorate %color Location 0
+               OpDecorate %t2d RelaxedPrecision
+               OpDecorate %t2d DescriptorSet 0
+               OpDecorate %t2d Binding 3
+               OpDecorate %14 RelaxedPrecision
+               OpDecorate %s DescriptorSet 0
+               OpDecorate %s Binding 0
+               OpDecorate %23 RelaxedPrecision
+               OpDecorate %t3d DescriptorSet 0
+               OpDecorate %t3d Binding 4
+               OpDecorate %sA DescriptorSet 0
+               OpDecorate %sA Binding 2
+               OpDecorate %48 RelaxedPrecision
+               OpDecorate %51 RelaxedPrecision
+               OpDecorate %sShadow DescriptorSet 0
+               OpDecorate %sShadow Binding 1
+               OpDecorate %i RelaxedPrecision
+               OpDecorate %i Flat
+               OpDecorate %i Location 0
+               OpDecorate %tex2D RelaxedPrecision
+               OpDecorate %tex2D DescriptorSet 0
+               OpDecorate %tex2D Binding 5
+               OpDecorate %texCube RelaxedPrecision
+               OpDecorate %texCube DescriptorSet 0
+               OpDecorate %texCube Binding 6
+               OpDecorate %tex2DArray DescriptorSet 0
+               OpDecorate %tex2DArray Binding 15
+               OpDecorate %itex2D DescriptorSet 0
+               OpDecorate %itex2D Binding 16
+               OpDecorate %itex3D DescriptorSet 0
+               OpDecorate %itex3D Binding 17
+               OpDecorate %itexCube DescriptorSet 0
+               OpDecorate %itexCube Binding 18
+               OpDecorate %itex2DArray DescriptorSet 0
+               OpDecorate %itex2DArray Binding 19
+               OpDecorate %utex2D DescriptorSet 0
+               OpDecorate %utex2D Binding 20
+               OpDecorate %utex3D DescriptorSet 0
+               OpDecorate %utex3D Binding 21
+               OpDecorate %utexCube DescriptorSet 0
+               OpDecorate %utexCube Binding 22
+               OpDecorate %utex2DArray DescriptorSet 0
+               OpDecorate %utex2DArray Binding 23
+               OpDecorate %tex3D DescriptorSet 0
+               OpDecorate %tex3D Binding 36
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+      %color = OpVariable %_ptr_Output_v4float Output
+         %10 = OpTypeImage %float 2D 0 0 0 1 Unknown
+         %11 = OpTypeSampledImage %10
+%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
+        %t2d = OpVariable %_ptr_UniformConstant_11 UniformConstant
+         %15 = OpTypeSampler
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+          %s = OpVariable %_ptr_UniformConstant_15 UniformConstant
+    %v2float = OpTypeVector %float 2
+  %float_0_5 = OpConstant %float 0.5
+         %22 = OpConstantComposite %v2float %float_0_5 %float_0_5
+         %24 = OpTypeImage %float 3D 0 0 0 1 Unknown
+         %25 = OpTypeSampledImage %24
+       %uint = OpTypeInt 32 0
+     %uint_4 = OpConstant %uint 4
+%_arr_25_uint_4 = OpTypeArray %25 %uint_4
+%_ptr_UniformConstant__arr_25_uint_4 = OpTypePointer UniformConstant %_arr_25_uint_4
+        %t3d = OpVariable %_ptr_UniformConstant__arr_25_uint_4 UniformConstant
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_UniformConstant_25 = OpTypePointer UniformConstant %25
+%_arr_15_uint_4 = OpTypeArray %15 %uint_4
+%_ptr_UniformConstant__arr_15_uint_4 = OpTypePointer UniformConstant %_arr_15_uint_4
+         %sA = OpVariable %_ptr_UniformConstant__arr_15_uint_4 UniformConstant
+      %int_2 = OpConstant %int 2
+    %v3float = OpTypeVector %float 3
+         %44 = OpConstantComposite %v3float %float_0_5 %float_0_5 %float_0_5
+    %sShadow = OpVariable %_ptr_UniformConstant_15 UniformConstant
+%_ptr_Input_int = OpTypePointer Input %int
+          %i = OpVariable %_ptr_Input_int Input
+      %tex2D = OpVariable %_ptr_UniformConstant_11 UniformConstant
+         %58 = OpTypeImage %float Cube 0 0 0 1 Unknown
+         %59 = OpTypeSampledImage %58
+%_ptr_UniformConstant_59 = OpTypePointer UniformConstant %59
+    %texCube = OpVariable %_ptr_UniformConstant_59 UniformConstant
+         %62 = OpTypeImage %float 2D 0 1 0 1 Unknown
+         %63 = OpTypeSampledImage %62
+%_ptr_UniformConstant_63 = OpTypePointer UniformConstant %63
+ %tex2DArray = OpVariable %_ptr_UniformConstant_63 UniformConstant
+         %66 = OpTypeImage %int 2D 0 0 0 1 Unknown
+         %67 = OpTypeSampledImage %66
+%_ptr_UniformConstant_67 = OpTypePointer UniformConstant %67
+     %itex2D = OpVariable %_ptr_UniformConstant_67 UniformConstant
+         %70 = OpTypeImage %int 3D 0 0 0 1 Unknown
+         %71 = OpTypeSampledImage %70
+%_ptr_UniformConstant_71 = OpTypePointer UniformConstant %71
+     %itex3D = OpVariable %_ptr_UniformConstant_71 UniformConstant
+         %74 = OpTypeImage %int Cube 0 0 0 1 Unknown
+         %75 = OpTypeSampledImage %74
+%_ptr_UniformConstant_75 = OpTypePointer UniformConstant %75
+   %itexCube = OpVariable %_ptr_UniformConstant_75 UniformConstant
+         %78 = OpTypeImage %int 2D 0 1 0 1 Unknown
+         %79 = OpTypeSampledImage %78
+%_ptr_UniformConstant_79 = OpTypePointer UniformConstant %79
+%itex2DArray = OpVariable %_ptr_UniformConstant_79 UniformConstant
+         %82 = OpTypeImage %uint 2D 0 0 0 1 Unknown
+         %83 = OpTypeSampledImage %82
+%_ptr_UniformConstant_83 = OpTypePointer UniformConstant %83
+     %utex2D = OpVariable %_ptr_UniformConstant_83 UniformConstant
+         %86 = OpTypeImage %uint 3D 0 0 0 1 Unknown
+         %87 = OpTypeSampledImage %86
+%_ptr_UniformConstant_87 = OpTypePointer UniformConstant %87
+     %utex3D = OpVariable %_ptr_UniformConstant_87 UniformConstant
+         %90 = OpTypeImage %uint Cube 0 0 0 1 Unknown
+         %91 = OpTypeSampledImage %90
+%_ptr_UniformConstant_91 = OpTypePointer UniformConstant %91
+   %utexCube = OpVariable %_ptr_UniformConstant_91 UniformConstant
+         %94 = OpTypeImage %uint 2D 0 1 0 1 Unknown
+         %95 = OpTypeSampledImage %94
+%_ptr_UniformConstant_95 = OpTypePointer UniformConstant %95
+%utex2DArray = OpVariable %_ptr_UniformConstant_95 UniformConstant
+      %tex3D = OpVariable %_ptr_UniformConstant_25 UniformConstant
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %14 = OpLoad %11 %t2d
+         %18 = OpLoad %15 %s
+         %19 = OpSampledImage %11 %14 %18
+         %23 = OpImageSampleImplicitLod %v4float %19 %22
+               OpStore %color %23
+         %34 = OpAccessChain %_ptr_UniformConstant_25 %t3d %int_1
+         %35 = OpLoad %25 %34
+         %40 = OpAccessChain %_ptr_UniformConstant_15 %sA %int_2
+         %41 = OpLoad %15 %40
+         %42 = OpSampledImage %25 %35 %41
+         %45 = OpImageSampleImplicitLod %v4float %42 %44
+         %46 = OpLoad %v4float %color
+         %47 = OpFAdd %v4float %46 %45
+               OpStore %color %47
+         %48 = OpLoad %11 %t2d
+         %49 = OpLoad %15 %s
+         %50 = OpSampledImage %11 %48 %49
+         %51 = OpImageSampleImplicitLod %v4float %50 %22
+         %52 = OpLoad %v4float %color
+         %53 = OpFAdd %v4float %52 %51
+               OpStore %color %53
+               OpReturn
+               OpFunctionEnd
diff --git a/Test/baseResults/web.texture.frag.out b/Test/baseResults/web.texture.frag.out
index 6fbebb4..baad564 100644
--- a/Test/baseResults/web.texture.frag.out
+++ b/Test/baseResults/web.texture.frag.out
@@ -1,6 +1,6 @@
 ; SPIR-V
 ; Version: 1.0
-; Generator: Khronos Glslang Reference Front End; 7
+; Generator: Khronos Glslang Reference Front End; 8
 ; Bound: 189
 ; Schema: 0
                OpCapability Shader
diff --git a/Test/constFold.frag b/Test/constFold.frag
index daecaa2..49373e6 100644
--- a/Test/constFold.frag
+++ b/Test/constFold.frag
@@ -122,6 +122,9 @@
 
 const mat2 mm2 = mat2(1.0, 2.0, 3.0, 4.0);

 const mat3x2 mm32 = mat3x2(10.0, 11.0, 12.0, 13.0, 14.0, 15.0);

+const mat2 m22 = mat2(vec4(1.0, 2.0, 3.0, 4.0));

+const mat3x4 mm34 = mat3x4(7.0);

+const vec4 mv4 = vec4(m22);

 

 void foo3()

 {

diff --git a/Test/foo.h b/Test/foo.h
index 7f79340..236277c 100644
--- a/Test/foo.h
+++ b/Test/foo.h
@@ -1 +1 @@
-#error should not be included
\ No newline at end of file
+#error should not be included
diff --git a/Test/glsl.450.subgroup.frag b/Test/glsl.450.subgroup.frag
index 61cfc8f..d0b9573 100644
--- a/Test/glsl.450.subgroup.frag
+++ b/Test/glsl.450.subgroup.frag
@@ -114,12 +114,14 @@
 

 #extension GL_KHR_shader_subgroup_ballot: enable

 void ballot_works(vec4 f4) {

+  int i;

   gl_SubgroupEqMask;

   gl_SubgroupGeMask;

   gl_SubgroupGtMask;

   gl_SubgroupLeMask;

   gl_SubgroupLtMask;

   subgroupBroadcast(f4, 0);

+  subgroupBroadcast(f4, i);

   subgroupBroadcastFirst(f4);

   uvec4 ballot = subgroupBallot(false);

   subgroupInverseBallot(uvec4(0x1));

@@ -192,7 +194,9 @@
 #extension GL_KHR_shader_subgroup_quad: enable

 void quad_works(vec4 f4)

 {

+  int i;

   subgroupQuadBroadcast(f4, 0);

+  subgroupQuadBroadcast(f4, i);

   subgroupQuadSwapHorizontal(f4);

   subgroupQuadSwapVertical(f4);

   subgroupQuadSwapDiagonal(f4);

diff --git a/Test/hlsl.doLoop.frag b/Test/hlsl.doLoop.frag
index 0318dc8..8f4bfdc 100644
--- a/Test/hlsl.doLoop.frag
+++ b/Test/hlsl.doLoop.frag
@@ -1,9 +1,29 @@
+void f0() {
+    [unroll] do {} while (false);
+}
+
+void f1() {
+    [unroll] do {;} while (false);
+}
+
+float f2(float input) {
+    do { return (float4)input; } while (input > 2.0);
+}
+
+void f3(float input) {
+    do ++input; while (input < 10.0);
+}
+
+void f4(float input) {
+    do while (++input < 10.0); while (++input < 10.0); // nest while inside do-while
+}
+
 float4 PixelShaderFunction(float input) : COLOR0
 {
-    [unroll] do {} while (false);
-    [unroll] do {;} while (false);
-    do { return (float4)input; } while (input > 2.0);
-    do ++input; while (input < 10.0);
-    do while (++input < 10.0); while (++input < 10.0); // nest while inside do-while
+    f0();
+    f1();
+    f2(input);
+    f3(input);
+    f4(input);
     return (float4)input;
 }
diff --git a/Test/hlsl.forLoop.frag b/Test/hlsl.forLoop.frag
index 9cf60ee..c0783db 100644
--- a/Test/hlsl.forLoop.frag
+++ b/Test/hlsl.forLoop.frag
@@ -1,17 +1,59 @@
+void f0() {
+    for (;;) ;
+}
+
+void f1(float4 input) {
+    for (++input; ; ) ;
+}
+
+void f2(float4 input) {
+    [unroll] for (; any(input != input); ) {}
+}
+
+float f3(float4 input) {
+    for (; any(input != input); ) { return -input; }
+}
+
+float f4(float4 input) {
+    for (--input; any(input != input); input += 2) { return -input; }
+}
+
+void f5(float4 input) {
+    for (;;) if (input.x > 2.0) break;
+}
+
+void f6(float4 input) {
+    for (;;) if (input.x > 2.0) continue;
+}
+
+void f99() {
+    for (int first = 0, second = 1; ;) first + second;
+}
+
+void f100(float ii) {
+    for (--ii, --ii, --ii;;) ii;
+}
+
 float4 PixelShaderFunction(float4 input) : COLOR0
 {
-    for (;;) ;
-    for (++input; ; ) ;
-    [unroll] for (; any(input != input); ) {}
-    for (; any(input != input); ) { return -input; }
-    for (--input; any(input != input); input += 2) { return -input; }
-    for (;;) if (input.x > 2.0) break;
-    for (;;) if (input.x > 2.0) continue;
+    f0();
+    f1(input);
+    f2(input);
+    f3(input);
+    f4(input);
+    f5(input);
+    f6(input);
+
     float ii;
     for (int ii = -1; ii < 3; ++ii) if (ii == 2) continue;
     --ii;
-    for (int first = 0, second = 1; ;) first + second;
+
+    f99();
+
     for ( int i = 0, count = int(ii); i < count; i++ );
     for (float first = 0, second[2], third; first < second[0]; ++second[1]) first + second[1] + third;
-    for (--ii, --ii, --ii;;) ii;
+
+    f100(ii);
+
+    return input;
 }
diff --git a/Test/hlsl.if.frag b/Test/hlsl.if.frag
index b62eda1..a2e47f6 100644
--- a/Test/hlsl.if.frag
+++ b/Test/hlsl.if.frag
@@ -1,12 +1,24 @@
+float4 f0(float4 input) {
+    if (all(input == input))
+        return input;
+    else
+        return -input;
+}
+
+float4 f1(float4 input) {
+    if (all(input == input)) {
+        return input;
+    } else {
+        return -input;
+    }
+}
+
 float4 PixelShaderFunction(float4 input) : COLOR0
 {
     if (all(input == input))
         return input;
 
-    if (all(input == input))
-        return input;
-    else
-        return -input;
+    f0(input);
 
     if (all(input == input))
         ;
@@ -20,11 +32,7 @@
         return input;
     }
 
-    if (all(input == input)) {
-        return input;
-    } else {
-        return -input;
-    }
+    f1(input);
 
 	int ii;
 	if (float ii = input.z)
diff --git a/Test/hlsl.intrinsics.frag b/Test/hlsl.intrinsics.frag
old mode 100644
new mode 100755
index ffa3c25..280e231
--- a/Test/hlsl.intrinsics.frag
+++ b/Test/hlsl.intrinsics.frag
@@ -53,6 +53,7 @@
     float r031 = floor(inF0);
     // TODO: fma(inD0, inD1, inD2);
     float r033 = fmod(inF0, inF1);
+    float r033i = fmod(inF0, 2);
     float r034 = frac(inF0);
     float r036 = fwidth(inF0);
     bool r037 = isinf(inF0);
diff --git a/Test/hlsl.semantic.geom b/Test/hlsl.semantic.geom
index fc6a53a..9e0ed4c 100644
--- a/Test/hlsl.semantic.geom
+++ b/Test/hlsl.semantic.geom
@@ -14,3 +14,11 @@
     S s;
     OutputStream.Append(s);
 }
+

+[maxvertexcount(4)]

+void notmain(line in uint VertexID[2] : VertexID,

+       inout LineStream<S> OutputStream)

+{

+    S s;

+    OutputStream.Append(s);

+}

diff --git a/Test/hlsl.singleArgIntPromo.vert b/Test/hlsl.singleArgIntPromo.vert
new file mode 100755
index 0000000..5c99a38
--- /dev/null
+++ b/Test/hlsl.singleArgIntPromo.vert
@@ -0,0 +1,16 @@
+float main(): SV_Target0

+{

+    int d = 4;

+    int2 d2 = int2(5,d);

+    float  f1 = log2(5);

+    float2 f2 = log(d2);

+    float3 f3 = log(int3(7,2,3));

+    float2 f22 = log(int2(5,d));  // This case does not work yet, due to a different bug that turns this into 2 args.

+

+    int a = 5;

+    min16float b = min16float(f16tof32(a));

+    b *= b;

+    uint c = f32tof16(b);

+

+    return f1 + f2.x + f3.z + f22.y + c;

+}
\ No newline at end of file
diff --git a/Test/inc2/foo.h b/Test/inc2/foo.h
index fd09e80..ea1e5ba 100644
--- a/Test/inc2/foo.h
+++ b/Test/inc2/foo.h
@@ -1 +1 @@
-float4 i6;
\ No newline at end of file
+float4 i6;
diff --git a/Test/link.multiAnonBlocksInvalid.0.0.vert b/Test/link.multiAnonBlocksInvalid.0.0.vert
new file mode 100755
index 0000000..106dd25
--- /dev/null
+++ b/Test/link.multiAnonBlocksInvalid.0.0.vert
@@ -0,0 +1,52 @@
+#version 430
+
+// Error: Block has different members
+layout (std140) uniform Block
+{
+	mat4 uProj;
+};
+
+// Error: BufferBlock has different members
+buffer BufferBlock
+{
+	vec4 b;
+};
+
+// Error: Vertex has different members
+out Vertex
+{
+	vec4 v1;
+};
+
+// Error: ColorBlock has different members
+layout (std140) uniform ColorBlock
+{
+	vec4 color1;
+	vec4 color2;
+	// Error, redeclare varaible in another anonymous block
+	vec4 v1;
+};
+
+// Error: NamedBlock is anonymous in other compilation unit
+layout (std140) uniform NamedBlock
+{
+	mat4 m;
+} myName;
+
+vec4 getWorld();
+vec4 getColor2();
+
+out vec4 oColor;
+
+// Error: redeclare varaibles that are in anonymous blocks
+out vec4 v1;
+uniform mat4 uProj;
+
+void
+main()
+{
+	oColor = color1 * getColor2();
+	v1 = color1;
+
+	gl_Position = uProj * getWorld();
+}
diff --git a/Test/link.multiAnonBlocksInvalid.0.1.vert b/Test/link.multiAnonBlocksInvalid.0.1.vert
new file mode 100755
index 0000000..8b4c7f8
--- /dev/null
+++ b/Test/link.multiAnonBlocksInvalid.0.1.vert
@@ -0,0 +1,48 @@
+#version 430
+
+// Error: ColorBlock has different members
+layout (std140) uniform ColorBlock
+{
+	vec4 color2;
+};
+
+// Error: Block has different members
+layout (std140) uniform Block
+{
+	mat4 uProj;
+	mat4 uWorld;
+};
+
+// Error: Vertex has different members
+out Vertex
+{
+	vec4 v1;
+	vec4 v2;
+};
+
+// Error BufferBlock has different members
+buffer BufferBlock
+{
+	vec4 a;
+};
+
+// Error: NamedBlock is anonymous in other compilation unit
+layout (std140) uniform NamedBlock
+{
+	mat4 m;
+};
+
+
+in vec4 P;
+
+vec4 getColor2()
+{
+	return color2;
+}
+
+vec4 getWorld()
+{
+	return uWorld * P;
+	v2 = vec4(1);
+}
+
diff --git a/Test/link.multiAnonBlocksValid.0.0.vert b/Test/link.multiAnonBlocksValid.0.0.vert
new file mode 100755
index 0000000..470d815
--- /dev/null
+++ b/Test/link.multiAnonBlocksValid.0.0.vert
@@ -0,0 +1,38 @@
+#version 430
+
+// Verify that matching by block name is working, not
+// instance name, which was at one point failing on this
+// test due to E.g anon@1 being different blocks for
+// different compilation units
+
+layout (std140) uniform Block
+{
+	mat4 uProj;
+	mat4 uWorld;
+};
+
+out Vertex
+{
+	vec4 v1;
+	vec4 v2;
+};
+
+layout (std140) uniform ColorBlock
+{
+	vec4 color1;
+	vec4 color2;
+};
+
+vec4 getWorld();
+vec4 getColor2();
+
+out vec4 oColor;
+
+void
+main()
+{
+	oColor = color1 * getColor2();
+	v1 = color1;
+
+	gl_Position = uProj * getWorld();
+}
diff --git a/Test/link.multiAnonBlocksValid.0.1.vert b/Test/link.multiAnonBlocksValid.0.1.vert
new file mode 100755
index 0000000..e7dccbe
--- /dev/null
+++ b/Test/link.multiAnonBlocksValid.0.1.vert
@@ -0,0 +1,34 @@
+#version 430
+
+layout (std140) uniform ColorBlock
+{
+	vec4 color1;
+	vec4 color2;
+};
+
+layout (std140) uniform Block
+{
+	mat4 uProj;
+	mat4 uWorld;
+};
+
+out Vertex
+{
+	vec4 v1;
+	vec4 v2;
+};
+
+
+in vec4 P;
+
+vec4 getColor2()
+{
+	return color2;
+}
+
+vec4 getWorld()
+{
+	return uWorld * P;
+	v2 = vec4(1);
+}
+
diff --git a/Test/link.multiBlocksInvalid.0.0.vert b/Test/link.multiBlocksInvalid.0.0.vert
new file mode 100755
index 0000000..19bc049
--- /dev/null
+++ b/Test/link.multiBlocksInvalid.0.0.vert
@@ -0,0 +1,40 @@
+#version 430
+
+// Verify that blocks with different instance names
+// are correctly detected as invalid non-matching blocks
+// when they are matched up by block name
+layout (std140) uniform Block
+{
+	mat4 uProj;
+} uD;
+
+out Vertex
+{
+	vec4 v1;
+} oV;
+
+layout (std140) uniform ColorBlock
+{
+	vec4 color1;
+} uC;
+
+// Error, buffer blocks and uniform blocks share the
+// same namespace for their block name
+layout (std430) buffer ColorBlock
+{
+	vec4 color1;
+} uBufC;
+
+vec4 getWorld();
+vec4 getColor2();
+
+out vec4 oColor;
+
+void
+main()
+{
+	oColor = uC.color1 * getColor2();
+	oV.v1 = uC.color1 + uBufC.color1;
+
+	gl_Position = uD.uProj * getWorld();
+}
diff --git a/Test/link.multiBlocksInvalid.0.1.vert b/Test/link.multiBlocksInvalid.0.1.vert
new file mode 100755
index 0000000..8b9ccd1
--- /dev/null
+++ b/Test/link.multiBlocksInvalid.0.1.vert
@@ -0,0 +1,31 @@
+#version 430
+
+layout (std140) uniform ColorBlock
+{
+	vec4 color2;
+} uColorB;
+
+layout (std140) uniform Block
+{
+	mat4 uWorld;
+} uDefaultB;
+
+out Vertex
+{
+	vec4 v2;
+} oVert;
+
+
+in vec4 P;
+
+vec4 getColor2()
+{
+	return uColorB.color2;
+}
+
+vec4 getWorld()
+{
+	return uDefaultB.uWorld * P;
+	oVert.v2 = vec4(1);
+}
+
diff --git a/Test/link.multiBlocksValid.1.0.vert b/Test/link.multiBlocksValid.1.0.vert
new file mode 100755
index 0000000..b21683b
--- /dev/null
+++ b/Test/link.multiBlocksValid.1.0.vert
@@ -0,0 +1,32 @@
+#version 430
+layout (std140) uniform Block
+{
+	mat4 uProj;
+	mat4 uWorld;
+} a;
+
+out Vertex
+{
+	vec4 v1;
+	vec4 v2;
+} b;
+
+layout (std140) uniform ColorBlock
+{
+	vec4 color1;
+	vec4 color2;
+} c;
+
+vec4 getWorld();
+vec4 getColor2();
+
+out vec4 oColor;
+
+void
+main()
+{
+	oColor = c.color1 * getColor2();
+	b.v1 = c.color1;
+
+	gl_Position = a.uProj * getWorld();
+}
diff --git a/Test/link.multiBlocksValid.1.1.vert b/Test/link.multiBlocksValid.1.1.vert
new file mode 100755
index 0000000..d86a0d1
--- /dev/null
+++ b/Test/link.multiBlocksValid.1.1.vert
@@ -0,0 +1,34 @@
+#version 430
+
+layout (std140) uniform ColorBlock
+{
+	vec4 color1;
+	vec4 color2;
+} a;
+
+layout (std140) uniform Block
+{
+	mat4 uProj;
+	mat4 uWorld;
+} b;
+
+out Vertex
+{
+	vec4 v1;
+	vec4 v2;
+} c;
+
+
+in vec4 P;
+
+vec4 getColor2()
+{
+	return a.color2;
+}
+
+vec4 getWorld()
+{
+	return b.uWorld * P;
+	c.v2 = vec4(1);
+}
+
diff --git a/Test/link.vk.differentPC.0.0.frag b/Test/link.vk.differentPC.0.0.frag
new file mode 100755
index 0000000..f5ad4ce
--- /dev/null
+++ b/Test/link.vk.differentPC.0.0.frag
@@ -0,0 +1,18 @@
+#version 450

+

+layout(location=0) out vec4 color;

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+vec4 getColor2();

+float getScale();

+

+void main()

+{

+    color = uPC.color + getColor2() * getScale();

+}

diff --git a/Test/link.vk.differentPC.0.1.frag b/Test/link.vk.differentPC.0.1.frag
new file mode 100755
index 0000000..972fc65
--- /dev/null
+++ b/Test/link.vk.differentPC.0.1.frag
@@ -0,0 +1,14 @@
+#version 450

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+vec4

+getColor2()

+{

+	return uPC.color2;

+}

diff --git a/Test/link.vk.differentPC.0.2.frag b/Test/link.vk.differentPC.0.2.frag
new file mode 100755
index 0000000..287e425
--- /dev/null
+++ b/Test/link.vk.differentPC.0.2.frag
@@ -0,0 +1,15 @@
+#version 450

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale2;

+} uPC;

+

+float

+getScale()

+{

+	return uPC.scale2;

+}

+

diff --git a/Test/link.vk.differentPC.1.0.frag b/Test/link.vk.differentPC.1.0.frag
new file mode 100755
index 0000000..e395bb8
--- /dev/null
+++ b/Test/link.vk.differentPC.1.0.frag
@@ -0,0 +1,16 @@
+#version 450

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+	float scale2;

+} uPC;

+

+float

+getScale()

+{

+	return uPC.scale;

+}

+

diff --git a/Test/link.vk.differentPC.1.1.frag b/Test/link.vk.differentPC.1.1.frag
new file mode 100755
index 0000000..972fc65
--- /dev/null
+++ b/Test/link.vk.differentPC.1.1.frag
@@ -0,0 +1,14 @@
+#version 450

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+vec4

+getColor2()

+{

+	return uPC.color2;

+}

diff --git a/Test/link.vk.differentPC.1.2.frag b/Test/link.vk.differentPC.1.2.frag
new file mode 100755
index 0000000..f5ad4ce
--- /dev/null
+++ b/Test/link.vk.differentPC.1.2.frag
@@ -0,0 +1,18 @@
+#version 450

+

+layout(location=0) out vec4 color;

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+vec4 getColor2();

+float getScale();

+

+void main()

+{

+    color = uPC.color + getColor2() * getScale();

+}

diff --git a/Test/link.vk.matchingPC.0.0.frag b/Test/link.vk.matchingPC.0.0.frag
new file mode 100755
index 0000000..f5ad4ce
--- /dev/null
+++ b/Test/link.vk.matchingPC.0.0.frag
@@ -0,0 +1,18 @@
+#version 450

+

+layout(location=0) out vec4 color;

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+vec4 getColor2();

+float getScale();

+

+void main()

+{

+    color = uPC.color + getColor2() * getScale();

+}

diff --git a/Test/link.vk.matchingPC.0.1.frag b/Test/link.vk.matchingPC.0.1.frag
new file mode 100755
index 0000000..972fc65
--- /dev/null
+++ b/Test/link.vk.matchingPC.0.1.frag
@@ -0,0 +1,14 @@
+#version 450

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+vec4

+getColor2()

+{

+	return uPC.color2;

+}

diff --git a/Test/link.vk.matchingPC.0.2.frag b/Test/link.vk.matchingPC.0.2.frag
new file mode 100755
index 0000000..734358c
--- /dev/null
+++ b/Test/link.vk.matchingPC.0.2.frag
@@ -0,0 +1,14 @@
+#version 450

+

+layout (push_constant) uniform PushConstantBlock

+{

+	vec4 color;

+	vec4 color2;

+	float scale;

+} uPC;

+

+float

+getScale()

+{

+	return uPC.scale;

+}

diff --git a/Test/link.vk.multiBlocksValid.0.0.vert b/Test/link.vk.multiBlocksValid.0.0.vert
new file mode 100755
index 0000000..81747ec
--- /dev/null
+++ b/Test/link.vk.multiBlocksValid.0.0.vert
@@ -0,0 +1,49 @@
+#version 430
+
+// OK: different instance names is allowed in other unit
+layout (std140, binding = 0) uniform MatrixBlock
+{
+	mat4 uProj;
+	mat4 uWorld;
+} uM;
+
+// OK: other unit has it as anonymous, but that is allowed
+out Vertex
+{
+	vec4 v1;
+	vec4 v2;
+} oV;
+
+// OK: different instance names is allowed in other unit
+layout (std140, binding = 1) uniform ColorBlock
+{
+	vec4 color1;
+	bool b;
+	vec4 color2;
+	vec4 color3;
+} uC;
+
+// OK: different instance names is allowed in other unit
+layout (std430, binding = 1) buffer BufferBlock
+{
+	mat4 p;
+} uBuf;
+
+layout (std430, binding = 0) buffer SecondaryColorBlock
+{
+	vec4 c;
+} uColorBuf;
+
+vec4 getWorld();
+vec4 getColor2();
+
+out vec4 oColor;
+
+void
+main()
+{
+	oColor = uC.color1 * getColor2() * uColorBuf.c;
+	oV.v1 = uC.color1;
+
+	gl_Position = uM.uProj * getWorld();
+}
diff --git a/Test/link.vk.multiBlocksValid.0.1.vert b/Test/link.vk.multiBlocksValid.0.1.vert
new file mode 100755
index 0000000..5267778
--- /dev/null
+++ b/Test/link.vk.multiBlocksValid.0.1.vert
@@ -0,0 +1,46 @@
+#version 430
+
+// OK: different instance names is allowed in other unit
+layout (std140, binding = 1) uniform ColorBlock
+{
+	vec4 color1;
+	bool b;
+	vec4 color2;
+	vec4 color3;
+} uColor;
+
+// OK: different instance names is allowed in other unit
+layout (std430, binding = 1) buffer BufferBlock
+{
+	mat4 p;
+} uBuffer;
+
+// OK: different instance names is allowed in other unit
+layout (std140, binding = 0) uniform MatrixBlock
+{
+	mat4 uProj;
+	mat4 uWorld;
+} uMatrix;
+
+// OK, it's allowed for input/output interfaces to
+// be anonymous is one unit and not in another
+out Vertex
+{
+	vec4 v1;
+	vec4 v2;
+};
+
+
+in vec4 P;
+
+vec4 getColor2()
+{
+	return uColor.color2;
+}
+
+vec4 getWorld()
+{
+	v1 = vec4(1);
+	return uMatrix.uWorld * P;
+}
+
diff --git a/Test/link.vk.multiBlocksValid.1.0.geom b/Test/link.vk.multiBlocksValid.1.0.geom
new file mode 100755
index 0000000..9811b08
--- /dev/null
+++ b/Test/link.vk.multiBlocksValid.1.0.geom
@@ -0,0 +1,62 @@
+#version 430
+
+layout (triangles) in;
+layout (triangle_strip, max_vertices = 3) out;
+
+// OK: different instance names is allowed
+layout (std140, binding = 0) uniform MatrixBlock
+{
+	mat4 uProj;
+	mat4 uWorld;
+} uM;
+
+// Verify that in/out blocks with same block name work
+in Vertex
+{
+	vec4 v1;
+	vec4 v2;
+} iV[3];
+
+out Vertex
+{
+	vec4 val1;
+} oV;
+
+// OK: different instance names is allowed
+layout (std140, binding = 1) uniform ColorBlock
+{
+	vec4 color1;
+	bool b;
+	vec4 color2;
+	vec4 color3;
+} uC;
+
+// OK: different instance names is allowed
+layout (std430, binding = 1) buffer BufferBlock
+{
+	mat4 p;
+} uBuf;
+
+vec4 getWorld(int i);
+vec4 getColor2();
+
+out vec4 oColor;
+
+float globalF;
+
+void
+main()
+{
+	oColor = uC.color1 * getColor2();
+
+	globalF = 1.0;
+
+	for (int i = 0; i < 3; i++)
+	{
+		gl_Position = uM.uProj * getWorld(i);
+		oV.val1 = uC.color1 + iV[i].v2 * globalF;
+		EmitVertex();
+	}
+
+	EndPrimitive();
+}
diff --git a/Test/link.vk.multiBlocksValid.1.1.geom b/Test/link.vk.multiBlocksValid.1.1.geom
new file mode 100755
index 0000000..f372343
--- /dev/null
+++ b/Test/link.vk.multiBlocksValid.1.1.geom
@@ -0,0 +1,54 @@
+#version 430
+
+layout (triangles) in;
+layout (triangle_strip, max_vertices = 3) out;
+
+// OK: different instance names is allowed
+layout (std140, binding = 1) uniform ColorBlock
+{
+	vec4 color1;
+	bool b;
+	vec4 color2;
+	vec4 color3;
+} uColor;
+
+// OK: different instance names is allowed
+layout (std430, binding = 1) buffer BufferBlock
+{
+	mat4 p;
+} uBuffer;
+
+// OK: different instance names is allowed
+layout (std140, binding = 0) uniform MatrixBlock
+{
+	mat4 uProj;
+	mat4 uWorld;
+} uMatrix;
+
+// OK, it's allowed for input/output interfaces to
+// be anonymous is one unit and not in another
+out Vertex
+{
+	vec4 val1;
+};
+
+in Vertex
+{
+	vec4 v1;
+	vec4 v2;
+} iVV[];
+
+
+in vec4 P[3];
+
+vec4 getColor2()
+{
+	return uColor.color2;
+}
+
+vec4 getWorld(int i)
+{
+	val1 = vec4(1);
+	return uMatrix.uWorld * iVV[i].v1;
+}
+
diff --git a/Test/link.vk.pcNamingInvalid.0.0.vert b/Test/link.vk.pcNamingInvalid.0.0.vert
new file mode 100755
index 0000000..26a7586
--- /dev/null
+++ b/Test/link.vk.pcNamingInvalid.0.0.vert
@@ -0,0 +1,21 @@
+#version 450
+layout (push_constant) uniform Block
+{
+	mat4 uWorld;
+	mat4 uProj;
+	vec4 color1;
+	vec4 color2;
+} a;
+
+vec4 getWorld();
+vec4 getColor2();
+
+out vec4 oColor;
+
+void
+main()
+{
+	oColor = a.color1 * getColor2();
+
+	gl_Position = a.uProj * getWorld();
+}
diff --git a/Test/link.vk.pcNamingInvalid.0.1.vert b/Test/link.vk.pcNamingInvalid.0.1.vert
new file mode 100755
index 0000000..47d2314
--- /dev/null
+++ b/Test/link.vk.pcNamingInvalid.0.1.vert
@@ -0,0 +1,22 @@
+#version 450
+
+layout (push_constant) uniform Block2
+{
+	mat4 uWorld;
+	mat4 uProj;
+	vec4 color1;
+	vec4 color2;
+} a;
+
+in vec4 P;
+
+vec4 getColor2()
+{
+	return a.color2;
+}
+
+vec4 getWorld()
+{
+	return a.uWorld * P;
+}
+
diff --git a/Test/link.vk.pcNamingValid.0.0.vert b/Test/link.vk.pcNamingValid.0.0.vert
new file mode 100755
index 0000000..7df2190
--- /dev/null
+++ b/Test/link.vk.pcNamingValid.0.0.vert
@@ -0,0 +1,21 @@
+#version 450
+layout (push_constant) uniform PCBlock
+{
+	mat4 uWorld;
+	mat4 uProj;
+	vec4 color1;
+	vec4 color2;
+} a;
+
+vec4 getWorld();
+vec4 getColor2();
+
+layout(location = 0) out vec4 oColor;
+
+void
+main()
+{
+	oColor = a.color1 * getColor2();
+
+	gl_Position = a.uProj * getWorld();
+}
diff --git a/Test/link.vk.pcNamingValid.0.1.vert b/Test/link.vk.pcNamingValid.0.1.vert
new file mode 100755
index 0000000..9a4b41b
--- /dev/null
+++ b/Test/link.vk.pcNamingValid.0.1.vert
@@ -0,0 +1,22 @@
+#version 450
+
+layout (push_constant) uniform PCBlock
+{
+	mat4 uWorld;
+	mat4 uProj;
+	vec4 color1;
+	vec4 color2;
+} b;
+
+layout(location = 0) in vec4 P;
+
+vec4 getColor2()
+{
+	return b.color2;
+}
+
+vec4 getWorld()
+{
+	return b.uWorld * P;
+}
+
diff --git a/Test/rayQuery-allOps.Error.rgen b/Test/rayQuery-allOps.Error.rgen
new file mode 100644
index 0000000..d25a183
--- /dev/null
+++ b/Test/rayQuery-allOps.Error.rgen
@@ -0,0 +1,212 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(std430, set = 0, binding = 0) buffer Log
+{
+    uint x;
+    uint y;
+};
+
+layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+void doSomething()
+{
+    x = 0;
+    y = 0;
+}
+
+Ray makeRayDesc()
+{
+    Ray ray;
+    ray.pos= vec3(0,0,0);
+    ray.dir = vec3(1,0,0);
+    ray.tmin = 0.0f;
+    ray.tmax = 9999.0;
+    return ray;
+}
+
+void main()
+{
+    Ray ray = makeRayDesc();
+    rayQueryEXT rayQuery;
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, 0xFF, ray.pos, ray.tmin, ray.dir, ray.tmax);
+
+    mat4x3 _mat4x3;
+    mat3x4 _mat3x4;
+
+    while (rayQueryProceedEXT(rayQuery) == 1)
+    {
+        int candidateType = rayQueryGetIntersectionTypeEXT(rayQuery, false);
+        switch(candidateType)
+        {
+            case gl_RayQueryCandidateIntersectionTriangleEXT:
+
+                rayQueryTerminateEXT(rayQuery);
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                rayQueryConfirmIntersectionEXT(rayQuery);
+
+                if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true) == 1)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true) == 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceIdEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionTEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+                break;
+
+            case gl_RayQueryCandidateIntersectionAABBEXT:
+            {
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                if (rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQuery))
+                {
+                    doSomething();
+                }
+
+                int t = 1;
+                rayQueryGenerateIntersectionEXT(rayQuery, t);
+                rayQueryTerminateEXT(rayQuery);
+                break;
+            }
+        }
+    }
+
+    if(_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    int committedStatus = rayQueryGetIntersectionTypeEXT(rayQuery, true);
+
+    switch(committedStatus)
+    {
+        case gl_RayQueryCommittedIntersectionNoneEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, false);
+            _mat3x4 = transpose(_mat4x3);
+            break;
+
+        case gl_RayQueryCommittedIntersectionTriangleEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, true);
+            _mat3x4 = transpose(_mat4x3);
+
+            if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true) == 0)
+            {
+                doSomething();
+            }
+            break;
+
+        case gl_RayQueryCommittedIntersectionGeneratedEXT :
+
+            if(rayQueryGetIntersectionGeometryIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceIdEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionTEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+            break;
+    }
+
+    if (_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayFlagsEXT(rayQuery))
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayTMinEXT(rayQuery))
+    {
+        doSomething();
+    }
+
+    vec3 o = rayQueryGetWorldRayOriginEXT(rayQuery);
+    vec3 d = rayQueryGetWorldRayDirectionEXT(rayQuery);
+
+    if (o.x == d.z)
+    {
+        doSomething();
+    }
+}
diff --git a/Test/rayQuery-allOps.comp b/Test/rayQuery-allOps.comp
new file mode 100644
index 0000000..80f2593
--- /dev/null
+++ b/Test/rayQuery-allOps.comp
@@ -0,0 +1,212 @@
+#version 460
+#extension GL_EXT_ray_query : enable
+#extension GL_EXT_ray_flags_primitive_culling : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(std430, set = 0, binding = 0) buffer Log
+{
+    uint x;
+    uint y;
+};
+
+layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+void doSomething()
+{
+    x = 0;
+    y = 0;
+}
+
+Ray makeRayDesc()
+{
+    Ray ray;
+    ray.pos= vec3(0,0,0);
+    ray.dir = vec3(1,0,0);
+    ray.tmin = 0.0f;
+    ray.tmax = 9999.0;
+    return ray;
+}
+
+void main()
+{
+    Ray ray = makeRayDesc();
+    rayQueryEXT rayQuery;
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, 0xFF, ray.pos, ray.tmin, ray.dir, ray.tmax);
+
+    mat4x3 _mat4x3;
+    mat3x4 _mat3x4;
+
+    while (rayQueryProceedEXT(rayQuery))
+    {
+        uint candidateType = rayQueryGetIntersectionTypeEXT(rayQuery, false);
+        switch(candidateType)
+        {
+            case gl_RayQueryCandidateIntersectionTriangleEXT:
+
+                rayQueryTerminateEXT(rayQuery);
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                rayQueryConfirmIntersectionEXT(rayQuery);
+
+                if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).x == 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).x > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+                break;
+
+            case gl_RayQueryCandidateIntersectionAABBEXT:
+            {
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                if (rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQuery))
+                {
+                    doSomething();
+                }
+
+                float t = 0.5;
+                rayQueryGenerateIntersectionEXT(rayQuery, t);
+                rayQueryTerminateEXT(rayQuery);
+                break;
+            }
+        }
+    }
+
+    if(_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    uint committedStatus = rayQueryGetIntersectionTypeEXT(rayQuery, true);
+
+    switch(committedStatus)
+    {
+        case gl_RayQueryCommittedIntersectionNoneEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, false);
+            _mat3x4 = transpose(_mat4x3);
+            break;
+
+        case gl_RayQueryCommittedIntersectionTriangleEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, true);
+            _mat3x4 = transpose(_mat4x3);
+
+            if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).y == 0)
+            {
+                doSomething();
+            }
+            break;
+
+        case gl_RayQueryCommittedIntersectionGeneratedEXT :
+
+            if(rayQueryGetIntersectionGeometryIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).z > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
+            {
+                doSomething();
+            }
+            break;
+    }
+
+    if (_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayFlagsEXT(rayQuery) > gl_RayFlagsSkipTrianglesEXT)
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayTMinEXT(rayQuery) > 0.0)
+    {
+        doSomething();
+    }
+
+    vec3 o = rayQueryGetWorldRayOriginEXT(rayQuery);
+    vec3 d = rayQueryGetWorldRayDirectionEXT(rayQuery);
+
+    if (o.x == d.z)
+    {
+        doSomething();
+    }
+}
diff --git a/Test/rayQuery-allOps.frag b/Test/rayQuery-allOps.frag
new file mode 100644
index 0000000..9fdf0c0
--- /dev/null
+++ b/Test/rayQuery-allOps.frag
@@ -0,0 +1,212 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(std430, set = 0, binding = 0) buffer Log
+{
+    uint x;
+    uint y;
+};
+
+layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+void doSomething()
+{
+    x = 0;
+    y = 0;
+}
+
+Ray makeRayDesc()
+{
+    Ray ray;
+    ray.pos= vec3(0,0,0);
+    ray.dir = vec3(1,0,0);
+    ray.tmin = 0.0f;
+    ray.tmax = 9999.0;
+    return ray;
+}
+
+void main()
+{
+    Ray ray = makeRayDesc();
+    rayQueryEXT rayQuery;
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, 0xFF, ray.pos, ray.tmin, ray.dir, ray.tmax);
+
+    mat4x3 _mat4x3;
+    mat3x4 _mat3x4;
+
+    while (rayQueryProceedEXT(rayQuery))
+    {
+        uint candidateType = rayQueryGetIntersectionTypeEXT(rayQuery, false);
+        switch(candidateType)
+        {
+            case gl_RayQueryCandidateIntersectionTriangleEXT:
+
+                rayQueryTerminateEXT(rayQuery);
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                rayQueryConfirmIntersectionEXT(rayQuery);
+
+                if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).x == 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).x > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+                break;
+
+            case gl_RayQueryCandidateIntersectionAABBEXT:
+            {
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                if (rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQuery))
+                {
+                    doSomething();
+                }
+
+                float t = 0.5;
+                rayQueryGenerateIntersectionEXT(rayQuery, t);
+                rayQueryTerminateEXT(rayQuery);
+                break;
+            }
+        }
+    }
+
+    if(_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    uint committedStatus = rayQueryGetIntersectionTypeEXT(rayQuery, true);
+
+    switch(committedStatus)
+    {
+        case gl_RayQueryCommittedIntersectionNoneEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, false);
+            _mat3x4 = transpose(_mat4x3);
+            break;
+
+        case gl_RayQueryCommittedIntersectionTriangleEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, true);
+            _mat3x4 = transpose(_mat4x3);
+
+            if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).y == 0)
+            {
+                doSomething();
+            }
+            break;
+
+        case gl_RayQueryCommittedIntersectionGeneratedEXT :
+
+            if(rayQueryGetIntersectionGeometryIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).z > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
+            {
+                doSomething();
+            }
+            break;
+    }
+
+    if (_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayFlagsEXT(rayQuery) > 0)
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayTMinEXT(rayQuery) > 0.0)
+    {
+        doSomething();
+    }
+
+    vec3 o = rayQueryGetWorldRayOriginEXT(rayQuery);
+    vec3 d = rayQueryGetWorldRayDirectionEXT(rayQuery);
+
+    if (o.x == d.z)
+    {
+        doSomething();
+    }
+}
diff --git a/Test/rayQuery-allOps.rgen b/Test/rayQuery-allOps.rgen
new file mode 100644
index 0000000..9fdf0c0
--- /dev/null
+++ b/Test/rayQuery-allOps.rgen
@@ -0,0 +1,212 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(std430, set = 0, binding = 0) buffer Log
+{
+    uint x;
+    uint y;
+};
+
+layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+void doSomething()
+{
+    x = 0;
+    y = 0;
+}
+
+Ray makeRayDesc()
+{
+    Ray ray;
+    ray.pos= vec3(0,0,0);
+    ray.dir = vec3(1,0,0);
+    ray.tmin = 0.0f;
+    ray.tmax = 9999.0;
+    return ray;
+}
+
+void main()
+{
+    Ray ray = makeRayDesc();
+    rayQueryEXT rayQuery;
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, 0xFF, ray.pos, ray.tmin, ray.dir, ray.tmax);
+
+    mat4x3 _mat4x3;
+    mat3x4 _mat3x4;
+
+    while (rayQueryProceedEXT(rayQuery))
+    {
+        uint candidateType = rayQueryGetIntersectionTypeEXT(rayQuery, false);
+        switch(candidateType)
+        {
+            case gl_RayQueryCandidateIntersectionTriangleEXT:
+
+                rayQueryTerminateEXT(rayQuery);
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                rayQueryConfirmIntersectionEXT(rayQuery);
+
+                if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).x == 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).x > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
+                {
+                    doSomething();
+                }
+
+                if (rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, true) > 0)
+                {
+                    doSomething();
+                }
+                break;
+
+            case gl_RayQueryCandidateIntersectionAABBEXT:
+            {
+                _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
+                _mat3x4 = transpose(_mat4x3);
+                if (rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQuery))
+                {
+                    doSomething();
+                }
+
+                float t = 0.5;
+                rayQueryGenerateIntersectionEXT(rayQuery, t);
+                rayQueryTerminateEXT(rayQuery);
+                break;
+            }
+        }
+    }
+
+    if(_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    uint committedStatus = rayQueryGetIntersectionTypeEXT(rayQuery, true);
+
+    switch(committedStatus)
+    {
+        case gl_RayQueryCommittedIntersectionNoneEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, false);
+            _mat3x4 = transpose(_mat4x3);
+            break;
+
+        case gl_RayQueryCommittedIntersectionTriangleEXT :
+            _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, true);
+            _mat3x4 = transpose(_mat4x3);
+
+            if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
+            {
+                doSomething();
+            }
+
+            if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).y == 0)
+            {
+                doSomething();
+            }
+            break;
+
+        case gl_RayQueryCommittedIntersectionGeneratedEXT :
+
+            if(rayQueryGetIntersectionGeometryIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).z > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
+            {
+                doSomething();
+            }
+
+            if(rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
+            {
+                doSomething();
+            }
+            break;
+    }
+
+    if (_mat3x4[0][0] == _mat4x3[0][0])
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayFlagsEXT(rayQuery) > 0)
+    {
+        doSomething();
+    }
+
+    if (rayQueryGetRayTMinEXT(rayQuery) > 0.0)
+    {
+        doSomething();
+    }
+
+    vec3 o = rayQueryGetWorldRayOriginEXT(rayQuery);
+    vec3 d = rayQueryGetWorldRayDirectionEXT(rayQuery);
+
+    if (o.x == d.z)
+    {
+        doSomething();
+    }
+}
diff --git a/Test/rayQuery-committed.Error.rgen b/Test/rayQuery-committed.Error.rgen
new file mode 100644
index 0000000..aeb8ec0
--- /dev/null
+++ b/Test/rayQuery-committed.Error.rgen
@@ -0,0 +1,105 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(std430, set = 0, binding = 0) buffer Log
+{
+    uint x;
+    uint y;
+};
+
+layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+void doSomething()
+{
+    x = 0;
+    y = 0;
+}
+
+uint launchIndex()
+{
+    return gl_LaunchIDNV.z*gl_LaunchSizeNV.x*gl_LaunchSizeNV.y + gl_LaunchIDNV.y*gl_LaunchSizeNV.x + gl_LaunchIDNV.x;
+}
+
+void main()
+{
+    uint index = launchIndex();
+    Ray ray = rays[index];
+    rayQueryEXT rayQuery;
+
+    bool committed_true = true;
+    bool committed_false = false;
+
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsOpaqueEXT, gl_RayFlagsCullBackFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
+    while (rayQueryProceedEXT(rayQuery))
+    {
+        mat4x3 mat_o2w;
+        mat4x3 mat_w2o;
+
+        uint candidateType = rayQueryGetIntersectionTypeEXT(rayQuery, committed_false);
+        if (candidateType == gl_RayQueryCandidateIntersectionTriangleEXT)
+        {
+            rayQueryTerminateEXT(rayQuery);
+
+            mat_o2w = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, committed_false);
+            mat_w2o = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, committed_false);
+
+            rayQueryConfirmIntersectionEXT(rayQuery);
+
+            if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, committed_true))
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, committed_true).x == 0)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, committed_true) > 0)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionInstanceIdEXT(rayQuery, committed_true) > 0)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, committed_true).x > 0)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, committed_true).x > 0)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, committed_true) > 0)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionTEXT(rayQuery, committed_true) > 0.f)
+            {
+                doSomething();
+            }
+            if (rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, committed_true) > 0)
+            {
+                doSomething();
+            }
+        }
+    }
+
+    uint committedStatus = rayQueryGetIntersectionTypeEXT(rayQuery, committed_true);
+    if (committedStatus == gl_RayQueryCommittedIntersectionGeneratedEXT)
+    {
+        if (rayQueryGetIntersectionGeometryIndexEXT(rayQuery, committed_true) > 0)
+        {
+            doSomething();
+        }
+    }
+}
diff --git a/Test/rayQuery-initialize.rgen b/Test/rayQuery-initialize.rgen
new file mode 100644
index 0000000..ff61800
--- /dev/null
+++ b/Test/rayQuery-initialize.rgen
@@ -0,0 +1,33 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(binding = 0, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+uint launchIndex()
+{
+    return gl_LaunchIDNV.z*gl_LaunchSizeNV.x*gl_LaunchSizeNV.y + gl_LaunchIDNV.y*gl_LaunchSizeNV.x + gl_LaunchIDNV.x;
+}
+
+void doInitialize(rayQueryEXT rayQuery, Ray ray)
+{
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, gl_RayFlagsCullBackFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
+}
+
+void main()
+{
+    uint index = launchIndex();
+    Ray ray = rays[index];
+    rayQueryEXT rayQuery;
+    doInitialize(rayQuery, ray);
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsOpaqueEXT, gl_RayFlagsCullFrontFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
+}
diff --git a/Test/rayQuery-no-cse.rgen b/Test/rayQuery-no-cse.rgen
new file mode 100644
index 0000000..ccec76f
--- /dev/null
+++ b/Test/rayQuery-no-cse.rgen
@@ -0,0 +1,35 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+
+struct Ray
+{
+    vec3 pos;
+    float tmin;
+    vec3 dir;
+    float tmax;
+};
+
+layout(binding = 0, set = 0) uniform accelerationStructureEXT rtas;
+layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
+
+uint launchIndex()
+{
+    return gl_LaunchIDNV.z*gl_LaunchSizeNV.x*gl_LaunchSizeNV.y + gl_LaunchIDNV.y*gl_LaunchSizeNV.x + gl_LaunchIDNV.x;
+}
+
+void doInitialize(rayQueryEXT rayQuery, Ray ray)
+{
+    rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, gl_RayFlagsCullBackFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
+}
+
+void main()
+{
+    uint index = launchIndex();
+    Ray ray = rays[index];
+    rayQueryEXT rayQuery1;
+    rayQueryEXT rayQuery2;
+    doInitialize(rayQuery1, ray);
+    rayQueryInitializeEXT(rayQuery1, rtas, gl_RayFlagsOpaqueEXT, gl_RayFlagsCullFrontFacingTrianglesEXT, ray.pos, ray.tmin, ray.dir, ray.tmax);
+    doInitialize(rayQuery2, ray);
+}
diff --git a/Test/rayQuery.rgen b/Test/rayQuery.rgen
new file mode 100644
index 0000000..8d5638f
--- /dev/null
+++ b/Test/rayQuery.rgen
@@ -0,0 +1,23 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+layout(binding = 0, set = 0) uniform accelerationStructureEXT acc0;
+
+layout(shaderRecordNV) buffer block
+{
+	vec3 dir;
+	vec3 origin;
+};
+
+void main()
+{
+    rayQueryEXT localRayQuery;
+    uint rayFlags = gl_RayFlagsOpaqueEXT | gl_RayFlagsSkipClosestHitShaderEXT;
+    float tMin = 0.f;
+    float tMax = 1000.f;
+    rayQueryInitializeEXT(localRayQuery, acc0, rayFlags, 0xFF , origin, tMin, dir, tMax);
+    if (!rayQueryProceedEXT(localRayQuery))
+    {
+        rayQueryTerminateEXT(localRayQuery);
+    }
+}
diff --git a/Test/runtests b/Test/runtests
index 8e31c06..1a7c7c9 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -1,11 +1,16 @@
 #!/usr/bin/env bash
 
-TARGETDIR=localResults
+# Arguments:
+#  1- TargetDirectory, where to write test results and intermediary files
+#  2- Path to glslangValidator
+#  3- Path to spirv-remap
+
+TARGETDIR=${1:-localResults}
 BASEDIR=baseResults
-EXE=../build/install/bin/glslangValidator
-REMAPEXE=../build/install/bin/spirv-remap
+EXE=${2:-../build/install/bin/glslangValidator}
+REMAPEXE=${3:-../build/install/bin/spirv-remap}
 HASERROR=0
-mkdir -p localResults
+mkdir -p $TARGETDIR
 
 if [ -a localtestlist ]
   then
@@ -55,13 +60,13 @@
 # multi-threaded test
 #
 echo Comparing single thread to multithread for all tests in current directory...
-$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp > singleThread.out
-$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp -t > multiThread.out
-diff singleThread.out multiThread.out || HASERROR=1
+$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp > $TARGETDIR/singleThread.out
+$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp -t > $TARGETDIR/multiThread.out
+diff $TARGETDIR/singleThread.out $TARGETDIR/multiThread.out || HASERROR=1
 if [ $HASERROR -eq 0 ]
 then
-    rm singleThread.out
-    rm multiThread.out
+    rm $TARGETDIR/singleThread.out
+    rm $TARGETDIR/multiThread.out
 fi
 
 #
@@ -171,9 +176,9 @@
 # Testing -D and -U
 #
 echo "Testing -D and -U"
-$EXE -DUNDEFED -UIN_SHADER -DFOO=200 -i -l -UUNDEFED -DMUL=FOO*2 glsl.-D-U.frag > $TARGETDIR/glsl.-D-U.frag.out
+$EXE -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
-$EXE -D -Od -e main -V -i -DUNDEFED -UIN_SHADER -DFOO=200 -UUNDEFED -Od hlsl.-D-U.frag > $TARGETDIR/hlsl.-D-U.frag.out
+$EXE -D -Od -e main -V -i -DUNDEFED -UIN_SHADER --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
 
 #
@@ -184,6 +189,7 @@
 $EXE --client opengl100       spv.targetOpenGL.vert || HASERROR=1
 $EXE --target-env vulkan1.0   spv.targetVulkan.vert || HASERROR=1
 $EXE --target-env vulkan1.1   spv.targetVulkan.vert || HASERROR=1
+$EXE --target-env vulkan1.2   spv.targetVulkan.vert || HASERROR=1
 $EXE --target-env opengl      spv.targetOpenGL.vert || HASERROR=1
 $EXE -V100                    spv.targetVulkan.vert || HASERROR=1
 $EXE -G100                    spv.targetOpenGL.vert || HASERROR=1
diff --git a/Test/spv.8bit-16bit-construction.frag b/Test/spv.8bit-16bit-construction.frag
new file mode 100644
index 0000000..573fa54
--- /dev/null
+++ b/Test/spv.8bit-16bit-construction.frag
@@ -0,0 +1,22 @@
+#version 450 core
+
+#extension GL_EXT_shader_8bit_storage : enable
+#extension GL_EXT_shader_16bit_storage : enable
+
+buffer B
+{
+    int8_t i8_from_i16;
+    int16_t i16_from_i8;
+    uint8_t u8_from_u16;
+    uint16_t u16_from_u8;
+    float16_t f16_from_i8;
+};
+
+void main()
+{
+    i8_from_i16 = int8_t(int16_t(1));
+    i16_from_i8 = int16_t(int8_t(1));
+    u8_from_u16 = uint8_t(uint16_t(1));
+    u16_from_u8 = uint16_t(uint8_t(1));
+    f16_from_i8 = float16_t(int8_t(1));
+}
diff --git a/Test/spv.Operations.frag b/Test/spv.Operations.frag
index 52f0a30..3477a79 100644
--- a/Test/spv.Operations.frag
+++ b/Test/spv.Operations.frag
@@ -55,9 +55,10 @@
     v += ceil(v);

     v += fract(v);

     v += mod(v, v);

-	v += mod(v, v.x);

+    v += mod(v, v.x);

 

     v += modf(v, v);

+    v += modf(v, v.yzxw);

 

     v += min(v, uv4);

     v += max(v, uv4);

@@ -96,6 +97,13 @@
     u += max(u, uui);

     u += clamp(u, uui, uui);

 

+    // multiple out operands

+    uvec4 msb;

+    uvec4 lsb;

+    umulExtended(uuv4.xyz, uuv4.xyz, msb.xyz, lsb.xyz);

+    u += msb.x + msb.y + msb.z;

+    u += lsb.x + lsb.y + lsb.z;

+

 	//// bool

 	b = isnan(uf);

     b = isinf(f);

diff --git a/Test/spv.atomicCounter.comp b/Test/spv.atomicCounter.comp
new file mode 100644
index 0000000..ecb2304
--- /dev/null
+++ b/Test/spv.atomicCounter.comp
@@ -0,0 +1,26 @@
+#version 450

+

+

+

+layout(binding = 0) uniform atomic_uint counter;

+

+layout(binding = 0, offset = 4) uniform atomic_uint countArr[4];

+shared uint value;

+

+int arrX[gl_WorkGroupSize.x];

+int arrY[gl_WorkGroupSize.y];

+int arrZ[gl_WorkGroupSize.z];

+

+uint func(atomic_uint c)

+{

+    return atomicCounterIncrement(c);

+}

+

+void main()

+{

+    memoryBarrierAtomicCounter();

+    func(counter);

+    uint val = atomicCounter(countArr[2]);

+    atomicCounterDecrement(counter);

+    atomicCounterIncrement(counter);

+}

diff --git a/Test/spv.bufferhandle_Error.frag b/Test/spv.bufferhandle_Error.frag
index 98cbac8..034e054 100644
--- a/Test/spv.bufferhandle_Error.frag
+++ b/Test/spv.bufferhandle_Error.frag
@@ -29,6 +29,7 @@
     bufType6 b;

     b.x.length();

     b4.b6.x.length();

+    b[2];               // ERROR, can't index due to unsized array

 }

 

 void main() {

diff --git a/Test/spv.controlFlowAttributes.frag b/Test/spv.controlFlowAttributes.frag
index 6d90c0d..cedd602 100644
--- a/Test/spv.controlFlowAttributes.frag
+++ b/Test/spv.controlFlowAttributes.frag
@@ -4,11 +4,18 @@
 
 bool cond;
 
+void f0() {
+        [[loop]]                   for (;;) { }
+}
+
+void f1() {
+        [[dont_unroll]]            while(true) {  }
+}
+
 void main()
 {
         [[unroll]]                 for (int i = 0; i < 8; ++i) { }
-        [[loop]]                   for (;;) { }
-        [[dont_unroll]]            while(true) {  }
+	f0();
         [[dependency_infinite]]    do {  } while(true);
         [[dependency_length(1+3)]] for (int i = 0; i < 8; ++i) { }
         [[flatten]]                if (cond) { } else { }
diff --git a/Test/spv.dead-after-continue.vert b/Test/spv.dead-after-continue.vert
new file mode 100644
index 0000000..86e8eea
--- /dev/null
+++ b/Test/spv.dead-after-continue.vert
@@ -0,0 +1,14 @@
+#version 450
+
+layout(location =0 ) in int c;
+layout(location =0 ) out int o;
+
+void main() {
+  int i;
+  for (i=0; i < 5; i++) {
+    o = 1;
+    continue;
+    o = 2;
+  }
+  o = 3;
+}
diff --git a/Test/spv.dead-after-discard.frag b/Test/spv.dead-after-discard.frag
new file mode 100644
index 0000000..769592b
--- /dev/null
+++ b/Test/spv.dead-after-discard.frag
@@ -0,0 +1,10 @@
+#version 450
+
+layout(location =0 ) in float c;
+layout(location =0 ) out int o;
+
+void main() {
+  o = 1;
+  discard;
+  o = 3;
+}
diff --git a/Test/spv.dead-after-loop-break.vert b/Test/spv.dead-after-loop-break.vert
new file mode 100644
index 0000000..5498497
--- /dev/null
+++ b/Test/spv.dead-after-loop-break.vert
@@ -0,0 +1,19 @@
+#version 450
+
+layout(location =0 ) in int c;
+layout(location =0 ) out int o;
+
+void main() {
+  int i;
+  o = 1;
+  for (i=0; i < 5; i++) {
+    o = 2;
+    if (i==c) {
+      o = 3;
+      break;
+      o = 4;
+    }
+    o = 5;
+  }
+  o = 6;
+}
diff --git a/Test/spv.dead-after-return.vert b/Test/spv.dead-after-return.vert
new file mode 100644
index 0000000..7172696
--- /dev/null
+++ b/Test/spv.dead-after-return.vert
@@ -0,0 +1,10 @@
+#version 450
+
+layout(location =0 ) in int c;
+layout(location =0 ) out int o;
+
+void main() {
+  o = 1;
+  return;
+  o = 3;
+}
diff --git a/Test/spv.dead-after-switch-break.vert b/Test/spv.dead-after-switch-break.vert
new file mode 100644
index 0000000..b1483e8
--- /dev/null
+++ b/Test/spv.dead-after-switch-break.vert
@@ -0,0 +1,15 @@
+#version 450
+
+layout(location =0 ) in int c;
+layout(location =0 ) out int o;
+
+void main() {
+  int i;
+  switch(c) {
+    case 0: o=1;
+      break;
+      o=2;
+   default: break;
+  }
+  o = 3;
+}
diff --git a/Test/spv.dead-complex-continue-after-return.vert b/Test/spv.dead-complex-continue-after-return.vert
new file mode 100644
index 0000000..85932a3
--- /dev/null
+++ b/Test/spv.dead-complex-continue-after-return.vert
@@ -0,0 +1,19 @@
+#version 450
+
+layout(location =0 ) in int c;
+layout(location =0 ) out int o;
+
+void main() {
+  int i = 0;
+  o = 1;
+  // This has non-trivial continue target.
+  for (i=0; i < 5; ++i, o=99) {
+    o = 2;
+    return;
+    o = 3;
+  }
+  // This is considered reachable since Glslang codegen will
+  // create a conditional branch in the header, and one arm
+  // of that branch reaches this merge block.
+  o = 4;
+}
diff --git a/Test/spv.dead-complex-merge-after-return.vert b/Test/spv.dead-complex-merge-after-return.vert
new file mode 100644
index 0000000..2fff1a2
--- /dev/null
+++ b/Test/spv.dead-complex-merge-after-return.vert
@@ -0,0 +1,23 @@
+#version 450
+
+layout(location =0 ) in int c;
+layout(location =0 ) out int o;
+
+void main() {
+  int i = 0;
+  o = 1;
+  do {
+    o = 2;
+    return;
+    o = 3;
+  } while(i++ < 5);
+
+  // All this is a dead merge block.
+  o = 4;
+  if (c==4) {
+     o = 100;
+  } else {
+     o = 200;
+  }
+  o = 300;
+}
diff --git a/Test/spv.debugPrintf.frag b/Test/spv.debugPrintf.frag
new file mode 100644
index 0000000..3dff629
--- /dev/null
+++ b/Test/spv.debugPrintf.frag
@@ -0,0 +1,13 @@
+#version 450

+#extension GL_EXT_debug_printf : enable

+

+void main()

+{

+    debugPrintfEXT("ASDF \\ \? \x5C %d %d %d", 1, 2, 3);

+

+    // ABA{backspace}Z

+    debugPrintfEXT("\x41\x000042\x41\x8Z");

+

+    // B#${bell, aka \a}B1Z

+    debugPrintfEXT("\102\043\44\7\1021Z");

+}

diff --git a/Test/spv.debugPrintf_Error.frag b/Test/spv.debugPrintf_Error.frag
new file mode 100644
index 0000000..c1980a7
--- /dev/null
+++ b/Test/spv.debugPrintf_Error.frag
@@ -0,0 +1,11 @@
+#version 450

+#extension GL_EXT_debug_printf : enable

+

+void main()

+{

+    // invalid hex sequence

+    debugPrintfEXT("\xZ");

+

+    // not an octal sequence

+    debugPrintfEXT("\8");

+}

diff --git a/Test/spv.ext.AnyHitShader.rahit b/Test/spv.ext.AnyHitShader.rahit
new file mode 100644
index 0000000..ee7d9c7
--- /dev/null
+++ b/Test/spv.ext.AnyHitShader.rahit
@@ -0,0 +1,29 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+layout(location = 1) rayPayloadInEXT vec4 incomingPayload;
+void main()
+{
+	uvec3 v0 = gl_LaunchIDEXT;
+	uvec3 v1 = gl_LaunchSizeEXT;
+	int v2 = gl_PrimitiveID;
+	int v3 = gl_InstanceID;
+	int v4 = gl_InstanceCustomIndexEXT;
+	vec3 v5 = gl_WorldRayOriginEXT;
+	vec3 v6 = gl_WorldRayDirectionEXT;
+	vec3 v7 = gl_ObjectRayOriginEXT;
+	vec3 v8 = gl_ObjectRayDirectionEXT;
+	float v9 = gl_RayTminEXT;
+	float v10 = gl_RayTmaxEXT;
+	float v11 = gl_HitTEXT;
+	uint v12 = gl_HitKindEXT;
+	mat4x3 v13 = gl_ObjectToWorldEXT;
+	mat4x3 v14 = gl_WorldToObjectEXT;
+    int v15 = gl_GeometryIndexEXT;
+    mat3x4 v16 = gl_ObjectToWorld3x4EXT;
+    mat3x4 v17 = gl_WorldToObject3x4EXT;
+	incomingPayload = vec4(0.5f);
+	if (v2 == 1)
+	    ignoreIntersectionEXT();
+	else
+	    terminateRayEXT();
+}
diff --git a/Test/spv.ext.AnyHitShader_Errors.rahit b/Test/spv.ext.AnyHitShader_Errors.rahit
new file mode 100644
index 0000000..f9fd730
--- /dev/null
+++ b/Test/spv.ext.AnyHitShader_Errors.rahit
@@ -0,0 +1,11 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+hitAttributeEXT vec4 payload;                               
+layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
+
+void main()
+{
+    payload.x = 1.0f;                                       // ERROR, cannot write to hitattributeEXT in stage
+    reportIntersectionEXT(1.0, 1U);                          // ERROR, unsupported builtin in stage
+    traceRayEXT(accEXT, 0, 0, 1, 1, 0, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 0); // ERROR, unsupported builtin in stage
+}
diff --git a/Test/spv.ext.ClosestHitShader.rchit b/Test/spv.ext.ClosestHitShader.rchit
new file mode 100644
index 0000000..3f9bbaa
--- /dev/null
+++ b/Test/spv.ext.ClosestHitShader.rchit
@@ -0,0 +1,27 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
+layout(location = 0) rayPayloadEXT vec4 localPayload;
+layout(location = 1) rayPayloadInEXT vec4 incomingPayload;
+void main()
+{
+	uvec3 v0 = gl_LaunchIDEXT;
+	uvec3 v1 = gl_LaunchSizeEXT;
+	int v2 = gl_PrimitiveID;
+	int v3 = gl_InstanceID;
+	int v4 = gl_InstanceCustomIndexEXT;
+	vec3 v5 = gl_WorldRayOriginEXT;
+	vec3 v6 = gl_WorldRayDirectionEXT;
+	vec3 v7 = gl_ObjectRayOriginEXT;
+	vec3 v8 = gl_ObjectRayDirectionEXT;
+	float v9 = gl_RayTminEXT;
+	float v10 = gl_RayTmaxEXT;
+	float v11 = gl_HitTEXT;
+	uint v12 = gl_HitKindEXT;
+	mat4x3 v13 = gl_ObjectToWorldEXT;
+	mat4x3 v14 = gl_WorldToObjectEXT;
+    int v15 = gl_GeometryIndexEXT;
+    mat3x4 v16 = gl_ObjectToWorld3x4EXT;
+    mat3x4 v17 = gl_WorldToObject3x4EXT;
+	traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+}
diff --git a/Test/spv.ext.ClosestHitShader_Errors.rchit b/Test/spv.ext.ClosestHitShader_Errors.rchit
new file mode 100644
index 0000000..05e05fe
--- /dev/null
+++ b/Test/spv.ext.ClosestHitShader_Errors.rchit
@@ -0,0 +1,13 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+hitAttributeEXT vec4 payload;
+layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
+
+void main()
+{
+    payload.x = 1.0f;                                       // ERROR, cannot write to hitattributeEXT in stage
+    reportIntersectionEXT(1.0, 1U);                          // ERROR, unsupported builtin in stage 
+    terminateRayEXT();
+    ignoreIntersectionEXT();
+    bool e1 = gl_IncomingRayFlagsEXT == gl_RayFlagsSkipAABBEXT;
+}
diff --git a/Test/spv.ext.IntersectShader.rint b/Test/spv.ext.IntersectShader.rint
new file mode 100644
index 0000000..4933ff5
--- /dev/null
+++ b/Test/spv.ext.IntersectShader.rint
@@ -0,0 +1,23 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+hitAttributeEXT vec4 iAttr;
+void main()
+{
+	uvec3 v0 = gl_LaunchIDEXT;
+	uvec3 v1 = gl_LaunchSizeEXT;
+	int v2 = gl_PrimitiveID;
+	int v3 = gl_InstanceID;
+	int v4 = gl_InstanceCustomIndexEXT;
+	vec3 v5 = gl_WorldRayOriginEXT;
+	vec3 v6 = gl_WorldRayDirectionEXT;
+	vec3 v7 = gl_ObjectRayOriginEXT;
+	vec3 v8 = gl_ObjectRayDirectionEXT;
+	float v9 = gl_RayTminEXT;
+	float v10 = gl_RayTmaxEXT;
+	mat4x3 v11 = gl_ObjectToWorldEXT;
+	mat4x3 v12 = gl_WorldToObjectEXT;
+    mat3x4 v13 = gl_ObjectToWorld3x4EXT;
+    mat3x4 v14 = gl_WorldToObject3x4EXT;
+	iAttr = vec4(0.5f,0.5f,0.0f,1.0f);
+	reportIntersectionEXT(0.5, 1U);
+}
diff --git a/Test/spv.ext.IntersectShader_Errors.rint b/Test/spv.ext.IntersectShader_Errors.rint
new file mode 100644
index 0000000..e767ca3
--- /dev/null
+++ b/Test/spv.ext.IntersectShader_Errors.rint
@@ -0,0 +1,11 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+rayPayloadInEXT vec4 payloadIn;                             // ERROR, rayPayloadIn unsupported in this stage
+rayPayloadEXT vec4 payload;                                 // ERROR, rayPayload unsuppoted in this stage
+uniform accelerationStructureEXT accEXT;
+void main()
+{
+    float e12 = gl_HitTEXT;                                 // ERROR, unsupported builtin in stage
+    float e13 = gl_HitKindEXT;                              // ERROR, unsupported builtin in stage
+    traceRayEXT(accEXT, 0, 0, 1, 1, 0, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 0); // ERROR, unsupported
+}
diff --git a/Test/spv.ext.MissShader.rmiss b/Test/spv.ext.MissShader.rmiss
new file mode 100644
index 0000000..e774334
--- /dev/null
+++ b/Test/spv.ext.MissShader.rmiss
@@ -0,0 +1,15 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
+layout(location = 0) rayPayloadEXT vec4 localPayload;
+layout(location = 1) rayPayloadInEXT vec4 incomingPayload;
+void main()
+{
+	uvec3 v0 = gl_LaunchIDEXT;
+	uvec3 v1 = gl_LaunchSizeEXT;
+	vec3 v2 = gl_WorldRayOriginEXT;
+	vec3 v3 = gl_WorldRayDirectionEXT;
+	float v4 = gl_RayTminEXT;
+	float v5 = gl_RayTmaxEXT;
+	traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
+}
diff --git a/Test/spv.ext.MissShader_Errors.rmiss b/Test/spv.ext.MissShader_Errors.rmiss
new file mode 100644
index 0000000..2391211
--- /dev/null
+++ b/Test/spv.ext.MissShader_Errors.rmiss
@@ -0,0 +1,16 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+hitAttributeEXT vec4 payload;                               // ERROR, hitattributeEXT unsupported in this stage 
+void main()
+{
+    int e0 = gl_PrimitiveID;                               // ERROR, unsupported builtin in stage
+    int e1 = gl_InstanceID;                                // ERROR, unsupported builtin in stage
+    int e3 = gl_InstanceCustomIndexEXT;                     // ERROR, unsupported builtin in stage
+    mat4x3 e10 = gl_ObjectToWorldEXT;                       // ERROR, unsupported builtin in stage
+    mat4x3 e11 = gl_WorldToObjectEXT;                       // ERROR, unsupported builtin in stage
+    float e12 = gl_HitTEXT;                                 // ERROR, unsupported builtin in stage
+    float e13 = gl_HitKindEXT;                              // ERROR, unsupported builtin in stage
+    reportIntersectionEXT(1.0, 1U);                         // ERROR, unsupported builtin in stage
+    ignoreIntersectionEXT();                                // ERROR, unsupported builtin in stage
+    terminateRayEXT();                                      // ERROR, unsupported builtin in stage
+}
diff --git a/Test/spv.ext.RayCallable.rcall b/Test/spv.ext.RayCallable.rcall
new file mode 100644
index 0000000..9ec6820
--- /dev/null
+++ b/Test/spv.ext.RayCallable.rcall
@@ -0,0 +1,13 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+layout(location = 0) callableDataEXT vec4 data0;
+layout(location = 1) callableDataInEXT dataBlock {
+	uint data1;
+};
+void main()
+{
+	uvec3 id = gl_LaunchIDEXT;
+	uvec3 size = gl_LaunchSizeEXT;
+	data1 = 256U;
+	executeCallableEXT(2,1);
+}
diff --git a/Test/spv.ext.RayCallable_Errors.rcall b/Test/spv.ext.RayCallable_Errors.rcall
new file mode 100644
index 0000000..d35672e
--- /dev/null
+++ b/Test/spv.ext.RayCallable_Errors.rcall
@@ -0,0 +1,26 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+hitAttributeEXT vec4 hitattr;                                // ERROR, hitattributeEXT unsupported in this stage 
+rayPayloadEXT vec4 payload;                                  // ERROR, rayPayloadEXT unsupported in this stage
+rayPayloadInEXT vec4 payloadIn;                              // ERROR, rayPayloadInEXT unsupported in this stage
+
+void main()
+{
+    int e0 = gl_PrimitiveID;                                // ERROR, unsupported builtin in stage
+    int e1 = gl_InstanceID;                                 // ERROR, unsupported builtin in stage
+    int e3 = gl_InstanceCustomIndexEXT;                      // ERROR, unsupported builtin in stage
+    vec3 e4 = gl_WorldRayOriginEXT;                          // ERROR, unsupported builtin in stage
+    vec3 e5 = gl_WorldRayDirectionEXT;                       // ERROR, unsupported builtin in stage
+    vec3 e6 = gl_ObjectRayOriginEXT;                         // ERROR, unsupported builtin in stage
+    vec3 e7 = gl_ObjectRayDirectionEXT;                      // ERROR, unsupported builtin in stage
+    float e8 = gl_RayTminEXT;                                // ERROR, unsupported builtin in stage
+    float e9 = gl_RayTmaxEXT;                                // ERROR, unsupported builtin in stage
+    mat4x3 e10 = gl_ObjectToWorldEXT;                        // ERROR, unsupported builtin in stage
+    mat4x3 e11 = gl_WorldToObjectEXT;                        // ERROR, unsupported builtin in stage
+    float e12 = gl_HitTEXT;                                  // ERROR, unsupported builtin in stage
+    float e13 = gl_HitKindEXT;                               // ERROR, unsupported builtin in stage
+    uint curFlags = gl_IncomingRayFlagsEXT;                  // ERROR, unsupported builtin in stage
+    reportIntersectionEXT(1.0, 1U);                          // ERROR, unsupported builtin in stage
+    ignoreIntersectionEXT();                                 // ERROR, unsupported builtin in stage
+    terminateRayEXT();                                       // ERROR, unsupported builtin in stage
+}
diff --git a/Test/spv.ext.RayConstants.rgen b/Test/spv.ext.RayConstants.rgen
new file mode 100644
index 0000000..73cb0c1
--- /dev/null
+++ b/Test/spv.ext.RayConstants.rgen
@@ -0,0 +1,15 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
+layout(location = 0) rayPayloadEXT vec4 payload;
+void main()
+{
+    const uint rayFlags = gl_RayFlagsNoneEXT | gl_RayFlagsOpaqueEXT |
+                          gl_RayFlagsNoOpaqueEXT | gl_RayFlagsTerminateOnFirstHitEXT |
+                          gl_RayFlagsSkipClosestHitShaderEXT | gl_RayFlagsCullBackFacingTrianglesEXT |
+                          gl_RayFlagsCullFrontFacingTrianglesEXT | gl_RayFlagsCullOpaqueEXT | 
+                          gl_RayFlagsCullNoOpaqueEXT;
+
+    const int payloadId = 1;
+    traceRayEXT(accEXT, rayFlags, 0, 1, 1, 0, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, payloadId);
+}
diff --git a/Test/spv.ext.RayGenShader.rgen b/Test/spv.ext.RayGenShader.rgen
new file mode 100644
index 0000000..c92772e
--- /dev/null
+++ b/Test/spv.ext.RayGenShader.rgen
@@ -0,0 +1,21 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+#extension GL_EXT_ray_flags_primitive_culling : enable
+layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT0;
+layout(binding = 1, set = 0) uniform accelerationStructureEXT accEXT1; // Unused
+layout(binding = 2, r32ui) shadercallcoherent uniform uimage2D imageu;
+layout(location = 0) rayPayloadEXT vec4 payload;
+layout(shaderRecordEXT) buffer block
+{
+	vec3 dir;
+	vec3 origin;
+
+};
+void main()
+{
+    uint lx = gl_LaunchIDEXT.x;
+    uint ly = gl_LaunchIDEXT.y;
+    uint sx = gl_LaunchSizeEXT.x;
+    uint sy = gl_LaunchSizeEXT.y;
+    traceRayEXT(accEXT0, lx, ly, sx, sy, gl_RayFlagsSkipTrianglesEXT | gl_RayFlagsSkipAABBEXT, origin, 0.5f, dir, 0.75f, 1);
+}
diff --git a/Test/spv.ext.RayGenShader11.rgen b/Test/spv.ext.RayGenShader11.rgen
new file mode 100644
index 0000000..4817026
--- /dev/null
+++ b/Test/spv.ext.RayGenShader11.rgen
@@ -0,0 +1,17 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
+layout(location = 0) rayPayloadEXT vec4 payload;
+layout(shaderRecordEXT) buffer block
+{
+	vec3 dir;
+	vec3 origin;
+};
+void main()
+{
+    uint lx = gl_LaunchIDEXT.x;
+    uint ly = gl_LaunchIDEXT.y;
+    uint sx = gl_LaunchSizeEXT.x;
+    uint sy = gl_LaunchSizeEXT.y;
+    traceRayEXT(accEXT, lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+}
diff --git a/Test/spv.ext.RayGenShaderArray.rgen b/Test/spv.ext.RayGenShaderArray.rgen
new file mode 100644
index 0000000..d3f99de
--- /dev/null
+++ b/Test/spv.ext.RayGenShaderArray.rgen
@@ -0,0 +1,22 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+#extension GL_EXT_nonuniform_qualifier : enable
+layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT0[];
+layout(binding = 1, set = 0) uniform accelerationStructureEXT accEXT1[2];
+layout(location = 0) rayPayloadEXT vec4 payload;
+layout(shaderRecordEXT) buffer block
+{
+	vec3 dir;
+	vec3 origin;
+    int i;
+};
+void main()
+{
+    uint lx = gl_LaunchIDEXT.x;
+    uint ly = gl_LaunchIDEXT.y;
+    uint sx = gl_LaunchSizeEXT.x;
+    uint sy = gl_LaunchSizeEXT.y;
+    traceRayEXT(accEXT0[i], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+    traceRayEXT(accEXT1[i], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+    traceRayEXT(accEXT0[nonuniformEXT(i)], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1);
+}
diff --git a/Test/spv.ext.RayGenShader_Errors.rgen b/Test/spv.ext.RayGenShader_Errors.rgen
new file mode 100644
index 0000000..3498342
--- /dev/null
+++ b/Test/spv.ext.RayGenShader_Errors.rgen
@@ -0,0 +1,42 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+hitAttributeEXT vec4 payload;                                // ERROR, hitattributeEXT unsupported in this stage 
+rayPayloadInEXT vec4 payloadIn;                              // ERROR, rayPayloadIn unsupported in this stage
+layout(shaderRecordEXT) uniform ublock                       // ERROR, shaderRecordEXT unsupported on uniform blocks
+{
+    float a;
+};
+layout(binding = 0, shaderRecordEXT) buffer bblock {         // ERROR, binding unsupported on shaderRecordEXT blocks
+    float b;
+};
+layout(set = 0, shaderRecordEXT) buffer bblock2 {            // ERROR, set unsupported on shaderRecordEXT blocks
+    float c;
+};
+layout(shaderRecordEXT) buffer bblock3 {
+    float d;
+};
+layout(shaderRecordEXT) buffer bblock4 {                     // ERROR, cannot have more than one shaderRecordEXTX block
+    float e;
+};
+void main()
+{
+    accelerationStructureEXT a = 0;
+    int e0 = gl_PrimitiveID;                                // ERROR, unsupported builtin in stage
+    int e1 = gl_InstanceID;                                 // ERROR, unsupported builtin in stage
+    int e3 = gl_InstanceCustomIndexEXT;                      // ERROR, unsupported builtin in stage
+    vec3 e4 = gl_WorldRayOriginEXT;                          // ERROR, unsupported builtin in stage
+    vec3 e5 = gl_WorldRayDirectionEXT;                       // ERROR, unsupported builtin in stage
+    vec3 e6 = gl_ObjectRayOriginEXT;                         // ERROR, unsupported builtin in stage
+    vec3 e7 = gl_ObjectRayDirectionEXT;                      // ERROR, unsupported builtin in stage
+    float e8 = gl_RayTminEXT;                                // ERROR, unsupported builtin in stage
+    float e9 = gl_RayTmaxEXT;                                // ERROR, unsupported builtin in stage
+    mat4x3 e10 = gl_ObjectToWorldEXT;                        // ERROR, unsupported builtin in stage
+    mat4x3 e11 = gl_WorldToObjectEXT;                        // ERROR, unsupported builtin in stage
+    float e12 = gl_HitTEXT;                                  // ERROR, unsupported builtin in stage
+    float e13 = gl_HitKindEXT;                               // ERROR, unsupported builtin in stage
+    int e14 = gl_RayFlagsSkipAABBEXT;                        // ERROR, unsupported builtin in stage
+    reportIntersectionEXT(1.0, 1U);                          // ERROR, unsupported builtin in stage
+    ignoreIntersectionEXT();                                 // ERROR, unsupported builtin in stage
+    terminateRayEXT();                                       // ERROR, unsupported builtin in stage
+    d = 1.0f;                                               // ERROR, can't modify shaderRecordEXT block
+}
diff --git a/Test/spv.memoryScopeSemantics.comp b/Test/spv.memoryScopeSemantics.comp
index 037e6d7..528a639 100644
--- a/Test/spv.memoryScopeSemantics.comp
+++ b/Test/spv.memoryScopeSemantics.comp
@@ -20,6 +20,7 @@
 shared int64_t atomi64;

 layout (binding = 8) volatile buffer BufferL { uint x; } bufferl;

 layout (binding = 9) buffer BufferM { volatile uint x; } bufferm;

+layout(binding = 10, r32i) volatile coherent uniform iimage2DMS imageMS;

 

 

 void main()

@@ -66,5 +67,8 @@
     imageAtomicAdd(imagei, ivec2(0,0), 3);

     atomicAdd(bufferu.x, 4u, gl_ScopeDevice, 0, 0);

     atomicAdd(bufferu.x, 5u, gl_ScopeDevice, 0, gl_SemanticsVolatile);

+

+    imageAtomicStore(imageMS, ivec2(0,0), 1, 4, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease);

+    imageAtomicStore(imagei, ivec2(0,0), -7, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease);

 }

 

diff --git a/Test/spv.nonuniform3.frag b/Test/spv.nonuniform3.frag
new file mode 100644
index 0000000..e79865e
--- /dev/null
+++ b/Test/spv.nonuniform3.frag
@@ -0,0 +1,10 @@
+#version 450

+#extension GL_EXT_nonuniform_qualifier : require

+layout(set = 0, binding = 0) uniform texture2D uTex[];

+layout(set = 1, binding = 0) uniform sampler uSamp;

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

+layout(location = 0) out vec4 FragColor;

+void main()

+{

+    FragColor = texture(nonuniformEXT(sampler2D(uTex[Index], uSamp)), vec2(0.5));

+}

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

+#extension GL_EXT_nonuniform_qualifier : require

+layout(set=0,binding=4,r32ui) uniform uimageBuffer data[];

+layout(location = 3) in flat int  rIndex;

+void main()

+{

+  imageAtomicAdd(data[nonuniformEXT(rIndex)], 0, 0);

+}

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

+#extension GL_EXT_nonuniform_qualifier : require

+

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

+layout(location = 0) out vec4 FragColor;

+

+layout(set = 0, binding = 0) uniform UBO

+{

+	vec4 v;

+} ubos[];

+

+void main()

+{

+	FragColor = ubos[nonuniformEXT(Index)].v;

+}

diff --git a/Test/spv.specTexture.frag b/Test/spv.specTexture.frag
new file mode 100644
index 0000000..7fd89f5
--- /dev/null
+++ b/Test/spv.specTexture.frag
@@ -0,0 +1,10 @@
+#version 450
+
+layout(constant_id = 1) const int offs = 0;
+layout(binding = 0) uniform sampler2D tex;
+layout(location = 0) out vec4 color_out;
+
+void main(void)
+{
+  color_out = textureLodOffset(tex, vec2(0.0, 0.0), 0.0, ivec2(offs, offs));
+}
\ No newline at end of file
diff --git a/Test/spv.volatileAtomic.comp b/Test/spv.volatileAtomic.comp
new file mode 100644
index 0000000..2b7e6c6
--- /dev/null
+++ b/Test/spv.volatileAtomic.comp
@@ -0,0 +1,8 @@
+#version 450 core

+

+layout(set=0, binding=3) volatile buffer D { uint d[]; } d;

+

+void main()

+{

+    atomicExchange(d.d[0], 0);

+}

diff --git a/Test/web.comp b/Test/web.comp
new file mode 100644
index 0000000..07847b4
--- /dev/null
+++ b/Test/web.comp
@@ -0,0 +1,50 @@
+#version 310 es
+
+layout(local_size_x_id = 18, local_size_z_id = 19) in;
+
+layout(local_size_x = 2) in;
+layout(local_size_y = 5) in;
+layout(local_size_z = 7) in;
+
+const int total = gl_MaxComputeWorkGroupCount.x
+                + gl_MaxComputeWorkGroupCount.y
+                + gl_MaxComputeWorkGroupCount.z
+                + gl_MaxComputeUniformComponents
+                + gl_MaxComputeTextureImageUnits;
+
+shared vec4 s[total];
+
+int arrX[gl_WorkGroupSize.x];
+int arrY[gl_WorkGroupSize.y];
+int arrZ[gl_WorkGroupSize.z];
+
+layout(binding = 0, set = 0) buffer bName {
+    int size;
+    uvec3 count;
+    vec4 data[];
+} bInst;
+
+void main()
+{
+    barrier();
+
+    bInst.data[bInst.size / 2] *= vec4(7.0);
+
+    memoryBarrier();
+    groupMemoryBarrier();
+    memoryBarrierShared();
+    memoryBarrierBuffer();
+
+    s[3] = vec4(0, arrX[0], arrY[0], arrZ[0]);
+    bInst.count = gl_NumWorkGroups + gl_WorkGroupSize + gl_WorkGroupID + gl_LocalInvocationID +
+                  gl_GlobalInvocationID * gl_LocalInvocationIndex;
+
+    atomicAdd(bInst.size, 2);
+    atomicMin(bInst.size, 2);
+    atomicMax(bInst.size, 2);
+    atomicAnd(bInst.size, 2);
+    atomicOr(bInst.size, 2);
+    atomicXor(bInst.size, 2);
+    atomicExchange(bInst.size, 2);
+    atomicCompSwap(bInst.size, 5, 2);
+}
diff --git a/Test/web.separate.frag b/Test/web.separate.frag
new file mode 100644
index 0000000..b747cba
--- /dev/null
+++ b/Test/web.separate.frag
@@ -0,0 +1,63 @@
+#version 310 es
+
+precision highp sampler;
+precision highp samplerShadow;
+precision highp texture2DArray;
+precision highp itexture2D;
+precision highp itexture3D;
+precision highp itextureCube;
+precision highp itexture2DArray;
+precision highp utexture2D;
+precision highp utexture3D;
+precision highp utextureCube;
+precision highp utexture2DArray;
+precision highp texture3D;
+precision highp float;
+
+layout(binding = 0) uniform sampler s;
+layout(binding = 1) uniform samplerShadow sShadow;
+layout(binding = 2) uniform sampler sA[4];
+layout(binding = 3) uniform texture2D t2d;
+layout(binding = 4) uniform texture3D t3d[4];
+layout(location = 0) flat in int i;
+
+layout(location = 0) out vec4 color;
+
+void main()
+{
+    color = texture(sampler2D(t2d, s), vec2(0.5));
+    color += texture(sampler3D(t3d[1], sA[2]), vec3(0.5));
+    color += texture(sampler2D(t2d, s), vec2(0.5));
+}
+
+layout(binding =  5) uniform texture2D                 tex2D;
+layout(binding =  6) uniform textureCube               texCube;
+layout(binding = 15) uniform texture2DArray            tex2DArray;
+layout(binding = 16) uniform itexture2D                itex2D;
+layout(binding = 17) uniform itexture3D                itex3D;
+layout(binding = 18) uniform itextureCube              itexCube;
+layout(binding = 19) uniform itexture2DArray           itex2DArray;
+layout(binding = 20) uniform utexture2D                utex2D;
+layout(binding = 21) uniform utexture3D                utex3D;
+layout(binding = 22) uniform utextureCube              utexCube;
+layout(binding = 23) uniform utexture2DArray           utex2DArray;
+layout(binding = 36) uniform texture3D                 tex3D;
+
+void foo()
+{
+    sampler2D              (tex2D, s);
+    samplerCube            (texCube, s);
+    samplerCubeShadow      (texCube, sShadow);
+    sampler2DArray         (tex2DArray, s);
+    sampler2DArrayShadow   (tex2DArray, sShadow);
+    isampler2D             (itex2D, s);
+    isampler3D             (itex3D, s);
+    isamplerCube           (itexCube, s);
+    isampler2DArray        (itex2DArray, s);
+    usampler2D             (utex2D, s);
+    usampler3D             (utex3D, s);
+    usamplerCube           (utexCube, s);
+    usampler2DArray        (utex2DArray, s);
+    sampler3D              (tex3D, s);
+    sampler2DShadow        (tex2D, sShadow);
+}
diff --git a/Test/web.testlist b/Test/web.testlist
index fba9212..764c0c0 100644
--- a/Test/web.testlist
+++ b/Test/web.testlist
@@ -5,3 +5,5 @@
 web.operations.frag
 web.texture.frag
 web.array.frag
+web.separate.frag
+web.comp
diff --git a/WORKSPACE b/WORKSPACE
new file mode 100644
index 0000000..3c38e61
--- /dev/null
+++ b/WORKSPACE
@@ -0,0 +1,27 @@
+workspace(name = "org_khronos_glslang")
+load(
+    "@bazel_tools//tools/build_defs/repo:http.bzl",
+    "http_archive",
+)
+
+http_archive(
+    name = "com_google_googletest",
+    sha256 = "ef9e2e12e7bf115ee48b427ae171fc869eeaf1b532c0fcfd982f6a353d2471b4",
+    strip_prefix = "googletest-37ae1fc5e6be26f367d76c078beabd7024fed53a",
+    urls = ["https://github.com/google/googletest/archive/37ae1fc5e6be26f367d76c078beabd7024fed53a.zip"],  # 2018-07-16
+)
+
+http_archive(
+    name = "com_googlesource_code_re2",
+    sha256 = "b885bb965ab4b6cf8718bbb8154d8f6474cd00331481b6d3e390babb3532263e",
+    strip_prefix = "re2-e860767c86e577b87deadf24cc4567ea83c4f162/",
+    urls = ["https://github.com/google/re2/archive/e860767c86e577b87deadf24cc4567ea83c4f162.zip"],
+)
+
+http_archive(
+    name = "com_google_effcee",
+    build_file = "BUILD.effcee.bazel",
+    sha256 = "b0c21a01995fdf9792510566d78d5e7fe6f83cb4ba986eba691f4926f127cb34",
+    strip_prefix = "effcee-8f0a61dc95e0df18c18e0ac56d83b3fa9d2fe90b/",
+    urls = ["https://github.com/google/effcee/archive/8f0a61dc95e0df18c18e0ac56d83b3fa9d2fe90b.zip"],
+)
diff --git a/_config.yml b/_config.yml
index c50ff38..e8b995b 100644
--- a/_config.yml
+++ b/_config.yml
@@ -1 +1 @@
-theme: jekyll-theme-merlot
\ No newline at end of file
+theme: jekyll-theme-merlot
diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp
new file mode 100644
index 0000000..c4c24a9
--- /dev/null
+++ b/glslang/CInterface/glslang_c_interface.cpp
@@ -0,0 +1,461 @@
+/**
+    This code is based on the glslang_c_interface implementation by Viktor Latypov
+**/
+
+/**
+BSD 2-Clause License
+
+Copyright (c) 2019, Viktor Latypov
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+2. 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.
+
+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 HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+
+#include "glslang/Include/glslang_c_interface.h"
+
+#include "SPIRV/GlslangToSpv.h"
+#include "SPIRV/Logger.h"
+#include "SPIRV/SpvTools.h"
+#include "StandAlone/DirStackFileIncluder.h"
+#include "StandAlone/ResourceLimits.h"
+#include "glslang/Include/ShHandle.h"
+
+#include "glslang/Include/ResourceLimits.h"
+#include "glslang/MachineIndependent/Versions.h"
+
+static_assert(int(GLSLANG_STAGE_COUNT) == EShLangCount, "");
+static_assert(int(GLSLANG_STAGE_MASK_COUNT) == EShLanguageMaskCount, "");
+static_assert(int(GLSLANG_SOURCE_COUNT) == glslang::EShSourceCount, "");
+static_assert(int(GLSLANG_CLIENT_COUNT) == glslang::EShClientCount, "");
+static_assert(int(GLSLANG_TARGET_COUNT) == glslang::EShTargetCount, "");
+static_assert(int(GLSLANG_TARGET_CLIENT_VERSION_COUNT) == glslang::EShTargetClientVersionCount, "");
+static_assert(int(GLSLANG_TARGET_LANGUAGE_VERSION_COUNT) == glslang::EShTargetLanguageVersionCount, "");
+static_assert(int(GLSLANG_OPT_LEVEL_COUNT) == EshOptLevelCount, "");
+static_assert(int(GLSLANG_TEX_SAMP_TRANS_COUNT) == EShTexSampTransCount, "");
+static_assert(int(GLSLANG_MSG_COUNT) == EShMsgCount, "");
+static_assert(int(GLSLANG_REFLECTION_COUNT) == EShReflectionCount, "");
+static_assert(int(GLSLANG_PROFILE_COUNT) == EProfileCount, "");
+static_assert(sizeof(glslang_limits_t) == sizeof(TLimits), "");
+static_assert(sizeof(glslang_resource_t) == sizeof(TBuiltInResource), "");
+
+typedef struct glslang_shader_s {
+    glslang::TShader* shader;
+    std::string preprocessedGLSL;
+} glslang_shader_t;
+
+typedef struct glslang_program_s {
+    glslang::TProgram* program;
+    std::vector<unsigned int> spirv;
+    std::string loggerMessages;
+} glslang_program_t;
+
+/* Wrapper/Adapter for C glsl_include_callbacks_t functions
+
+   This class contains a 'glsl_include_callbacks_t' structure
+   with C include_local/include_system callback pointers.
+
+   This class implement TShader::Includer interface
+   by redirecting C++ virtual methods to C callbacks.
+
+   The 'IncludeResult' instances produced by this Includer
+   contain a reference to glsl_include_result_t C structure
+   to allow its lifetime management by another C callback
+   (CallbackIncluder::callbacks::free_include_result)
+*/
+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() {}
+
+    virtual IncludeResult* includeSystem(const char* headerName, const char* includerName,
+                                         size_t inclusionDepth) override
+    {
+        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 glslang::TShader::Includer::includeSystem(headerName, includerName, inclusionDepth);
+    }
+
+    virtual IncludeResult* includeLocal(const char* headerName, const char* includerName,
+                                        size_t inclusionDepth) override
+    {
+        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 glslang::TShader::Includer::includeLocal(headerName, includerName, inclusionDepth);
+    }
+
+    /* This function only calls free_include_result callback
+       when the IncludeResult instance is allocated by a C function */
+    virtual void releaseInclude(IncludeResult* result) override
+    {
+        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;
+        }
+
+        delete[] static_cast<char*>(result->userData);
+        delete result;
+    }
+
+private:
+    CallbackIncluder() {}
+
+    /* C callback pointers */
+    glsl_include_callbacks_t callbacks;
+    /* User-defined context */
+    void* context;
+};
+
+int glslang_initialize_process() { return static_cast<int>(glslang::InitializeProcess()); }
+
+void glslang_finalize_process() { glslang::FinalizeProcess(); }
+
+static EShLanguage c_shader_stage(glslang_stage_t stage)
+{
+    switch (stage) {
+    case GLSLANG_STAGE_VERTEX:
+        return EShLangVertex;
+    case GLSLANG_STAGE_TESSCONTROL:
+        return EShLangTessControl;
+    case GLSLANG_STAGE_TESSEVALUATION:
+        return EShLangTessEvaluation;
+    case GLSLANG_STAGE_GEOMETRY:
+        return EShLangGeometry;
+    case GLSLANG_STAGE_FRAGMENT:
+        return EShLangFragment;
+    case GLSLANG_STAGE_COMPUTE:
+        return EShLangCompute;
+    case GLSLANG_STAGE_RAYGEN_NV:
+        return EShLangRayGen;
+    case GLSLANG_STAGE_INTERSECT_NV:
+        return EShLangIntersect;
+    case GLSLANG_STAGE_ANYHIT_NV:
+        return EShLangAnyHit;
+    case GLSLANG_STAGE_CLOSESTHIT_NV:
+        return EShLangClosestHit;
+    case GLSLANG_STAGE_MISS_NV:
+        return EShLangMiss;
+    case GLSLANG_STAGE_CALLABLE_NV:
+        return EShLangCallable;
+    case GLSLANG_STAGE_TASK_NV:
+        return EShLangTaskNV;
+    case GLSLANG_STAGE_MESH_NV:
+        return EShLangMeshNV;
+    default:
+        break;
+    }
+    return EShLangCount;
+}
+
+static int c_shader_messages(glslang_messages_t messages)
+{
+#define CONVERT_MSG(in, out)                                                                                           \
+    if ((messages & in) == in)                                                                                         \
+        res |= out;
+
+    int res = 0;
+
+    CONVERT_MSG(GLSLANG_MSG_RELAXED_ERRORS_BIT, EShMsgRelaxedErrors);
+    CONVERT_MSG(GLSLANG_MSG_SUPPRESS_WARNINGS_BIT, EShMsgSuppressWarnings);
+    CONVERT_MSG(GLSLANG_MSG_AST_BIT, EShMsgAST);
+    CONVERT_MSG(GLSLANG_MSG_SPV_RULES_BIT, EShMsgSpvRules);
+    CONVERT_MSG(GLSLANG_MSG_VULKAN_RULES_BIT, EShMsgVulkanRules);
+    CONVERT_MSG(GLSLANG_MSG_ONLY_PREPROCESSOR_BIT, EShMsgOnlyPreprocessor);
+    CONVERT_MSG(GLSLANG_MSG_READ_HLSL_BIT, EShMsgReadHlsl);
+    CONVERT_MSG(GLSLANG_MSG_CASCADING_ERRORS_BIT, EShMsgCascadingErrors);
+    CONVERT_MSG(GLSLANG_MSG_KEEP_UNCALLED_BIT, EShMsgKeepUncalled);
+    CONVERT_MSG(GLSLANG_MSG_HLSL_OFFSETS_BIT, EShMsgHlslOffsets);
+    CONVERT_MSG(GLSLANG_MSG_DEBUG_INFO_BIT, EShMsgDebugInfo);
+    CONVERT_MSG(GLSLANG_MSG_HLSL_ENABLE_16BIT_TYPES_BIT, EShMsgHlslEnable16BitTypes);
+    CONVERT_MSG(GLSLANG_MSG_HLSL_LEGALIZATION_BIT, EShMsgHlslLegalization);
+    CONVERT_MSG(GLSLANG_MSG_HLSL_DX9_COMPATIBLE_BIT, EShMsgHlslDX9Compatible);
+    CONVERT_MSG(GLSLANG_MSG_BUILTIN_SYMBOL_TABLE_BIT, EShMsgBuiltinSymbolTable);
+    return res;
+#undef CONVERT_MSG
+}
+
+static glslang::EShTargetLanguageVersion
+c_shader_target_language_version(glslang_target_language_version_t target_language_version)
+{
+    switch (target_language_version) {
+    case GLSLANG_TARGET_SPV_1_0:
+        return glslang::EShTargetSpv_1_0;
+    case GLSLANG_TARGET_SPV_1_1:
+        return glslang::EShTargetSpv_1_1;
+    case GLSLANG_TARGET_SPV_1_2:
+        return glslang::EShTargetSpv_1_2;
+    case GLSLANG_TARGET_SPV_1_3:
+        return glslang::EShTargetSpv_1_3;
+    case GLSLANG_TARGET_SPV_1_4:
+        return glslang::EShTargetSpv_1_4;
+    case GLSLANG_TARGET_SPV_1_5:
+        return glslang::EShTargetSpv_1_5;
+    default:
+        break;
+    }
+    return glslang::EShTargetSpv_1_0;
+}
+
+static glslang::EShClient c_shader_client(glslang_client_t client)
+{
+    switch (client) {
+    case GLSLANG_CLIENT_VULKAN:
+        return glslang::EShClientVulkan;
+    case GLSLANG_CLIENT_OPENGL:
+        return glslang::EShClientOpenGL;
+    default:
+        break;
+    }
+
+    return glslang::EShClientNone;
+}
+
+static glslang::EShTargetClientVersion c_shader_client_version(glslang_target_client_version_t client_version)
+{
+    switch (client_version) {
+    case GLSLANG_TARGET_VULKAN_1_1:
+        return glslang::EShTargetVulkan_1_1;
+    case GLSLANG_TARGET_OPENGL_450:
+        return glslang::EShTargetOpenGL_450;
+    default:
+        break;
+    }
+
+    return glslang::EShTargetVulkan_1_0;
+}
+
+static glslang::EShTargetLanguage c_shader_target_language(glslang_target_language_t target_language)
+{
+    if (target_language == GLSLANG_TARGET_NONE)
+        return glslang::EShTargetNone;
+
+    return glslang::EShTargetSpv;
+}
+
+static glslang::EShSource c_shader_source(glslang_source_t source)
+{
+    switch (source) {
+    case GLSLANG_SOURCE_GLSL:
+        return glslang::EShSourceGlsl;
+    case GLSLANG_SOURCE_HLSL:
+        return glslang::EShSourceHlsl;
+    default:
+        break;
+    }
+
+    return glslang::EShSourceNone;
+}
+
+static EProfile c_shader_profile(glslang_profile_t profile)
+{
+    switch (profile) {
+    case GLSLANG_BAD_PROFILE:
+        return EBadProfile;
+    case GLSLANG_NO_PROFILE:
+        return ENoProfile;
+    case GLSLANG_CORE_PROFILE:
+        return ECoreProfile;
+    case GLSLANG_COMPATIBILITY_PROFILE:
+        return ECompatibilityProfile;
+    case GLSLANG_ES_PROFILE:
+        return EEsProfile;
+    case GLSLANG_PROFILE_COUNT: // Should not use this
+        break;
+    }
+
+    return EProfile();
+}
+
+glslang_shader_t* glslang_shader_create(const glslang_input_t* input)
+{
+    if (!input || !input->code) {
+        printf("Error creating shader: null input(%p)/input->code\n", input);
+
+        if (input)
+            printf("input->code = %p\n", input->code);
+
+        return nullptr;
+    }
+
+    glslang_shader_t* shader = new glslang_shader_t();
+
+    shader->shader = new glslang::TShader(c_shader_stage(input->stage));
+    shader->shader->setStrings(&input->code, 1);
+    shader->shader->setEnvInput(c_shader_source(input->language), c_shader_stage(input->stage),
+                                c_shader_client(input->client), input->default_version);
+    shader->shader->setEnvClient(c_shader_client(input->client), c_shader_client_version(input->client_version));
+    shader->shader->setEnvTarget(c_shader_target_language(input->target_language),
+                                 c_shader_target_language_version(input->target_language_version));
+
+    return shader;
+}
+
+const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader)
+{
+    return shader->preprocessedGLSL.c_str();
+}
+
+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' */
+    return shader->shader->preprocess(
+        reinterpret_cast<const TBuiltInResource*>(input->resource),
+        input->default_version,
+        c_shader_profile(input->default_profile),
+        input->force_default_version_and_profile != 0,
+        input->forward_compatible != 0,
+        (EShMessages)c_shader_messages(input->messages),
+        &shader->preprocessedGLSL,
+        Includer
+    );
+}
+
+int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input)
+{
+    const char* preprocessedCStr = shader->preprocessedGLSL.c_str();
+    shader->shader->setStrings(&preprocessedCStr, 1);
+
+    return shader->shader->parse(
+        reinterpret_cast<const TBuiltInResource*>(input->resource),
+        input->default_version,
+        input->forward_compatible != 0,
+        (EShMessages)c_shader_messages(input->messages)
+    );
+}
+
+const char* glslang_shader_get_info_log(glslang_shader_t* shader) { return shader->shader->getInfoLog(); }
+
+const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader) { return shader->shader->getInfoDebugLog(); }
+
+void glslang_shader_delete(glslang_shader_t* shader)
+{
+    if (!shader)
+        return;
+
+    delete (shader->shader);
+    delete (shader);
+}
+
+glslang_program_t* glslang_program_create()
+{
+    glslang_program_t* p = new glslang_program_t();
+    p->program = new glslang::TProgram();
+    return p;
+}
+
+void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage)
+{
+    spv::SpvBuildLogger logger;
+    glslang::SpvOptions spvOptions;
+    spvOptions.validate = true;
+
+    const glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage));
+
+    glslang::GlslangToSpv(*intermediate, program->spirv, &logger, &spvOptions);
+
+    program->loggerMessages = logger.getAllMessages();
+}
+
+size_t glslang_program_SPIRV_get_size(glslang_program_t* program) { return program->spirv.size(); }
+
+void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int* out)
+{
+    memcpy(out, program->spirv.data(), program->spirv.size() * sizeof(unsigned int));
+}
+
+unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program)
+{
+    return program->spirv.data();
+}
+
+const char* glslang_program_SPIRV_get_messages(glslang_program_t* program)
+{
+    return program->loggerMessages.empty() ? nullptr : program->loggerMessages.c_str();
+}
+
+void glslang_program_delete(glslang_program_t* program)
+{
+    if (!program)
+        return;
+
+    delete (program->program);
+    delete (program);
+}
+
+void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader)
+{
+    program->program->addShader(shader->shader);
+}
+
+int glslang_program_link(glslang_program_t* program, int messages)
+{
+    return (int)program->program->link((EShMessages)messages);
+}
+
+const char* glslang_program_get_info_log(glslang_program_t* program)
+{
+    return program->program->getInfoLog();
+}
+
+const char* glslang_program_get_info_debug_log(glslang_program_t* program)
+{
+    return program->program->getInfoDebugLog();
+}
diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
index 930893c..a0259a3 100644
--- a/glslang/CMakeLists.txt
+++ b/glslang/CMakeLists.txt
@@ -6,9 +6,10 @@
     message("unknown platform")
 endif(WIN32)
 
-if(EMSCRIPTEN OR ENABLE_GLSLANG_WEB)
+if(EMSCRIPTEN OR ENABLE_GLSLANG_JS)
+    # May be enabled on non-Emscripten builds for binary-size testing.
     add_subdirectory(OSDependent/Web)
-endif(EMSCRIPTEN OR ENABLE_GLSLANG_WEB)
+endif(EMSCRIPTEN OR ENABLE_GLSLANG_JS)
 
 set(SOURCES
     MachineIndependent/glslang.m4
@@ -41,7 +42,8 @@
     MachineIndependent/preprocessor/PpTokens.cpp
     MachineIndependent/propagateNoContraction.cpp
     GenericCodeGen/CodeGen.cpp
-    GenericCodeGen/Link.cpp)
+    GenericCodeGen/Link.cpp
+    CInterface/glslang_c_interface.cpp)
 
 set(HEADERS
     Public/ShaderLang.h
@@ -49,6 +51,8 @@
     Include/BaseTypes.h
     Include/Common.h
     Include/ConstantUnion.h
+    Include/glslang_c_interface.h
+    Include/glslang_c_shader_types.h
     Include/InfoSink.h
     Include/InitializeGlobals.h
     Include/intermediate.h
@@ -82,7 +86,9 @@
 set_property(TARGET glslang PROPERTY FOLDER glslang)
 set_property(TARGET glslang PROPERTY POSITION_INDEPENDENT_CODE ON)
 target_link_libraries(glslang OGLCompiler OSDependent)
-target_include_directories(glslang PUBLIC ..)
+target_include_directories(glslang PUBLIC 
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
+    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 
 if(WIN32 AND BUILD_SHARED_LIBS)
     set_target_properties(glslang PROPERTIES PREFIX "")
@@ -102,14 +108,15 @@
 
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
-        install(TARGETS glslang
+        install(TARGETS glslang EXPORT glslangTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     else()
-        install(TARGETS glslang
+        install(TARGETS glslang EXPORT glslangTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
+    install(EXPORT glslangTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
 
 if(ENABLE_GLSLANG_INSTALL)
diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
index 6d4b4ff..b69eaeb 100644
--- a/glslang/Include/BaseTypes.h
+++ b/glslang/Include/BaseTypes.h
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -61,8 +62,9 @@
     EbtSampler,
     EbtStruct,
     EbtBlock,
-    EbtAccStructNV,
+    EbtAccStruct,
     EbtReference,
+    EbtRayQuery,
 
     // HLSL types that live only temporarily.
     EbtString,
@@ -90,11 +92,11 @@
     EvqBuffer,        // read/write, shared with app
     EvqShared,        // compute shader's read/write 'shared' qualifier
 
-    EvqPayloadNV,
-    EvqPayloadInNV,
-    EvqHitAttrNV,
-    EvqCallableDataNV,
-    EvqCallableDataInNV,
+    EvqPayload,
+    EvqPayloadIn,
+    EvqHitAttr,
+    EvqCallableData,
+    EvqCallableDataIn,
 
     // parameters
     EvqIn,            // also, for 'in' in the grammar before we know if it's a pipeline input or an 'in' parameter
@@ -229,6 +231,9 @@
     EbvFragSizeEXT,
     EbvFragInvocationCountEXT,
 
+    EbvSecondaryFragDataEXT,
+    EbvSecondaryFragColorEXT,
+
     EbvViewportMaskNV,
     EbvSecondaryPositionNV,
     EbvSecondaryViewportMaskNV,
@@ -238,20 +243,23 @@
     EbvFragmentSizeNV,
     EbvInvocationsPerPixelNV,
     // ray tracing
-    EbvLaunchIdNV,
-    EbvLaunchSizeNV,
-    EbvInstanceCustomIndexNV,
-    EbvWorldRayOriginNV,
-    EbvWorldRayDirectionNV,
-    EbvObjectRayOriginNV,
-    EbvObjectRayDirectionNV,
-    EbvRayTminNV,
-    EbvRayTmaxNV,
-    EbvHitTNV,
-    EbvHitKindNV,
-    EbvObjectToWorldNV,
-    EbvWorldToObjectNV,
-    EbvIncomingRayFlagsNV,
+    EbvLaunchId,
+    EbvLaunchSize,
+    EbvInstanceCustomIndex,
+    EbvGeometryIndex,
+    EbvWorldRayOrigin,
+    EbvWorldRayDirection,
+    EbvObjectRayOrigin,
+    EbvObjectRayDirection,
+    EbvRayTmin,
+    EbvRayTmax,
+    EbvHitT,
+    EbvHitKind,
+    EbvObjectToWorld,
+    EbvObjectToWorld3x4,
+    EbvWorldToObject,
+    EbvWorldToObject3x4,
+    EbvIncomingRayFlags,
     // barycentrics
     EbvBaryCoordNV,
     EbvBaryCoordNoPerspNV,
@@ -328,11 +336,11 @@
     case EvqPointCoord:     return "gl_PointCoord";  break;
     case EvqFragColor:      return "fragColor";      break;
     case EvqFragDepth:      return "gl_FragDepth";   break;
-    case EvqPayloadNV:        return "rayPayloadNV";     break;
-    case EvqPayloadInNV:      return "rayPayloadInNV";   break;
-    case EvqHitAttrNV:        return "hitAttributeNV";   break;
-    case EvqCallableDataNV:   return "callableDataNV";   break;
-    case EvqCallableDataInNV: return "callableDataInNV"; break;
+    case EvqPayload:        return "rayPayloadNV";     break;
+    case EvqPayloadIn:      return "rayPayloadInNV";   break;
+    case EvqHitAttr:        return "hitAttributeNV";   break;
+    case EvqCallableData:   return "callableDataNV";   break;
+    case EvqCallableDataIn: return "callableDataInNV"; break;
     default:                return "unknown qualifier";
     }
 }
@@ -428,6 +436,9 @@
     case EbvFragSizeEXT:                return "FragSizeEXT";
     case EbvFragInvocationCountEXT:     return "FragInvocationCountEXT";
 
+    case EbvSecondaryFragDataEXT:       return "SecondaryFragDataEXT";
+    case EbvSecondaryFragColorEXT:      return "SecondaryFragColorEXT";
+
     case EbvViewportMaskNV:             return "ViewportMaskNV";
     case EbvSecondaryPositionNV:        return "SecondaryPositionNV";
     case EbvSecondaryViewportMaskNV:    return "SecondaryViewportMaskNV";
@@ -436,20 +447,21 @@
     case EbvFragFullyCoveredNV:         return "FragFullyCoveredNV";
     case EbvFragmentSizeNV:             return "FragmentSizeNV";
     case EbvInvocationsPerPixelNV:      return "InvocationsPerPixelNV";
-    case EbvLaunchIdNV:                 return "LaunchIdNV";
-    case EbvLaunchSizeNV:               return "LaunchSizeNV";
-    case EbvInstanceCustomIndexNV:      return "InstanceCustomIndexNV";
-    case EbvWorldRayOriginNV:           return "WorldRayOriginNV";
-    case EbvWorldRayDirectionNV:        return "WorldRayDirectionNV";
-    case EbvObjectRayOriginNV:          return "ObjectRayOriginNV";
-    case EbvObjectRayDirectionNV:       return "ObjectRayDirectionNV";
-    case EbvRayTminNV:                  return "ObjectRayTminNV";
-    case EbvRayTmaxNV:                  return "ObjectRayTmaxNV";
-    case EbvHitTNV:                     return "HitTNV";
-    case EbvHitKindNV:                  return "HitKindNV";
-    case EbvIncomingRayFlagsNV:         return "IncomingRayFlagsNV";
-    case EbvObjectToWorldNV:            return "ObjectToWorldNV";
-    case EbvWorldToObjectNV:            return "WorldToObjectNV";
+    case EbvLaunchId:                   return "LaunchIdNV";
+    case EbvLaunchSize:                 return "LaunchSizeNV";
+    case EbvInstanceCustomIndex:        return "InstanceCustomIndexNV";
+    case EbvGeometryIndex:              return "GeometryIndexEXT";
+    case EbvWorldRayOrigin:             return "WorldRayOriginNV";
+    case EbvWorldRayDirection:          return "WorldRayDirectionNV";
+    case EbvObjectRayOrigin:            return "ObjectRayOriginNV";
+    case EbvObjectRayDirection:         return "ObjectRayDirectionNV";
+    case EbvRayTmin:                    return "ObjectRayTminNV";
+    case EbvRayTmax:                    return "ObjectRayTmaxNV";
+    case EbvHitT:                       return "HitTNV";
+    case EbvHitKind:                    return "HitKindNV";
+    case EbvIncomingRayFlags:           return "IncomingRayFlagsNV";
+    case EbvObjectToWorld:              return "ObjectToWorldNV";
+    case EbvWorldToObject:              return "WorldToObjectNV";
 
     case EbvBaryCoordNV:                return "BaryCoordNV";
     case EbvBaryCoordNoPerspNV:         return "BaryCoordNoPerspNV";
diff --git a/glslang/Include/ConstantUnion.h b/glslang/Include/ConstantUnion.h
index 76b2d9c..c4ffb85 100644
--- a/glslang/Include/ConstantUnion.h
+++ b/glslang/Include/ConstantUnion.h
@@ -921,7 +921,7 @@
         else
             unionArray =  new TConstUnionVector(size);
     }
-    TConstUnionArray(const TConstUnionArray& a) : unionArray(a.unionArray) { }
+    TConstUnionArray(const TConstUnionArray& a) = default;
     TConstUnionArray(const TConstUnionArray& a, int start, int size)
     {
         unionArray = new TConstUnionVector(size);
diff --git a/glslang/Include/PoolAlloc.h b/glslang/Include/PoolAlloc.h
index 0e237a6..b8eccb8 100644
--- a/glslang/Include/PoolAlloc.h
+++ b/glslang/Include/PoolAlloc.h
@@ -304,7 +304,6 @@
     size_type max_size() const { return static_cast<size_type>(-1) / sizeof(T); }
     size_type max_size(int size) const { return static_cast<size_type>(-1) / size; }
 
-    void setAllocator(TPoolAllocator* a) { allocator = *a; }
     TPoolAllocator& getAllocator() const { return allocator; }
 
 protected:
diff --git a/glslang/Include/ResourceLimits.h b/glslang/Include/ResourceLimits.h
index 106b21d..b670cf1 100644
--- a/glslang/Include/ResourceLimits.h
+++ b/glslang/Include/ResourceLimits.h
@@ -142,6 +142,7 @@
     int maxTaskWorkGroupSizeY_NV;
     int maxTaskWorkGroupSizeZ_NV;
     int maxMeshViewCountNV;
+    int maxDualSourceDrawBuffersEXT;
 
     TLimits limits;
 };
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index 9961c94..b2c416d 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -3,6 +3,7 @@
 // Copyright (C) 2012-2016 LunarG, Inc.
 // Copyright (C) 2015-2016 Google, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -79,25 +80,7 @@
     bool         ms : 1;
     bool      image : 1;  // image, combined should be false
     bool   combined : 1;  // true means texture is combined with a sampler, false means texture with no sampler
-#ifdef ENABLE_HLSL
-    unsigned int vectorSize : 3;  // vector return type size.
-    unsigned int getVectorSize() const { return vectorSize; }
-    void clearReturnStruct() { structReturnIndex = noReturnStruct; }
-    bool hasReturnStruct() const { return structReturnIndex != noReturnStruct; }
-    unsigned getStructReturnIndex() const { return structReturnIndex; }
-
-    static const unsigned structReturnIndexBits = 4;                        // number of index bits to use.
-    static const unsigned structReturnSlots = (1<<structReturnIndexBits)-1; // number of valid values
-    static const unsigned noReturnStruct = structReturnSlots;               // value if no return struct type.
-
-    // Index into a language specific table of texture return structures.
-    unsigned int structReturnIndex : structReturnIndexBits;
-#else
-    unsigned int getVectorSize() const { return 4; }
-    void clearReturnStruct() const { }
-    bool hasReturnStruct() const { return false; }
-    unsigned getStructReturnIndex() const { return 0; }
-#endif
+    bool    sampler : 1;  // true means a pure sampler, other fields should be clear()
 
 #ifdef GLSLANG_WEB
     bool is1D()          const { return false; }
@@ -105,8 +88,6 @@
     bool isRect()        const { return false; }
     bool isSubpass()     const { return false; }
     bool isCombined()    const { return true; }
-    bool isPureSampler() const { return false; }
-    bool isTexture()     const { return false; }
     bool isImage()       const { return false; }
     bool isImageClass()  const { return false; }
     bool isMultiSample() const { return false; }
@@ -114,19 +95,30 @@
     void setExternal(bool e) { }
     bool isYuv()         const { return false; }
 #else
-    bool    sampler : 1;  // true means a pure sampler, other fields should be clear()
-    bool   external : 1;  // GL_OES_EGL_image_external
-    bool        yuv : 1;  // GL_EXT_YUV_target
+    unsigned int vectorSize : 3;  // vector return type size.
     // Some languages support structures as sample results.  Storing the whole structure in the
     // TSampler is too large, so there is an index to a separate table.
+    static const unsigned structReturnIndexBits = 4;                        // number of index bits to use.
+    static const unsigned structReturnSlots = (1<<structReturnIndexBits)-1; // number of valid values
+    static const unsigned noReturnStruct = structReturnSlots;               // value if no return struct type.
+    // Index into a language specific table of texture return structures.
+    unsigned int structReturnIndex : structReturnIndexBits;
+
+    bool   external : 1;  // GL_OES_EGL_image_external
+    bool        yuv : 1;  // GL_EXT_YUV_target
+
+#ifdef ENABLE_HLSL
+    unsigned int getVectorSize() const { return vectorSize; }
+    void clearReturnStruct() { structReturnIndex = noReturnStruct; }
+    bool hasReturnStruct() const { return structReturnIndex != noReturnStruct; }
+    unsigned getStructReturnIndex() const { return structReturnIndex; }
+#endif
 
     bool is1D()          const { return dim == Esd1D; }
     bool isBuffer()      const { return dim == EsdBuffer; }
     bool isRect()        const { return dim == EsdRect; }
     bool isSubpass()     const { return dim == EsdSubpass; }
     bool isCombined()    const { return combined; }
-    bool isPureSampler() const { return sampler; }
-    bool isTexture()     const { return !sampler && !image; }
     bool isImage()       const { return image && !isSubpass(); }
     bool isImageClass()  const { return image; }
     bool isMultiSample() const { return ms; }
@@ -134,7 +126,12 @@
     void setExternal(bool e) { external = e; }
     bool isYuv()         const { return yuv; }
 #endif
+    bool isTexture()     const { return !sampler && !image; }
+    bool isPureSampler() const { return sampler; }
+
     void setCombined(bool c) { combined = c; }
+    void setBasicType(TBasicType t) { type = t; }
+    TBasicType getBasicType()  const { return type; }
     bool isShadow()      const { return shadow; }
     bool isArrayed()     const { return arrayed; }
 
@@ -147,8 +144,8 @@
         ms = false;
         image = false;
         combined = false;
-#ifndef GLSLANG_WEB
         sampler = false;
+#ifndef GLSLANG_WEB
         external = false;
         yuv = false;
 #endif
@@ -195,6 +192,14 @@
         ms = m;
     }
 
+    // make a pure sampler, no texture, no image, nothing combined, the 'sampler' keyword
+    void setPureSampler(bool s)
+    {
+        clear();
+        sampler = true;
+        shadow = s;
+    }
+
 #ifndef GLSLANG_WEB
     // make a subpass input attachment
     void setSubpass(TBasicType t, bool m = false)
@@ -205,14 +210,6 @@
         dim = EsdSubpass;
         ms = m;
     }
-
-    // make a pure sampler, no texture, no image, nothing combined, the 'sampler' keyword
-    void setPureSampler(bool s)
-    {
-        clear();
-        sampler = true;
-        shadow = s;
-    }
 #endif
 
     bool operator==(const TSampler& right) const
@@ -226,9 +223,12 @@
             isCombined() == right.isCombined() &&
          isPureSampler() == right.isPureSampler() &&
             isExternal() == right.isExternal() &&
-                 isYuv() == right.isYuv() &&
-         getVectorSize() == right.getVectorSize() &&
-  getStructReturnIndex() == right.getStructReturnIndex();
+                 isYuv() == right.isYuv()
+#ifdef ENABLE_HLSL
+      && getVectorSize() == right.getVectorSize() &&
+  getStructReturnIndex() == right.getStructReturnIndex()
+#endif
+        ;
     }
 
     bool operator!=(const TSampler& right) const
@@ -473,6 +473,18 @@
     EioCount,
 };
 
+enum TShaderInterface
+{
+    // Includes both uniform blocks and buffer blocks
+    EsiUniform = 0,
+    EsiInput,
+    EsiOutput,
+    EsiNone,
+
+    EsiCount
+};
+
+
 class TQualifier {
 public:
     static const int layoutNotSet = -1;
@@ -527,16 +539,19 @@
 
     void clearMemory()
     {
+#ifndef GLSLANG_WEB
         coherent     = false;
         devicecoherent = false;
         queuefamilycoherent = false;
         workgroupcoherent = false;
         subgroupcoherent  = false;
+        shadercallcoherent = false;
         nonprivate = false;
         volatil      = false;
         restrict     = false;
         readonly     = false;
         writeonly    = false;
+#endif
     }
 
     const char*         semanticName;
@@ -549,23 +564,17 @@
     bool centroid     : 1;
     bool smooth       : 1;
     bool flat         : 1;
-    bool coherent     : 1;
-    bool devicecoherent : 1;
-    bool queuefamilycoherent : 1;
-    bool workgroupcoherent : 1;
-    bool subgroupcoherent  : 1;
-    bool nonprivate   : 1;
-    bool volatil      : 1;
-    bool restrict     : 1;
-    bool readonly     : 1;
-    bool writeonly    : 1;
     // having a constant_id is not sufficient: expressions have no id, but are still specConstant
     bool specConstant : 1;
     bool nonUniform   : 1;
+    bool explicitOffset   : 1;
 
 #ifdef GLSLANG_WEB
     bool isWriteOnly() const { return false; }
     bool isReadOnly() const { return false; }
+    bool isRestrict() const { return false; }
+    bool isCoherent() const { return false; }
+    bool isVolatile() const { return false; }
     bool isSample() const { return false; }
     bool isMemory() const { return false; }
     bool isMemoryQualifierImageAndSSBOOnly() const { return false; }
@@ -587,16 +596,30 @@
     bool perTaskNV : 1;
     bool patch        : 1;
     bool sample       : 1;
+    bool restrict     : 1;
+    bool readonly     : 1;
+    bool writeonly    : 1;
+    bool coherent     : 1;
+    bool volatil      : 1;
+    bool devicecoherent : 1;
+    bool queuefamilycoherent : 1;
+    bool workgroupcoherent : 1;
+    bool subgroupcoherent  : 1;
+    bool shadercallcoherent : 1;
+    bool nonprivate   : 1;
     bool isWriteOnly() const { return writeonly; }
     bool isReadOnly() const { return readonly; }
+    bool isRestrict() const { return restrict; }
+    bool isCoherent() const { return coherent; }
+    bool isVolatile() const { return volatil; }
     bool isSample() const { return sample; }
     bool isMemory() const
     {
-        return subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly || nonprivate;
+        return shadercallcoherent || subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly || nonprivate;
     }
     bool isMemoryQualifierImageAndSSBOOnly() const
     {
-        return subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly;
+        return shadercallcoherent || subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly;
     }
     bool bufferReferenceNeedsVulkanMemoryModel() const
     {
@@ -766,7 +789,7 @@
         layoutViewportRelative = false;
         // -2048 as the default value indicating layoutSecondaryViewportRelative is not set
         layoutSecondaryViewportRelativeOffset = -2048;
-        layoutShaderRecordNV = false;
+        layoutShaderRecord = false;
         layoutBufferReferenceAlign = layoutBufferReferenceAlignEnd;
         layoutFormat = ElfNone;
 #endif
@@ -779,8 +802,8 @@
     {
         layoutLocation = layoutLocationEnd;
         layoutComponent = layoutComponentEnd;
-        layoutIndex = layoutIndexEnd;
 #ifndef GLSLANG_WEB
+        layoutIndex = layoutIndexEnd;
         clearStreamLayout();
         clearXfbLayout();
 #endif
@@ -805,7 +828,7 @@
                hasAnyLocation() ||
                hasStream() ||
                hasFormat() ||
-               isShaderRecordNV() ||
+               isShaderRecord() ||
                isPushConstant() ||
                hasBufferReference();
     }
@@ -864,7 +887,7 @@
     bool layoutPassthrough;
     bool layoutViewportRelative;
     int layoutSecondaryViewportRelativeOffset;
-    bool layoutShaderRecordNV;
+    bool layoutShaderRecord;
 #endif
 
     bool hasUniformLayout() const
@@ -885,7 +908,9 @@
 
         layoutSet = layoutSetEnd;
         layoutBinding = layoutBindingEnd;
+#ifndef GLSLANG_WEB
         layoutAttachment = layoutAttachmentEnd;
+#endif
     }
 
     bool hasMatrix() const
@@ -922,6 +947,7 @@
     bool hasOffset() const { return false; }
     bool isNonPerspective() const { return false; }
     bool hasIndex() const { return false; }
+    unsigned getIndex() const { return 0; }
     bool hasComponent() const { return false; }
     bool hasStream() const { return false; }
     bool hasFormat() const { return false; }
@@ -932,7 +958,7 @@
     bool hasAttachment() const { return false; }
     TLayoutFormat getFormat() const { return ElfNone; }
     bool isPushConstant() const { return false; }
-    bool isShaderRecordNV() const { return false; }
+    bool isShaderRecord() const { return false; }
     bool hasBufferReference() const { return false; }
     bool hasBufferReferenceAlign() const { return false; }
     bool isNonUniform() const { return false; }
@@ -946,6 +972,7 @@
     {
         return layoutIndex != layoutIndexEnd;
     }
+    unsigned getIndex() const { return layoutIndex; }
     bool hasComponent() const
     {
         return layoutComponent != layoutComponentEnd;
@@ -982,7 +1009,7 @@
     }
     TLayoutFormat getFormat() const { return layoutFormat; }
     bool isPushConstant() const { return layoutPushConstant; }
-    bool isShaderRecordNV() const { return layoutShaderRecordNV; }
+    bool isShaderRecord() const { return layoutShaderRecord; }
     bool hasBufferReference() const { return layoutBufferReference; }
     bool hasBufferReferenceAlign() const
     {
@@ -1601,6 +1628,23 @@
         assert(fieldName);
         return *fieldName;
     }
+    TShaderInterface getShaderInterface() const
+    {
+        if (basicType != EbtBlock)
+            return EsiNone;
+
+        switch (qualifier.storage) {
+        default:
+            return EsiNone;
+        case EvqVaryingIn:
+            return EsiInput;
+        case EvqVaryingOut:
+            return EsiOutput;
+        case EvqUniform:
+        case EvqBuffer:
+            return EsiUniform;
+        }
+    }
 
     virtual TBasicType getBasicType() const { return basicType; }
     virtual const TSampler& getSampler() const { return sampler; }
@@ -1659,7 +1703,7 @@
     }
     virtual bool isOpaque() const { return basicType == EbtSampler
 #ifndef GLSLANG_WEB
-         || basicType == EbtAtomicUint || basicType == EbtAccStructNV
+         || basicType == EbtAtomicUint || basicType == EbtAccStruct || basicType == EbtRayQuery
 #endif
         ; }
     virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; }
@@ -1920,6 +1964,7 @@
         case EbtFloat:             return "float";
         case EbtInt:               return "int";
         case EbtUint:              return "uint";
+        case EbtSampler:           return "sampler/image";
 #ifndef GLSLANG_WEB
         case EbtVoid:              return "void";
         case EbtDouble:            return "double";
@@ -1932,10 +1977,10 @@
         case EbtUint64:            return "uint64_t";
         case EbtBool:              return "bool";
         case EbtAtomicUint:        return "atomic_uint";
-        case EbtSampler:           return "sampler/image";
         case EbtStruct:            return "structure";
         case EbtBlock:             return "block";
-        case EbtAccStructNV:       return "accelerationStructureNV";
+        case EbtAccStruct:         return "accelerationStructureNV";
+        case EbtRayQuery:          return "rayQueryEXT";
         case EbtReference:         return "reference";
 #endif
         default:                   return "unknown type";
@@ -2045,7 +2090,7 @@
                     appendStr(" layoutSecondaryViewportRelativeOffset=");
                     appendInt(qualifier.layoutSecondaryViewportRelativeOffset);
                 }
-                if (qualifier.layoutShaderRecordNV)
+                if (qualifier.layoutShaderRecord)
                     appendStr(" shaderRecordNV");
 
                 appendStr(")");
@@ -2088,6 +2133,8 @@
             appendStr(" workgroupcoherent");
         if (qualifier.subgroupcoherent)
             appendStr(" subgroupcoherent");
+        if (qualifier.shadercallcoherent)
+            appendStr(" shadercallcoherent");
         if (qualifier.nonprivate)
             appendStr(" nonprivate");
         if (qualifier.volatil)
@@ -2193,7 +2240,8 @@
     const TTypeList* getStruct() const { assert(isStruct()); return structure; }
     void setStruct(TTypeList* s) { assert(isStruct()); structure = s; }
     TTypeList* getWritableStruct() const { assert(isStruct()); return structure; }  // This should only be used when known to not be sharing with other threads
-
+    void setBasicType(const TBasicType& t) { basicType = t; }
+    
     int computeNumComponents() const
     {
         int components = 0;
diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h
new file mode 100644
index 0000000..50e95b7
--- /dev/null
+++ b/glslang/Include/glslang_c_interface.h
@@ -0,0 +1,233 @@
+/**
+    This code is based on the glslang_c_interface implementation by Viktor Latypov
+**/
+
+/**
+BSD 2-Clause License
+
+Copyright (c) 2019, Viktor Latypov
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+2. 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.
+
+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 HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+
+#ifndef GLSLANG_C_IFACE_H_INCLUDED
+#define GLSLANG_C_IFACE_H_INCLUDED
+
+#include <stdbool.h>
+#include <stdlib.h>
+
+#include "glslang_c_shader_types.h"
+
+typedef struct glslang_shader_s glslang_shader_t;
+typedef struct glslang_program_s glslang_program_t;
+
+/* TLimits counterpart */
+typedef struct glslang_limits_s {
+    bool non_inductive_for_loops;
+    bool while_loops;
+    bool do_while_loops;
+    bool general_uniform_indexing;
+    bool general_attribute_matrix_vector_indexing;
+    bool general_varying_indexing;
+    bool general_sampler_indexing;
+    bool general_variable_indexing;
+    bool general_constant_matrix_vector_indexing;
+} glslang_limits_t;
+
+/* TBuiltInResource counterpart */
+typedef struct glslang_resource_s {
+    int max_lights;
+    int max_clip_planes;
+    int max_texture_units;
+    int max_texture_coords;
+    int max_vertex_attribs;
+    int max_vertex_uniform_components;
+    int max_varying_floats;
+    int max_vertex_texture_image_units;
+    int max_combined_texture_image_units;
+    int max_texture_image_units;
+    int max_fragment_uniform_components;
+    int max_draw_buffers;
+    int max_vertex_uniform_vectors;
+    int max_varying_vectors;
+    int max_fragment_uniform_vectors;
+    int max_vertex_output_vectors;
+    int max_fragment_input_vectors;
+    int min_program_texel_offset;
+    int max_program_texel_offset;
+    int max_clip_distances;
+    int max_compute_work_group_count_x;
+    int max_compute_work_group_count_y;
+    int max_compute_work_group_count_z;
+    int max_compute_work_group_size_x;
+    int max_compute_work_group_size_y;
+    int max_compute_work_group_size_z;
+    int max_compute_uniform_components;
+    int max_compute_texture_image_units;
+    int max_compute_image_uniforms;
+    int max_compute_atomic_counters;
+    int max_compute_atomic_counter_buffers;
+    int max_varying_components;
+    int max_vertex_output_components;
+    int max_geometry_input_components;
+    int max_geometry_output_components;
+    int max_fragment_input_components;
+    int max_image_units;
+    int max_combined_image_units_and_fragment_outputs;
+    int max_combined_shader_output_resources;
+    int max_image_samples;
+    int max_vertex_image_uniforms;
+    int max_tess_control_image_uniforms;
+    int max_tess_evaluation_image_uniforms;
+    int max_geometry_image_uniforms;
+    int max_fragment_image_uniforms;
+    int max_combined_image_uniforms;
+    int max_geometry_texture_image_units;
+    int max_geometry_output_vertices;
+    int max_geometry_total_output_components;
+    int max_geometry_uniform_components;
+    int max_geometry_varying_components;
+    int max_tess_control_input_components;
+    int max_tess_control_output_components;
+    int max_tess_control_texture_image_units;
+    int max_tess_control_uniform_components;
+    int max_tess_control_total_output_components;
+    int max_tess_evaluation_input_components;
+    int max_tess_evaluation_output_components;
+    int max_tess_evaluation_texture_image_units;
+    int max_tess_evaluation_uniform_components;
+    int max_tess_patch_components;
+    int max_patch_vertices;
+    int max_tess_gen_level;
+    int max_viewports;
+    int max_vertex_atomic_counters;
+    int max_tess_control_atomic_counters;
+    int max_tess_evaluation_atomic_counters;
+    int max_geometry_atomic_counters;
+    int max_fragment_atomic_counters;
+    int max_combined_atomic_counters;
+    int max_atomic_counter_bindings;
+    int max_vertex_atomic_counter_buffers;
+    int max_tess_control_atomic_counter_buffers;
+    int max_tess_evaluation_atomic_counter_buffers;
+    int max_geometry_atomic_counter_buffers;
+    int max_fragment_atomic_counter_buffers;
+    int max_combined_atomic_counter_buffers;
+    int max_atomic_counter_buffer_size;
+    int max_transform_feedback_buffers;
+    int max_transform_feedback_interleaved_components;
+    int max_cull_distances;
+    int max_combined_clip_and_cull_distances;
+    int max_samples;
+    int max_mesh_output_vertices_nv;
+    int max_mesh_output_primitives_nv;
+    int max_mesh_work_group_size_x_nv;
+    int max_mesh_work_group_size_y_nv;
+    int max_mesh_work_group_size_z_nv;
+    int max_task_work_group_size_x_nv;
+    int max_task_work_group_size_y_nv;
+    int max_task_work_group_size_z_nv;
+    int max_mesh_view_count_nv;
+    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 */
+    const char* header_name;
+
+    /* Header contents or NULL */
+    const char* header_data;
+    size_t header_length;
+
+} glsl_include_result_t;
+
+/* Callback for local file inclusion */
+typedef glsl_include_result_t* (*glsl_include_local_func)(void* ctx, const char* header_name, const char* includer_name,
+                                                          size_t include_depth);
+
+/* Callback for system file inclusion */
+typedef glsl_include_result_t* (*glsl_include_system_func)(void* ctx, const char* header_name,
+                                                           const char* includer_name, size_t include_depth);
+
+/* Callback for include result destruction */
+typedef int (*glsl_free_include_result_func)(void* ctx, glsl_include_result_t* result);
+
+/* Collection of callbacks for GLSL preprocessor */
+typedef struct glsl_include_callbacks_s {
+    glsl_include_system_func include_system;
+    glsl_include_local_func include_local;
+    glsl_free_include_result_func free_include_result;
+} glsl_include_callbacks_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int glslang_initialize_process();
+void glslang_finalize_process();
+
+glslang_shader_t* glslang_shader_create(const glslang_input_t* input);
+void glslang_shader_delete(glslang_shader_t* shader);
+int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input);
+int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input);
+const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader);
+const char* glslang_shader_get_info_log(glslang_shader_t* shader);
+const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader);
+
+glslang_program_t* glslang_program_create();
+void glslang_program_delete(glslang_program_t* program);
+void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader);
+int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t
+void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage);
+size_t glslang_program_SPIRV_get_size(glslang_program_t* program);
+void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*);
+unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program);
+const char* glslang_program_SPIRV_get_messages(glslang_program_t* program);
+const char* glslang_program_get_info_log(glslang_program_t* program);
+const char* glslang_program_get_info_debug_log(glslang_program_t* program);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifdef GLSLANG_C_IFACE_INCLUDED */
diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h
new file mode 100644
index 0000000..769f4c4
--- /dev/null
+++ b/glslang/Include/glslang_c_shader_types.h
@@ -0,0 +1,182 @@
+/**
+    This code is based on the glslang_c_interface implementation by Viktor Latypov
+**/
+
+/**
+BSD 2-Clause License
+
+Copyright (c) 2019, Viktor Latypov
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+2. 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.
+
+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 HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+
+#ifndef C_SHADER_TYPES_H_INCLUDED
+#define C_SHADER_TYPES_H_INCLUDED
+
+#define LAST_ELEMENT_MARKER(x) x
+
+/* EShLanguage counterpart */
+typedef enum {
+    GLSLANG_STAGE_VERTEX,
+    GLSLANG_STAGE_TESSCONTROL,
+    GLSLANG_STAGE_TESSEVALUATION,
+    GLSLANG_STAGE_GEOMETRY,
+    GLSLANG_STAGE_FRAGMENT,
+    GLSLANG_STAGE_COMPUTE,
+    GLSLANG_STAGE_RAYGEN_NV,
+    GLSLANG_STAGE_INTERSECT_NV,
+    GLSLANG_STAGE_ANYHIT_NV,
+    GLSLANG_STAGE_CLOSESTHIT_NV,
+    GLSLANG_STAGE_MISS_NV,
+    GLSLANG_STAGE_CALLABLE_NV,
+    GLSLANG_STAGE_TASK_NV,
+    GLSLANG_STAGE_MESH_NV,
+    LAST_ELEMENT_MARKER(GLSLANG_STAGE_COUNT),
+} glslang_stage_t; // would be better as stage, but this is ancient now
+
+/* EShLanguageMask counterpart */
+typedef enum {
+    GLSLANG_STAGE_VERTEX_MASK = (1 << GLSLANG_STAGE_VERTEX),
+    GLSLANG_STAGE_TESSCONTROL_MASK = (1 << GLSLANG_STAGE_TESSCONTROL),
+    GLSLANG_STAGE_TESSEVALUATION_MASK = (1 << GLSLANG_STAGE_TESSEVALUATION),
+    GLSLANG_STAGE_GEOMETRY_MASK = (1 << GLSLANG_STAGE_GEOMETRY),
+    GLSLANG_STAGE_FRAGMENT_MASK = (1 << GLSLANG_STAGE_FRAGMENT),
+    GLSLANG_STAGE_COMPUTE_MASK = (1 << GLSLANG_STAGE_COMPUTE),
+    GLSLANG_STAGE_RAYGEN_NV_MASK = (1 << GLSLANG_STAGE_RAYGEN_NV),
+    GLSLANG_STAGE_INTERSECT_NV_MASK = (1 << GLSLANG_STAGE_INTERSECT_NV),
+    GLSLANG_STAGE_ANYHIT_NV_MASK = (1 << GLSLANG_STAGE_ANYHIT_NV),
+    GLSLANG_STAGE_CLOSESTHIT_NV_MASK = (1 << GLSLANG_STAGE_CLOSESTHIT_NV),
+    GLSLANG_STAGE_MISS_NV_MASK = (1 << GLSLANG_STAGE_MISS_NV),
+    GLSLANG_STAGE_CALLABLE_NV_MASK = (1 << GLSLANG_STAGE_CALLABLE_NV),
+    GLSLANG_STAGE_TASK_NV_MASK = (1 << GLSLANG_STAGE_TASK_NV),
+    GLSLANG_STAGE_MESH_NV_MASK = (1 << GLSLANG_STAGE_MESH_NV),
+    LAST_ELEMENT_MARKER(GLSLANG_STAGE_MASK_COUNT),
+} glslang_stage_mask_t;
+
+/* EShSource counterpart */
+typedef enum {
+    GLSLANG_SOURCE_NONE,
+    GLSLANG_SOURCE_GLSL,
+    GLSLANG_SOURCE_HLSL,
+    LAST_ELEMENT_MARKER(GLSLANG_SOURCE_COUNT),
+} glslang_source_t;
+
+/* EShClient counterpart */
+typedef enum {
+    GLSLANG_CLIENT_NONE,
+    GLSLANG_CLIENT_VULKAN,
+    GLSLANG_CLIENT_OPENGL,
+    LAST_ELEMENT_MARKER(GLSLANG_CLIENT_COUNT),
+} glslang_client_t;
+
+/* EShTargetLanguage counterpart */
+typedef enum {
+    GLSLANG_TARGET_NONE,
+    GLSLANG_TARGET_SPV,
+    LAST_ELEMENT_MARKER(GLSLANG_TARGET_COUNT),
+} glslang_target_language_t;
+
+/* SH_TARGET_ClientVersion counterpart */
+typedef enum {
+    GLSLANG_TARGET_VULKAN_1_0 = (1 << 22),
+    GLSLANG_TARGET_VULKAN_1_1 = (1 << 22) | (1 << 12),
+    GLSLANG_TARGET_OPENGL_450 = 450,
+    LAST_ELEMENT_MARKER(GLSLANG_TARGET_CLIENT_VERSION_COUNT),
+} glslang_target_client_version_t;
+
+/* SH_TARGET_LanguageVersion counterpart */
+typedef enum {
+    GLSLANG_TARGET_SPV_1_0 = (1 << 16),
+    GLSLANG_TARGET_SPV_1_1 = (1 << 16) | (1 << 8),
+    GLSLANG_TARGET_SPV_1_2 = (1 << 16) | (2 << 8),
+    GLSLANG_TARGET_SPV_1_3 = (1 << 16) | (3 << 8),
+    GLSLANG_TARGET_SPV_1_4 = (1 << 16) | (4 << 8),
+    GLSLANG_TARGET_SPV_1_5 = (1 << 16) | (5 << 8),
+    LAST_ELEMENT_MARKER(GLSLANG_TARGET_LANGUAGE_VERSION_COUNT),
+} glslang_target_language_version_t;
+
+/* EShExecutable counterpart */
+typedef enum { GLSLANG_EX_VERTEX_FRAGMENT, GLSLANG_EX_FRAGMENT } glslang_executable_t;
+
+/* EShOptimizationLevel counterpart  */
+typedef enum {
+    GLSLANG_OPT_NO_GENERATION,
+    GLSLANG_OPT_NONE,
+    GLSLANG_OPT_SIMPLE,
+    GLSLANG_OPT_FULL,
+    LAST_ELEMENT_MARKER(GLSLANG_OPT_LEVEL_COUNT),
+} glslang_optimization_level_t;
+
+/* EShTextureSamplerTransformMode counterpart */
+typedef enum {
+    GLSLANG_TEX_SAMP_TRANS_KEEP,
+    GLSLANG_TEX_SAMP_TRANS_UPGRADE_TEXTURE_REMOVE_SAMPLER,
+    LAST_ELEMENT_MARKER(GLSLANG_TEX_SAMP_TRANS_COUNT),
+} glslang_texture_sampler_transform_mode_t;
+
+/* EShMessages counterpart */
+typedef enum {
+    GLSLANG_MSG_DEFAULT_BIT = 0,
+    GLSLANG_MSG_RELAXED_ERRORS_BIT = (1 << 0),
+    GLSLANG_MSG_SUPPRESS_WARNINGS_BIT = (1 << 1),
+    GLSLANG_MSG_AST_BIT = (1 << 2),
+    GLSLANG_MSG_SPV_RULES_BIT = (1 << 3),
+    GLSLANG_MSG_VULKAN_RULES_BIT = (1 << 4),
+    GLSLANG_MSG_ONLY_PREPROCESSOR_BIT = (1 << 5),
+    GLSLANG_MSG_READ_HLSL_BIT = (1 << 6),
+    GLSLANG_MSG_CASCADING_ERRORS_BIT = (1 << 7),
+    GLSLANG_MSG_KEEP_UNCALLED_BIT = (1 << 8),
+    GLSLANG_MSG_HLSL_OFFSETS_BIT = (1 << 9),
+    GLSLANG_MSG_DEBUG_INFO_BIT = (1 << 10),
+    GLSLANG_MSG_HLSL_ENABLE_16BIT_TYPES_BIT = (1 << 11),
+    GLSLANG_MSG_HLSL_LEGALIZATION_BIT = (1 << 12),
+    GLSLANG_MSG_HLSL_DX9_COMPATIBLE_BIT = (1 << 13),
+    GLSLANG_MSG_BUILTIN_SYMBOL_TABLE_BIT = (1 << 14),
+    LAST_ELEMENT_MARKER(GLSLANG_MSG_COUNT),
+} glslang_messages_t;
+
+/* EShReflectionOptions counterpart */
+typedef enum {
+    GLSLANG_REFLECTION_DEFAULT_BIT = 0,
+    GLSLANG_REFLECTION_STRICT_ARRAY_SUFFIX_BIT = (1 << 0),
+    GLSLANG_REFLECTION_BASIC_ARRAY_SUFFIX_BIT = (1 << 1),
+    GLSLANG_REFLECTION_INTERMEDIATE_IOO_BIT = (1 << 2),
+    GLSLANG_REFLECTION_SEPARATE_BUFFERS_BIT = (1 << 3),
+    GLSLANG_REFLECTION_ALL_BLOCK_VARIABLES_BIT = (1 << 4),
+    GLSLANG_REFLECTION_UNWRAP_IO_BLOCKS_BIT = (1 << 5),
+    LAST_ELEMENT_MARKER(GLSLANG_REFLECTION_COUNT),
+} glslang_reflection_options_t;
+
+/* EProfile counterpart (from Versions.h) */
+typedef enum {
+    GLSLANG_BAD_PROFILE = 0,
+    GLSLANG_NO_PROFILE = (1 << 0),
+    GLSLANG_CORE_PROFILE = (1 << 1),
+    GLSLANG_COMPATIBILITY_PROFILE = (1 << 2),
+    GLSLANG_ES_PROFILE = (1 << 3),
+    LAST_ELEMENT_MARKER(GLSLANG_PROFILE_COUNT),
+} glslang_profile_t;
+
+#undef LAST_ELEMENT_MARKER
+
+#endif
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index b599a90..bf12fcf 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -621,6 +622,8 @@
 
     EOpIsHelperInvocation,
 
+    EOpDebugPrintf,
+
     //
     // Branch
     //
@@ -899,12 +902,50 @@
     EOpFindLSB,
     EOpFindMSB,
 
-    EOpTraceNV,
-    EOpReportIntersectionNV,
-    EOpIgnoreIntersectionNV,
-    EOpTerminateRayNV,
-    EOpExecuteCallableNV,
+    EOpCountLeadingZeros,
+    EOpCountTrailingZeros,
+    EOpAbsDifference,
+    EOpAddSaturate,
+    EOpSubSaturate,
+    EOpAverage,
+    EOpAverageRounded,
+    EOpMul32x16,
+
+    EOpTrace,
+    EOpReportIntersection,
+    EOpIgnoreIntersection,
+    EOpTerminateRay,
+    EOpExecuteCallable,
     EOpWritePackedPrimitiveIndices4x8NV,
+
+    //
+    // GL_EXT_ray_query operations
+    //
+
+    EOpRayQueryInitialize,
+    EOpRayQueryTerminate,
+    EOpRayQueryGenerateIntersection,
+    EOpRayQueryConfirmIntersection,
+    EOpRayQueryProceed,
+    EOpRayQueryGetIntersectionType,
+    EOpRayQueryGetRayTMin,
+    EOpRayQueryGetRayFlags,
+    EOpRayQueryGetIntersectionT,
+    EOpRayQueryGetIntersectionInstanceCustomIndex,
+    EOpRayQueryGetIntersectionInstanceId,
+    EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset,
+    EOpRayQueryGetIntersectionGeometryIndex,
+    EOpRayQueryGetIntersectionPrimitiveIndex,
+    EOpRayQueryGetIntersectionBarycentrics,
+    EOpRayQueryGetIntersectionFrontFace,
+    EOpRayQueryGetIntersectionCandidateAABBOpaque,
+    EOpRayQueryGetIntersectionObjectRayDirection,
+    EOpRayQueryGetIntersectionObjectRayOrigin,
+    EOpRayQueryGetWorldRayDirection,
+    EOpRayQueryGetWorldRayOrigin,
+    EOpRayQueryGetIntersectionObjectToWorld,
+    EOpRayQueryGetIntersectionWorldToObject,
+
     //
     // HLSL operations
     //
@@ -1189,6 +1230,7 @@
     virtual void traverse(TIntermTraverser*);
     TOperator getFlowOp() const { return flowOp; }
     TIntermTyped* getExpression() const { return expression; }
+    void setExpression(TIntermTyped* pExpression) { expression = pExpression; }
 protected:
     TOperator flowOp;
     TIntermTyped* expression;
@@ -1222,7 +1264,7 @@
     // it is essential to use "symbol = sym" to assign to symbol
     TIntermSymbol(int i, const TString& n, const TType& t)
         : TIntermTyped(t), id(i),
-#ifdef ENABLE_HLSL
+#ifndef GLSLANG_WEB
         flattenSubset(-1),
 #endif
         constSubtree(nullptr)
@@ -1237,7 +1279,7 @@
     const TConstUnionArray& getConstArray() const { return constArray; }
     void setConstSubtree(TIntermTyped* subtree) { constSubtree = subtree; }
     TIntermTyped* getConstSubtree() const { return constSubtree; }
-#ifdef ENABLE_HLSL
+#ifndef GLSLANG_WEB
     void setFlattenSubset(int subset) { flattenSubset = subset; }
     int getFlattenSubset() const { return flattenSubset; } // -1 means full object
 #endif
@@ -1248,7 +1290,7 @@
 
 protected:
     int id;                      // the unique id of the symbol this node represents
-#ifdef ENABLE_HLSL
+#ifndef GLSLANG_WEB
     int flattenSubset;           // how deeply the flattened object rooted at id has been dereferenced
 #endif
     TString name;                // the name of the symbol this node represents
@@ -1309,11 +1351,13 @@
     bool isSparseTexture()  const { return false; }
     bool isImageFootprint() const { return false; }
     bool isSparseImage()    const { return false; }
+    bool isSubgroup()       const { return false; }
 #else
     bool isImage()    const { return op > EOpImageGuardBegin    && op < EOpImageGuardEnd; }
     bool isSparseTexture() const { return op > EOpSparseTextureGuardBegin && op < EOpSparseTextureGuardEnd; }
     bool isImageFootprint() const { return op > EOpImageFootprintGuardBegin && op < EOpImageFootprintGuardEnd; }
     bool isSparseImage()   const { return op == EOpSparseImageLoad; }
+    bool isSubgroup() const { return op > EOpSubgroupGuardStart && op < EOpSubgroupGuardStop; }
 #endif
 
     void setOperationPrecision(TPrecisionQualifier p) { operationPrecision = p; }
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index 06fccdf..744c2fb 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -1,3 +1,3 @@
 // This header is generated by the make-revision script.
 
-#define GLSLANG_PATCH_LEVEL 3381
+#define GLSLANG_PATCH_LEVEL 3743
diff --git a/glslang/Include/revision.template b/glslang/Include/revision.template
index 6c13630..4a16bee 100644
--- a/glslang/Include/revision.template
+++ b/glslang/Include/revision.template
@@ -1,13 +1,13 @@
-// The file revision.h should be updated to the latest version, somehow, on

-// check-in, if glslang has changed.

-//

-// revision.template is the source for revision.h when using SubWCRev as the

-// method of updating revision.h.  You don't have to do it this way, the

-// requirement is only that revision.h gets updated.

-//

-// revision.h is under source control so that not all consumers of glslang

-// source have to figure out how to create revision.h just to get a build

-// going.  However, if it is not updated, it can be a version behind.

-

-#define GLSLANG_REVISION "$WCREV$"

-#define GLSLANG_DATE     "$WCDATE$"

+// The file revision.h should be updated to the latest version, somehow, on
+// check-in, if glslang has changed.
+//
+// revision.template is the source for revision.h when using SubWCRev as the
+// method of updating revision.h.  You don't have to do it this way, the
+// requirement is only that revision.h gets updated.
+//
+// revision.h is under source control so that not all consumers of glslang
+// source have to figure out how to create revision.h just to get a build
+// going.  However, if it is not updated, it can be a version behind.
+
+#define GLSLANG_REVISION "$WCREV$"
+#define GLSLANG_DATE     "$WCDATE$"
diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
index 98c2666..e21cf42 100644
--- a/glslang/MachineIndependent/Constant.cpp
+++ b/glslang/MachineIndependent/Constant.cpp
@@ -2,7 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
-// Copyright (C) 2018 Google, Inc.
+// Copyright (C) 2018-2020 Google, Inc.
 //
 // All rights reserved.
 //
@@ -1012,6 +1012,7 @@
     case EOpMin:
     case EOpMax:
     case EOpMix:
+    case EOpMod:
     case EOpClamp:
     case EOpLessThan:
     case EOpGreaterThan:
@@ -1074,6 +1075,14 @@
             case EOpPow:
                 newConstArray[comp].setDConst(pow(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()));
                 break;
+            case EOpMod:
+            {
+                double arg0 = childConstUnions[0][arg0comp].getDConst();
+                double arg1 = childConstUnions[1][arg1comp].getDConst();
+                double result = arg0 - arg1 * floor(arg0 / arg1);
+                newConstArray[comp].setDConst(result);
+                break;
+            }
             case EOpMin:
                 switch(children[0]->getAsTyped()->getBasicType()) {
                 case EbtFloat16:
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 2344d36..36c35a8 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -1,8 +1,9 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2020 Google, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -85,18 +86,18 @@
 
 enum ArgType {
     // numbers hardcoded to correspond to 'TypeString'; order and value matter
-    TypeB =   1 << 0,  // Boolean
-    TypeF =   1 << 1,  // float 32
-    TypeI =   1 << 2,  // int 32
-    TypeU =   1 << 3,  // uint 32
-    TypeF16 = 1 << 4,  // float 16
-    TypeF64 = 1 << 5,  // float 64
-    TypeI8  = 1 << 6,  // int 8
-    TypeI16 = 1 << 7,  // int 16
-    TypeI64 = 1 << 8,  // int 64
-    TypeU8  = 1 << 9,  // uint 8
-    TypeU16 = 1 << 10, // uint 16
-    TypeU64 = 1 << 11, // uint 64
+    TypeB    = 1 << 0,  // Boolean
+    TypeF    = 1 << 1,  // float 32
+    TypeI    = 1 << 2,  // int 32
+    TypeU    = 1 << 3,  // uint 32
+    TypeF16  = 1 << 4,  // float 16
+    TypeF64  = 1 << 5,  // float 64
+    TypeI8   = 1 << 6,  // int 8
+    TypeI16  = 1 << 7,  // int 16
+    TypeI64  = 1 << 8,  // int 64
+    TypeU8   = 1 << 9,  // uint 8
+    TypeU16  = 1 << 10, // uint 16
+    TypeU64  = 1 << 11, // uint 64
 };
 // Mixtures of the above, to help the function tables
 const ArgType TypeFI  = static_cast<ArgType>(TypeF | TypeI);
@@ -106,27 +107,25 @@
 // The relationships between arguments and return type, whether anything is
 // output, or other unusual situations.
 enum ArgClass {
-    ClassRegular = 0,    // nothing special, just all vector widths with matching return type; traditional arithmetic
-    ClassLS   = 1 << 0,  // the last argument is also held fixed as a (type-matched) scalar while the others cycle
-    ClassXLS  = 1 << 1,  // the last argument is exclusively a (type-matched) scalar while the others cycle
-    ClassLS2  = 1 << 2,  // the last two arguments are held fixed as a (type-matched) scalar while the others cycle
-    ClassFS   = 1 << 3,  // the first argument is held fixed as a (type-matched) scalar while the others cycle
-    ClassFS2  = 1 << 4,  // the first two arguments are held fixed as a (type-matched) scalar while the others cycle
-    ClassLO   = 1 << 5,  // the last argument is an output
-    ClassB    = 1 << 6,  // return type cycles through only bool/bvec, matching vector width of args
-    ClassLB   = 1 << 7,  // last argument cycles through only bool/bvec, matching vector width of args
-    ClassV1   = 1 << 8,  // scalar only
-    ClassFIO  = 1 << 9,  // first argument is inout
-    ClassRS   = 1 << 10, // the return is held scalar as the arguments cycle
-    ClassNS   = 1 << 11, // no scalar prototype
-    ClassCV   = 1 << 12, // first argument is 'coherent volatile'
-    ClassFO   = 1 << 13, // first argument is output
-    ClassV3   = 1 << 14, // vec3 only
+    ClassRegular     = 0,  // nothing special, just all vector widths with matching return type; traditional arithmetic
+    ClassLS     = 1 << 0,  // the last argument is also held fixed as a (type-matched) scalar while the others cycle
+    ClassXLS    = 1 << 1,  // the last argument is exclusively a (type-matched) scalar while the others cycle
+    ClassLS2    = 1 << 2,  // the last two arguments are held fixed as a (type-matched) scalar while the others cycle
+    ClassFS     = 1 << 3,  // the first argument is held fixed as a (type-matched) scalar while the others cycle
+    ClassFS2    = 1 << 4,  // the first two arguments are held fixed as a (type-matched) scalar while the others cycle
+    ClassLO     = 1 << 5,  // the last argument is an output
+    ClassB      = 1 << 6,  // return type cycles through only bool/bvec, matching vector width of args
+    ClassLB     = 1 << 7,  // last argument cycles through only bool/bvec, matching vector width of args
+    ClassV1     = 1 << 8,  // scalar only
+    ClassFIO    = 1 << 9,  // first argument is inout
+    ClassRS     = 1 << 10, // the return is held scalar as the arguments cycle
+    ClassNS     = 1 << 11, // no scalar prototype
+    ClassCV     = 1 << 12, // first argument is 'coherent volatile'
+    ClassFO     = 1 << 13, // first argument is output
+    ClassV3     = 1 << 14, // vec3 only
 };
 // Mixtures of the above, to help the function tables
 const ArgClass ClassV1FIOCV = (ArgClass)(ClassV1 | ClassFIO | ClassCV);
-const ArgClass ClassV1FOCV  = (ArgClass)(ClassV1 | ClassFO  | ClassCV);
-const ArgClass ClassV1CV    = (ArgClass)(ClassV1 | ClassCV);
 const ArgClass ClassBNS     = (ArgClass)(ClassB  | ClassNS);
 const ArgClass ClassRSNS    = (ArgClass)(ClassRS | ClassNS);
 
@@ -153,10 +152,10 @@
                                                   { EBadProfile } };
     const Versioning* Es300Desktop130 = &Es300Desktop130Version[0];
 
-    const Versioning Es310Desktop430Version[] = { { EEsProfile,      0, 310, 0, nullptr },
-                                                  { EDesktopProfile, 0, 430, 0, nullptr },
+    const Versioning Es310Desktop420Version[] = { { EEsProfile,      0, 310, 0, nullptr },
+                                                  { EDesktopProfile, 0, 420, 0, nullptr },
                                                   { EBadProfile } };
-    const Versioning* Es310Desktop430 = &Es310Desktop430Version[0];
+    const Versioning* Es310Desktop420 = &Es310Desktop420Version[0];
 
     const Versioning Es310Desktop450Version[] = { { EEsProfile,      0, 310, 0, nullptr },
                                                   { EDesktopProfile, 0, 450, 0, nullptr },
@@ -256,18 +255,19 @@
     { EOpGreaterThanEqual, "greaterThanEqual", 2,   TypeU,     ClassBNS,     Es300Desktop130 },
     { EOpVectorEqual,      "equal",            2,   TypeU,     ClassBNS,     Es300Desktop130 },
     { EOpVectorNotEqual,   "notEqual",         2,   TypeU,     ClassBNS,     Es300Desktop130 },
+    { EOpAtomicAdd,        "atomicAdd",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
+    { EOpAtomicMin,        "atomicMin",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
+    { EOpAtomicMax,        "atomicMax",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
+    { EOpAtomicAnd,        "atomicAnd",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
+    { EOpAtomicOr,         "atomicOr",         2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
+    { EOpAtomicXor,        "atomicXor",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
+    { EOpAtomicExchange,   "atomicExchange",   2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
+    { EOpAtomicCompSwap,   "atomicCompSwap",   3,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
 #ifndef GLSLANG_WEB
-    { EOpAtomicAdd,        "atomicAdd",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
-    { EOpAtomicMin,        "atomicMin",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
-    { EOpAtomicMax,        "atomicMax",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
-    { EOpAtomicAnd,        "atomicAnd",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
-    { EOpAtomicOr,         "atomicOr",         2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
-    { EOpAtomicXor,        "atomicXor",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
-    { EOpAtomicExchange,   "atomicExchange",   2,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
-    { EOpAtomicCompSwap,   "atomicCompSwap",   3,   TypeIU,    ClassV1FIOCV, Es310Desktop430 },
     { EOpMix,              "mix",              3,   TypeB,     ClassRegular, Es310Desktop450 },
     { EOpMix,              "mix",              3,   TypeIU,    ClassLB,      Es310Desktop450 },
 #endif
+
     { EOpNull }
 };
 
@@ -278,6 +278,59 @@
     { EOpNull }
 };
 
+// For functions declared some other way, but still use the table to relate to operator.
+struct CustomFunction {
+    TOperator op;                 // operator to map the name to
+    const char* name;             // function name
+    const Versioning* versioning; // nullptr means always a valid version
+};
+
+const CustomFunction CustomFunctions[] = {
+    { EOpBarrier,             "barrier",             nullptr },
+    { EOpMemoryBarrierShared, "memoryBarrierShared", nullptr },
+    { EOpGroupMemoryBarrier,  "groupMemoryBarrier",  nullptr },
+    { EOpMemoryBarrier,       "memoryBarrier",       nullptr },
+    { EOpMemoryBarrierBuffer, "memoryBarrierBuffer", nullptr },
+
+    { EOpPackSnorm2x16,       "packSnorm2x16",       nullptr },
+    { EOpUnpackSnorm2x16,     "unpackSnorm2x16",     nullptr },
+    { EOpPackUnorm2x16,       "packUnorm2x16",       nullptr },
+    { EOpUnpackUnorm2x16,     "unpackUnorm2x16",     nullptr },
+    { EOpPackHalf2x16,        "packHalf2x16",        nullptr },
+    { EOpUnpackHalf2x16,      "unpackHalf2x16",      nullptr },
+
+    { EOpMul,                 "matrixCompMult",      nullptr },
+    { EOpOuterProduct,        "outerProduct",        nullptr },
+    { EOpTranspose,           "transpose",           nullptr },
+    { EOpDeterminant,         "determinant",         nullptr },
+    { EOpMatrixInverse,       "inverse",             nullptr },
+    { EOpFloatBitsToInt,      "floatBitsToInt",      nullptr },
+    { EOpFloatBitsToUint,     "floatBitsToUint",     nullptr },
+    { EOpIntBitsToFloat,      "intBitsToFloat",      nullptr },
+    { EOpUintBitsToFloat,     "uintBitsToFloat",     nullptr },
+
+    { EOpTextureQuerySize,      "textureSize",           nullptr },
+    { EOpTextureQueryLod,       "textureQueryLod",       nullptr },
+    { EOpTextureQueryLevels,    "textureQueryLevels",    nullptr },
+    { EOpTextureQuerySamples,   "textureSamples",        nullptr },
+    { EOpTexture,               "texture",               nullptr },
+    { EOpTextureProj,           "textureProj",           nullptr },
+    { EOpTextureLod,            "textureLod",            nullptr },
+    { EOpTextureOffset,         "textureOffset",         nullptr },
+    { EOpTextureFetch,          "texelFetch",            nullptr },
+    { EOpTextureFetchOffset,    "texelFetchOffset",      nullptr },
+    { EOpTextureProjOffset,     "textureProjOffset",     nullptr },
+    { EOpTextureLodOffset,      "textureLodOffset",      nullptr },
+    { EOpTextureProjLod,        "textureProjLod",        nullptr },
+    { EOpTextureProjLodOffset,  "textureProjLodOffset",  nullptr },
+    { EOpTextureGrad,           "textureGrad",           nullptr },
+    { EOpTextureGradOffset,     "textureGradOffset",     nullptr },
+    { EOpTextureProjGrad,       "textureProjGrad",       nullptr },
+    { EOpTextureProjGradOffset, "textureProjGradOffset", nullptr },
+
+    { EOpNull }
+};
+
 // For the given table of functions, add all the indicated prototypes for each
 // one, to be returned in the passed in decls.
 void AddTabledBuiltin(TString& decls, const BuiltInFunction& function)
@@ -331,8 +384,10 @@
                 if (arg == function.numArguments - 1 && (function.classes & ClassLO))
                     decls.append("out ");
                 if (arg == 0) {
+#ifndef GLSLANG_WEB
                     if (function.classes & ClassCV)
                         decls.append("coherent volatile ");
+#endif
                     if (function.classes & ClassFIO)
                         decls.append("inout ");
                     if (function.classes & ClassFO)
@@ -382,9 +437,10 @@
 // Relate a single table of built-ins to their AST operator.
 // This can get called redundantly (especially for the common built-ins, when
 // called once per stage). This is a performance issue only, not a correctness
-// concern.  It is done for quality arising from simplicity, as there are subtlies
+// concern.  It is done for quality arising from simplicity, as there are subtleties
 // to get correct if instead trying to do it surgically.
-void RelateTabledBuiltins(const BuiltInFunction* functions, TSymbolTable& symbolTable)
+template<class FunctionT>
+void RelateTabledBuiltins(const FunctionT* functions, TSymbolTable& symbolTable)
 {
     while (functions->op != EOpNull) {
         symbolTable.relateToOperator(functions->name, functions->op);
@@ -408,10 +464,6 @@
     forEachFunction(commonBuiltins, BaseFunctions);
     forEachFunction(stageBuiltins[EShLangFragment], DerivativeFunctions);
 
-#ifdef GLSLANG_WEB
-    return;
-#endif
-
     if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450))
         forEachFunction(stageBuiltins[EShLangCompute], DerivativeFunctions);
 }
@@ -421,6 +473,7 @@
 {
     RelateTabledBuiltins(BaseFunctions, symbolTable);
     RelateTabledBuiltins(DerivativeFunctions, symbolTable);
+    RelateTabledBuiltins(CustomFunctions, symbolTable);
 }
 
 inline bool IncludeLegacy(int version, EProfile profile, const SpvVersion& spvVersion)
@@ -465,7 +518,7 @@
     dimMap[Esd1D] = 1;
     dimMap[EsdRect] = 2;
     dimMap[EsdBuffer] = 1;
-    dimMap[EsdSubpass] = 2;  // potientially unused for now
+    dimMap[EsdSubpass] = 2;  // potentially unused for now
 #endif
 }
 
@@ -484,6 +537,10 @@
 //
 void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvVersion)
 {
+#ifdef GLSLANG_WEB
+    version = 310;
+    profile = EEsProfile;
+#endif
     addTabledBuiltins(version, profile, spvVersion);
 
     //============================================================================
@@ -631,7 +688,7 @@
     //
     // double functions added to desktop 4.00, but not fma, frexp, ldexp, or pack/unpack
     //
-    if (profile != EEsProfile && version >= 400) {
+    if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
         commonBuiltins.append(
 
             "double sqrt(double);"
@@ -1204,7 +1261,7 @@
 #endif
 
     if ((profile == EEsProfile && version >= 300) ||
-        (profile != EEsProfile && version >= 330)) {
+        (profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding
         commonBuiltins.append(
             "int   floatBitsToInt(highp float value);"
             "ivec2 floatBitsToInt(highp vec2  value);"
@@ -1239,15 +1296,15 @@
             "vec3   fma(vec3,   vec3,   vec3  );"
             "vec4   fma(vec4,   vec4,   vec4  );"
             "\n");
+    }
 
-        if (profile != EEsProfile) {
+    if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
             commonBuiltins.append(
                 "double fma(double, double, double);"
                 "dvec2  fma(dvec2,  dvec2,  dvec2 );"
                 "dvec3  fma(dvec3,  dvec3,  dvec3 );"
                 "dvec4  fma(dvec4,  dvec4,  dvec4 );"
                 "\n");
-        }
     }
 
     if ((profile == EEsProfile && version >= 310) ||
@@ -1266,7 +1323,7 @@
             "\n");
     }
 
-    if (profile != EEsProfile && version >= 400) {
+    if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64
         commonBuiltins.append(
             "double frexp(double, out int);"
             "dvec2  frexp( dvec2, out ivec2);"
@@ -1286,7 +1343,7 @@
 #endif
 
     if ((profile == EEsProfile && version >= 300) ||
-        (profile != EEsProfile && version >= 400)) {
+        (profile != EEsProfile && version >= 150)) {
         commonBuiltins.append(
             "highp uint packUnorm2x16(vec2);"
                   "vec2 unpackUnorm2x16(highp uint);"
@@ -1294,7 +1351,7 @@
     }
 
     if ((profile == EEsProfile && version >= 300) ||
-        (profile != EEsProfile && version >= 420)) {
+        (profile != EEsProfile && version >= 150)) {
         commonBuiltins.append(
             "highp uint packSnorm2x16(vec2);"
             "      vec2 unpackSnorm2x16(highp uint);"
@@ -1306,16 +1363,15 @@
         commonBuiltins.append(
             "mediump vec2 unpackHalf2x16(highp uint);"
             "\n");
-    }
-#ifndef GLSLANG_WEB
-    else if (profile != EEsProfile && version >= 420) {
+    } else if (profile != EEsProfile && version >= 150) {
         commonBuiltins.append(
             "        vec2 unpackHalf2x16(highp uint);"
             "\n");
     }
 
+#ifndef GLSLANG_WEB
     if ((profile == EEsProfile && version >= 310) ||
-        (profile != EEsProfile && version >= 400)) {
+        (profile != EEsProfile && version >= 150)) {
         commonBuiltins.append(
             "highp uint packSnorm4x8(vec4);"
             "highp uint packUnorm4x8(vec4);"
@@ -1327,7 +1383,7 @@
             "mediump vec4 unpackSnorm4x8(highp uint);"
             "mediump vec4 unpackUnorm4x8(highp uint);"
             "\n");
-    } else if (profile != EEsProfile && version >= 400) {
+    } else if (profile != EEsProfile && version >= 150) {
         commonBuiltins.append(
                     "vec4 unpackSnorm4x8(highp uint);"
                     "vec4 unpackUnorm4x8(highp uint);"
@@ -2796,6 +2852,181 @@
             "\n");
     }
 
+    if ((profile != EEsProfile && version >= 130) ||
+        (profile == EEsProfile && version >= 300)) {
+        commonBuiltins.append(
+            "uint countLeadingZeros(uint);"
+            "uvec2 countLeadingZeros(uvec2);"
+            "uvec3 countLeadingZeros(uvec3);"
+            "uvec4 countLeadingZeros(uvec4);"
+
+            "uint countTrailingZeros(uint);"
+            "uvec2 countTrailingZeros(uvec2);"
+            "uvec3 countTrailingZeros(uvec3);"
+            "uvec4 countTrailingZeros(uvec4);"
+
+            "uint absoluteDifference(int, int);"
+            "uvec2 absoluteDifference(ivec2, ivec2);"
+            "uvec3 absoluteDifference(ivec3, ivec3);"
+            "uvec4 absoluteDifference(ivec4, ivec4);"
+
+            "uint16_t absoluteDifference(int16_t, int16_t);"
+            "u16vec2 absoluteDifference(i16vec2, i16vec2);"
+            "u16vec3 absoluteDifference(i16vec3, i16vec3);"
+            "u16vec4 absoluteDifference(i16vec4, i16vec4);"
+
+            "uint64_t absoluteDifference(int64_t, int64_t);"
+            "u64vec2 absoluteDifference(i64vec2, i64vec2);"
+            "u64vec3 absoluteDifference(i64vec3, i64vec3);"
+            "u64vec4 absoluteDifference(i64vec4, i64vec4);"
+
+            "uint absoluteDifference(uint, uint);"
+            "uvec2 absoluteDifference(uvec2, uvec2);"
+            "uvec3 absoluteDifference(uvec3, uvec3);"
+            "uvec4 absoluteDifference(uvec4, uvec4);"
+
+            "uint16_t absoluteDifference(uint16_t, uint16_t);"
+            "u16vec2 absoluteDifference(u16vec2, u16vec2);"
+            "u16vec3 absoluteDifference(u16vec3, u16vec3);"
+            "u16vec4 absoluteDifference(u16vec4, u16vec4);"
+
+            "uint64_t absoluteDifference(uint64_t, uint64_t);"
+            "u64vec2 absoluteDifference(u64vec2, u64vec2);"
+            "u64vec3 absoluteDifference(u64vec3, u64vec3);"
+            "u64vec4 absoluteDifference(u64vec4, u64vec4);"
+
+            "int addSaturate(int, int);"
+            "ivec2 addSaturate(ivec2, ivec2);"
+            "ivec3 addSaturate(ivec3, ivec3);"
+            "ivec4 addSaturate(ivec4, ivec4);"
+
+            "int16_t addSaturate(int16_t, int16_t);"
+            "i16vec2 addSaturate(i16vec2, i16vec2);"
+            "i16vec3 addSaturate(i16vec3, i16vec3);"
+            "i16vec4 addSaturate(i16vec4, i16vec4);"
+
+            "int64_t addSaturate(int64_t, int64_t);"
+            "i64vec2 addSaturate(i64vec2, i64vec2);"
+            "i64vec3 addSaturate(i64vec3, i64vec3);"
+            "i64vec4 addSaturate(i64vec4, i64vec4);"
+
+            "uint addSaturate(uint, uint);"
+            "uvec2 addSaturate(uvec2, uvec2);"
+            "uvec3 addSaturate(uvec3, uvec3);"
+            "uvec4 addSaturate(uvec4, uvec4);"
+
+            "uint16_t addSaturate(uint16_t, uint16_t);"
+            "u16vec2 addSaturate(u16vec2, u16vec2);"
+            "u16vec3 addSaturate(u16vec3, u16vec3);"
+            "u16vec4 addSaturate(u16vec4, u16vec4);"
+
+            "uint64_t addSaturate(uint64_t, uint64_t);"
+            "u64vec2 addSaturate(u64vec2, u64vec2);"
+            "u64vec3 addSaturate(u64vec3, u64vec3);"
+            "u64vec4 addSaturate(u64vec4, u64vec4);"
+
+            "int subtractSaturate(int, int);"
+            "ivec2 subtractSaturate(ivec2, ivec2);"
+            "ivec3 subtractSaturate(ivec3, ivec3);"
+            "ivec4 subtractSaturate(ivec4, ivec4);"
+
+            "int16_t subtractSaturate(int16_t, int16_t);"
+            "i16vec2 subtractSaturate(i16vec2, i16vec2);"
+            "i16vec3 subtractSaturate(i16vec3, i16vec3);"
+            "i16vec4 subtractSaturate(i16vec4, i16vec4);"
+
+            "int64_t subtractSaturate(int64_t, int64_t);"
+            "i64vec2 subtractSaturate(i64vec2, i64vec2);"
+            "i64vec3 subtractSaturate(i64vec3, i64vec3);"
+            "i64vec4 subtractSaturate(i64vec4, i64vec4);"
+
+            "uint subtractSaturate(uint, uint);"
+            "uvec2 subtractSaturate(uvec2, uvec2);"
+            "uvec3 subtractSaturate(uvec3, uvec3);"
+            "uvec4 subtractSaturate(uvec4, uvec4);"
+
+            "uint16_t subtractSaturate(uint16_t, uint16_t);"
+            "u16vec2 subtractSaturate(u16vec2, u16vec2);"
+            "u16vec3 subtractSaturate(u16vec3, u16vec3);"
+            "u16vec4 subtractSaturate(u16vec4, u16vec4);"
+
+            "uint64_t subtractSaturate(uint64_t, uint64_t);"
+            "u64vec2 subtractSaturate(u64vec2, u64vec2);"
+            "u64vec3 subtractSaturate(u64vec3, u64vec3);"
+            "u64vec4 subtractSaturate(u64vec4, u64vec4);"
+
+            "int average(int, int);"
+            "ivec2 average(ivec2, ivec2);"
+            "ivec3 average(ivec3, ivec3);"
+            "ivec4 average(ivec4, ivec4);"
+
+            "int16_t average(int16_t, int16_t);"
+            "i16vec2 average(i16vec2, i16vec2);"
+            "i16vec3 average(i16vec3, i16vec3);"
+            "i16vec4 average(i16vec4, i16vec4);"
+
+            "int64_t average(int64_t, int64_t);"
+            "i64vec2 average(i64vec2, i64vec2);"
+            "i64vec3 average(i64vec3, i64vec3);"
+            "i64vec4 average(i64vec4, i64vec4);"
+
+            "uint average(uint, uint);"
+            "uvec2 average(uvec2, uvec2);"
+            "uvec3 average(uvec3, uvec3);"
+            "uvec4 average(uvec4, uvec4);"
+
+            "uint16_t average(uint16_t, uint16_t);"
+            "u16vec2 average(u16vec2, u16vec2);"
+            "u16vec3 average(u16vec3, u16vec3);"
+            "u16vec4 average(u16vec4, u16vec4);"
+
+            "uint64_t average(uint64_t, uint64_t);"
+            "u64vec2 average(u64vec2, u64vec2);"
+            "u64vec3 average(u64vec3, u64vec3);"
+            "u64vec4 average(u64vec4, u64vec4);"
+
+            "int averageRounded(int, int);"
+            "ivec2 averageRounded(ivec2, ivec2);"
+            "ivec3 averageRounded(ivec3, ivec3);"
+            "ivec4 averageRounded(ivec4, ivec4);"
+
+            "int16_t averageRounded(int16_t, int16_t);"
+            "i16vec2 averageRounded(i16vec2, i16vec2);"
+            "i16vec3 averageRounded(i16vec3, i16vec3);"
+            "i16vec4 averageRounded(i16vec4, i16vec4);"
+
+            "int64_t averageRounded(int64_t, int64_t);"
+            "i64vec2 averageRounded(i64vec2, i64vec2);"
+            "i64vec3 averageRounded(i64vec3, i64vec3);"
+            "i64vec4 averageRounded(i64vec4, i64vec4);"
+
+            "uint averageRounded(uint, uint);"
+            "uvec2 averageRounded(uvec2, uvec2);"
+            "uvec3 averageRounded(uvec3, uvec3);"
+            "uvec4 averageRounded(uvec4, uvec4);"
+
+            "uint16_t averageRounded(uint16_t, uint16_t);"
+            "u16vec2 averageRounded(u16vec2, u16vec2);"
+            "u16vec3 averageRounded(u16vec3, u16vec3);"
+            "u16vec4 averageRounded(u16vec4, u16vec4);"
+
+            "uint64_t averageRounded(uint64_t, uint64_t);"
+            "u64vec2 averageRounded(u64vec2, u64vec2);"
+            "u64vec3 averageRounded(u64vec3, u64vec3);"
+            "u64vec4 averageRounded(u64vec4, u64vec4);"
+
+            "int multiply32x16(int, int);"
+            "ivec2 multiply32x16(ivec2, ivec2);"
+            "ivec3 multiply32x16(ivec3, ivec3);"
+            "ivec4 multiply32x16(ivec4, ivec4);"
+
+            "uint multiply32x16(uint, uint);"
+            "uvec2 multiply32x16(uvec2, uvec2);"
+            "uvec3 multiply32x16(uvec3, uvec3);"
+            "uvec4 multiply32x16(uvec4, uvec4);"
+            "\n");
+    }
+
     if ((profile != EEsProfile && version >= 450) ||
         (profile == EEsProfile && version >= 320)) {
         commonBuiltins.append(
@@ -2829,6 +3060,24 @@
             "\n");
     }
 
+    if ((profile == EEsProfile && version >= 300 && version < 310) ||
+        (profile != EEsProfile && version >= 150 && version < 450)) { // GL_EXT_shader_integer_mix
+        commonBuiltins.append("int mix(int, int, bool);"
+                              "ivec2 mix(ivec2, ivec2, bvec2);"
+                              "ivec3 mix(ivec3, ivec3, bvec3);"
+                              "ivec4 mix(ivec4, ivec4, bvec4);"
+                              "uint  mix(uint,  uint,  bool );"
+                              "uvec2 mix(uvec2, uvec2, bvec2);"
+                              "uvec3 mix(uvec3, uvec3, bvec3);"
+                              "uvec4 mix(uvec4, uvec4, bvec4);"
+                              "bool  mix(bool,  bool,  bool );"
+                              "bvec2 mix(bvec2, bvec2, bvec2);"
+                              "bvec3 mix(bvec3, bvec3, bvec3);"
+                              "bvec4 mix(bvec4, bvec4, bvec4);"
+
+                              "\n");
+    }
+
     // GL_AMD_gpu_shader_half_float/Explicit types
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
@@ -3713,7 +3962,7 @@
     //
     // Geometric Functions.
     //
-    if (IncludeLegacy(version, profile, spvVersion))
+    if (spvVersion.vulkan == 0 && IncludeLegacy(version, profile, spvVersion))
         stageBuiltins[EShLangVertex].append("vec4 ftransform();");
 
     //
@@ -3795,6 +4044,7 @@
             "void EndPrimitive();"
             "\n");
     }
+#endif
 
     //============================================================================
     //
@@ -3824,15 +4074,20 @@
             );
     if ((profile != EEsProfile && version >= 420) || esBarrier) {
         commonBuiltins.append(
-            "void memoryBarrierAtomicCounter();"
             "void memoryBarrierBuffer();"
-            "void memoryBarrierImage();"
             );
         stageBuiltins[EShLangCompute].append(
             "void memoryBarrierShared();"
             "void groupMemoryBarrier();"
             );
     }
+#ifndef GLSLANG_WEB
+    if ((profile != EEsProfile && version >= 420) || esBarrier) {
+        if (spvVersion.vulkan == 0) {
+            commonBuiltins.append("void memoryBarrierAtomicCounter();");
+        }
+        commonBuiltins.append("void memoryBarrierImage();");
+    }
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
         stageBuiltins[EShLangMeshNV].append(
             "void memoryBarrierShared();"
@@ -3847,6 +4102,8 @@
     commonBuiltins.append("void controlBarrier(int, int, int, int);\n"
                           "void memoryBarrier(int, int, int);\n");
 
+    commonBuiltins.append("void debugPrintfEXT();\n");
+
     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
@@ -4081,29 +4338,64 @@
             "\n");
         }
 
-    // Builtins for GL_NV_ray_tracing
+    // Builtins for GL_NV_ray_tracing/GL_EXT_ray_tracing/GL_EXT_ray_query
     if (profile != EEsProfile && version >= 460) {
-        stageBuiltins[EShLangRayGenNV].append(
-            "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
-            "void executeCallableNV(uint, int);"
+         commonBuiltins.append("void rayQueryInitializeEXT(rayQueryEXT, accelerationStructureEXT, uint, uint, vec3, float, vec3, float);"
+            "void rayQueryTerminateEXT(rayQueryEXT);"
+            "void rayQueryGenerateIntersectionEXT(rayQueryEXT, float);"
+            "void rayQueryConfirmIntersectionEXT(rayQueryEXT);"
+            "bool rayQueryProceedEXT(rayQueryEXT);"
+            "uint rayQueryGetIntersectionTypeEXT(rayQueryEXT, bool);"
+            "float rayQueryGetRayTMinEXT(rayQueryEXT);"
+            "uint rayQueryGetRayFlagsEXT(rayQueryEXT);"
+            "vec3 rayQueryGetWorldRayOriginEXT(rayQueryEXT);"
+            "vec3 rayQueryGetWorldRayDirectionEXT(rayQueryEXT);"
+            "float rayQueryGetIntersectionTEXT(rayQueryEXT, bool);"
+            "int rayQueryGetIntersectionInstanceCustomIndexEXT(rayQueryEXT, bool);"
+            "int rayQueryGetIntersectionInstanceIdEXT(rayQueryEXT, bool);"
+            "uint rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQueryEXT, bool);"
+            "int rayQueryGetIntersectionGeometryIndexEXT(rayQueryEXT, bool);"
+            "int rayQueryGetIntersectionPrimitiveIndexEXT(rayQueryEXT, bool);"
+            "vec2 rayQueryGetIntersectionBarycentricsEXT(rayQueryEXT, bool);"
+            "bool rayQueryGetIntersectionFrontFaceEXT(rayQueryEXT, bool);"
+            "bool rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQueryEXT);"
+            "vec3 rayQueryGetIntersectionObjectRayDirectionEXT(rayQueryEXT, bool);"
+            "vec3 rayQueryGetIntersectionObjectRayOriginEXT(rayQueryEXT, bool);"
+            "mat4x3 rayQueryGetIntersectionObjectToWorldEXT(rayQueryEXT, bool);"
+            "mat4x3 rayQueryGetIntersectionWorldToObjectEXT(rayQueryEXT, bool);"
             "\n");
-        stageBuiltins[EShLangIntersectNV].append(
+
+        stageBuiltins[EShLangRayGen].append(
+            "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void executeCallableNV(uint, int);"
+            "void executeCallableEXT(uint, int);"
+            "\n");
+        stageBuiltins[EShLangIntersect].append(
             "bool reportIntersectionNV(float, uint);"
+            "bool reportIntersectionEXT(float, uint);"
             "\n");
-        stageBuiltins[EShLangAnyHitNV].append(
+        stageBuiltins[EShLangAnyHit].append(
             "void ignoreIntersectionNV();"
+            "void ignoreIntersectionEXT();"
             "void terminateRayNV();"
+            "void terminateRayEXT();"
             "\n");
-        stageBuiltins[EShLangClosestHitNV].append(
+        stageBuiltins[EShLangClosestHit].append(
             "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
             "void executeCallableNV(uint, int);"
+            "void executeCallableEXT(uint, int);"
             "\n");
-        stageBuiltins[EShLangMissNV].append(
+        stageBuiltins[EShLangMiss].append(
             "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
             "void executeCallableNV(uint, int);"
+            "void executeCallableEXT(uint, int);"
             "\n");
-        stageBuiltins[EShLangCallableNV].append(
+        stageBuiltins[EShLangCallable].append(
             "void executeCallableNV(uint, int);"
+            "void executeCallableEXT(uint, int);"
             "\n");
     }
 
@@ -4279,6 +4571,7 @@
 
             "\n");
     }
+#endif
 
     //============================================================================
     //
@@ -4308,6 +4601,7 @@
             "\n");
     }
 
+#ifndef GLSLANG_WEB
     //============================================================================
     //
     // Define the interface to the mesh/task shader.
@@ -4937,19 +5231,25 @@
                 "flat in int gl_PrimitiveID;"
                 );
 
-        if (version >= 400) {
+        if (version >= 130) { // ARB_sample_shading
             stageBuiltins[EShLangFragment].append(
                 "flat in  int  gl_SampleID;"
                 "     in  vec2 gl_SamplePosition;"
-                "flat in  int  gl_SampleMaskIn[];"
                 "     out int  gl_SampleMask[];"
                 );
-            if (spvVersion.spv == 0)
+
+            if (spvVersion.spv == 0) {
                 stageBuiltins[EShLangFragment].append(
                     "uniform int gl_NumSamples;"
-                    );
+                );
+            }
         }
 
+        if (version >= 400)
+            stageBuiltins[EShLangFragment].append(
+                "flat in  int  gl_SampleMaskIn[];"
+            );
+
         if (version >= 430)
             stageBuiltins[EShLangFragment].append(
                 "flat in int gl_Layer;"
@@ -5144,100 +5444,160 @@
         stageBuiltins[EShLangMeshNV]        .append(computeSubgroupDecls);
         stageBuiltins[EShLangTaskNV]        .append(subgroupDecls);
         stageBuiltins[EShLangTaskNV]        .append(computeSubgroupDecls);
-        stageBuiltins[EShLangRayGenNV]      .append(subgroupDecls);
-        stageBuiltins[EShLangIntersectNV]   .append(subgroupDecls);
-        stageBuiltins[EShLangAnyHitNV]      .append(subgroupDecls);
-        stageBuiltins[EShLangClosestHitNV]  .append(subgroupDecls);
-        stageBuiltins[EShLangMissNV]        .append(subgroupDecls);
-        stageBuiltins[EShLangCallableNV]    .append(subgroupDecls);
+        stageBuiltins[EShLangRayGen]        .append(subgroupDecls);
+        stageBuiltins[EShLangIntersect]     .append(subgroupDecls);
+        stageBuiltins[EShLangAnyHit]        .append(subgroupDecls);
+        stageBuiltins[EShLangClosestHit]    .append(subgroupDecls);
+        stageBuiltins[EShLangMiss]          .append(subgroupDecls);
+        stageBuiltins[EShLangCallable]      .append(subgroupDecls);
     }
 
-    // GL_NV_ray_tracing
+    // GL_NV_ray_tracing/GL_EXT_ray_tracing
     if (profile != EEsProfile && version >= 460) {
 
         const char *constRayFlags =
             "const uint gl_RayFlagsNoneNV = 0U;"
+            "const uint gl_RayFlagsNoneEXT = 0U;"
             "const uint gl_RayFlagsOpaqueNV = 1U;"
+            "const uint gl_RayFlagsOpaqueEXT = 1U;"
             "const uint gl_RayFlagsNoOpaqueNV = 2U;"
+            "const uint gl_RayFlagsNoOpaqueEXT = 2U;"
             "const uint gl_RayFlagsTerminateOnFirstHitNV = 4U;"
+            "const uint gl_RayFlagsTerminateOnFirstHitEXT = 4U;"
             "const uint gl_RayFlagsSkipClosestHitShaderNV = 8U;"
+            "const uint gl_RayFlagsSkipClosestHitShaderEXT = 8U;"
             "const uint gl_RayFlagsCullBackFacingTrianglesNV = 16U;"
+            "const uint gl_RayFlagsCullBackFacingTrianglesEXT = 16U;"
             "const uint gl_RayFlagsCullFrontFacingTrianglesNV = 32U;"
+            "const uint gl_RayFlagsCullFrontFacingTrianglesEXT = 32U;"
             "const uint gl_RayFlagsCullOpaqueNV = 64U;"
+            "const uint gl_RayFlagsCullOpaqueEXT = 64U;"
             "const uint gl_RayFlagsCullNoOpaqueNV = 128U;"
+            "const uint gl_RayFlagsCullNoOpaqueEXT = 128U;"
+            "const uint gl_RayFlagsSkipTrianglesEXT = 256U;"
+            "const uint gl_RayFlagsSkipAABBEXT = 512U;"
+            "const uint gl_HitKindFrontFacingTriangleEXT = 254U;"
+            "const uint gl_HitKindBackFacingTriangleEXT = 255U;"
             "\n";
+
+        const char *constRayQueryIntersection =
+            "const uint gl_RayQueryCandidateIntersectionEXT = 0U;"
+            "const uint gl_RayQueryCommittedIntersectionEXT = 1U;"
+            "const uint gl_RayQueryCommittedIntersectionNoneEXT = 0U;"
+            "const uint gl_RayQueryCommittedIntersectionTriangleEXT = 1U;"
+            "const uint gl_RayQueryCommittedIntersectionGeneratedEXT = 2U;"
+            "const uint gl_RayQueryCandidateIntersectionTriangleEXT = 0U;"
+            "const uint gl_RayQueryCandidateIntersectionAABBEXT = 1U;"
+            "\n";
+
         const char *rayGenDecls =
             "in    uvec3  gl_LaunchIDNV;"
+            "in    uvec3  gl_LaunchIDEXT;"
             "in    uvec3  gl_LaunchSizeNV;"
+            "in    uvec3  gl_LaunchSizeEXT;"
             "\n";
         const char *intersectDecls =
             "in    uvec3  gl_LaunchIDNV;"
+            "in    uvec3  gl_LaunchIDEXT;"
             "in    uvec3  gl_LaunchSizeNV;"
+            "in    uvec3  gl_LaunchSizeEXT;"
             "in     int   gl_PrimitiveID;"
             "in     int   gl_InstanceID;"
             "in     int   gl_InstanceCustomIndexNV;"
+            "in     int   gl_InstanceCustomIndexEXT;"
+            "in     int   gl_GeometryIndexEXT;"
             "in    vec3   gl_WorldRayOriginNV;"
+            "in    vec3   gl_WorldRayOriginEXT;"
             "in    vec3   gl_WorldRayDirectionNV;"
+            "in    vec3   gl_WorldRayDirectionEXT;"
             "in    vec3   gl_ObjectRayOriginNV;"
+            "in    vec3   gl_ObjectRayOriginEXT;"
             "in    vec3   gl_ObjectRayDirectionNV;"
+            "in    vec3   gl_ObjectRayDirectionEXT;"
             "in    float  gl_RayTminNV;"
+            "in    float  gl_RayTminEXT;"
             "in    float  gl_RayTmaxNV;"
+            "in    float  gl_RayTmaxEXT;"
             "in    mat4x3 gl_ObjectToWorldNV;"
+            "in    mat4x3 gl_ObjectToWorldEXT;"
+            "in    mat3x4 gl_ObjectToWorld3x4EXT;"
             "in    mat4x3 gl_WorldToObjectNV;"
+            "in    mat4x3 gl_WorldToObjectEXT;"
+            "in    mat3x4 gl_WorldToObject3x4EXT;"
             "in    uint   gl_IncomingRayFlagsNV;"
+            "in    uint   gl_IncomingRayFlagsEXT;"
             "\n";
         const char *hitDecls =
             "in    uvec3  gl_LaunchIDNV;"
+            "in    uvec3  gl_LaunchIDEXT;"
             "in    uvec3  gl_LaunchSizeNV;"
+            "in    uvec3  gl_LaunchSizeEXT;"
             "in     int   gl_PrimitiveID;"
             "in     int   gl_InstanceID;"
             "in     int   gl_InstanceCustomIndexNV;"
+            "in     int   gl_InstanceCustomIndexEXT;"
+            "in     int   gl_GeometryIndexEXT;"
             "in    vec3   gl_WorldRayOriginNV;"
+            "in    vec3   gl_WorldRayOriginEXT;"
             "in    vec3   gl_WorldRayDirectionNV;"
+            "in    vec3   gl_WorldRayDirectionEXT;"
             "in    vec3   gl_ObjectRayOriginNV;"
+            "in    vec3   gl_ObjectRayOriginEXT;"
             "in    vec3   gl_ObjectRayDirectionNV;"
+            "in    vec3   gl_ObjectRayDirectionEXT;"
             "in    float  gl_RayTminNV;"
+            "in    float  gl_RayTminEXT;"
             "in    float  gl_RayTmaxNV;"
+            "in    float  gl_RayTmaxEXT;"
             "in    float  gl_HitTNV;"
+            "in    float  gl_HitTEXT;"
             "in    uint   gl_HitKindNV;"
+            "in    uint   gl_HitKindEXT;"
             "in    mat4x3 gl_ObjectToWorldNV;"
+            "in    mat4x3 gl_ObjectToWorldEXT;"
+            "in    mat3x4 gl_ObjectToWorld3x4EXT;"
             "in    mat4x3 gl_WorldToObjectNV;"
+            "in    mat4x3 gl_WorldToObjectEXT;"
+            "in    mat3x4 gl_WorldToObject3x4EXT;"
             "in    uint   gl_IncomingRayFlagsNV;"
+            "in    uint   gl_IncomingRayFlagsEXT;"
             "\n";
         const char *missDecls =
             "in    uvec3  gl_LaunchIDNV;"
+            "in    uvec3  gl_LaunchIDEXT;"
             "in    uvec3  gl_LaunchSizeNV;"
+            "in    uvec3  gl_LaunchSizeEXT;"
             "in    vec3   gl_WorldRayOriginNV;"
+            "in    vec3   gl_WorldRayOriginEXT;"
             "in    vec3   gl_WorldRayDirectionNV;"
+            "in    vec3   gl_WorldRayDirectionEXT;"
             "in    vec3   gl_ObjectRayOriginNV;"
             "in    vec3   gl_ObjectRayDirectionNV;"
             "in    float  gl_RayTminNV;"
+            "in    float  gl_RayTminEXT;"
             "in    float  gl_RayTmaxNV;"
+            "in    float  gl_RayTmaxEXT;"
             "in    uint   gl_IncomingRayFlagsNV;"
+            "in    uint   gl_IncomingRayFlagsEXT;"
             "\n";
 
         const char *callableDecls =
             "in    uvec3  gl_LaunchIDNV;"
+            "in    uvec3  gl_LaunchIDEXT;"
             "in    uvec3  gl_LaunchSizeNV;"
+            "in    uvec3  gl_LaunchSizeEXT;"
             "\n";
 
-        stageBuiltins[EShLangRayGenNV].append(rayGenDecls);
-        stageBuiltins[EShLangRayGenNV].append(constRayFlags);
 
-        stageBuiltins[EShLangIntersectNV].append(intersectDecls);
-        stageBuiltins[EShLangIntersectNV].append(constRayFlags);
+        commonBuiltins.append(constRayQueryIntersection);
+        commonBuiltins.append(constRayFlags);
 
-        stageBuiltins[EShLangAnyHitNV].append(hitDecls);
-        stageBuiltins[EShLangAnyHitNV].append(constRayFlags);
-
-        stageBuiltins[EShLangClosestHitNV].append(hitDecls);
-        stageBuiltins[EShLangClosestHitNV].append(constRayFlags);
-
-        stageBuiltins[EShLangMissNV].append(missDecls);
-        stageBuiltins[EShLangMissNV].append(constRayFlags);
-
-        stageBuiltins[EShLangCallableNV].append(callableDecls);
-        stageBuiltins[EShLangCallableNV].append(constRayFlags);
+        stageBuiltins[EShLangRayGen].append(rayGenDecls);
+        stageBuiltins[EShLangIntersect].append(intersectDecls);
+        stageBuiltins[EShLangAnyHit].append(hitDecls);
+        stageBuiltins[EShLangClosestHit].append(hitDecls);
+        stageBuiltins[EShLangMiss].append(missDecls);
+        stageBuiltins[EShLangCallable].append(callableDecls);
 
     }
     if ((profile != EEsProfile && version >= 140)) {
@@ -5245,11 +5605,11 @@
             "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
             "\n";
 
-        stageBuiltins[EShLangRayGenNV].append(deviceIndex);
-        stageBuiltins[EShLangIntersectNV].append(deviceIndex);
-        stageBuiltins[EShLangAnyHitNV].append(deviceIndex);
-        stageBuiltins[EShLangClosestHitNV].append(deviceIndex);
-        stageBuiltins[EShLangMissNV].append(deviceIndex);
+        stageBuiltins[EShLangRayGen].append(deviceIndex);
+        stageBuiltins[EShLangIntersect].append(deviceIndex);
+        stageBuiltins[EShLangAnyHit].append(deviceIndex);
+        stageBuiltins[EShLangClosestHit].append(deviceIndex);
+        stageBuiltins[EShLangMiss].append(deviceIndex);
     }
 
     if (version >= 300 /* both ES and non-ES */) {
@@ -5265,6 +5625,7 @@
         commonBuiltins.append("const int gl_ScopeSubgroup    = 3;\n");
         commonBuiltins.append("const int gl_ScopeInvocation  = 4;\n");
         commonBuiltins.append("const int gl_ScopeQueueFamily = 5;\n");
+        commonBuiltins.append("const int gl_ScopeShaderCallEXT = 6;\n");
 
         commonBuiltins.append("const int gl_SemanticsRelaxed         = 0x0;\n");
         commonBuiltins.append("const int gl_SemanticsAcquire         = 0x2;\n");
@@ -5314,10 +5675,9 @@
 #ifdef GLSLANG_WEB
             const int ms = 0;
 #else
-            for (int ms = 0; ms <= 1; ++ms)
+            for (int ms = 0; ms <= 1; ++ms) // loop over "bool" multisample or not
 #endif
             {
-#ifndef GLSLANG_WEB
                 if ((ms || image) && shadow)
                     continue;
                 if (ms && profile != EEsProfile && version < 150)
@@ -5326,7 +5686,6 @@
                     continue;
                 if (ms && profile == EEsProfile && version < 310)
                     continue;
-#endif
 
                 for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
 #ifdef GLSLANG_WEB
@@ -5431,14 +5790,12 @@
         }
     }
 
-#ifndef GLSLANG_WEB
     //
     // sparseTexelsResidentARB()
     //
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append("bool sparseTexelsResidentARB(int code);\n");
     }
-#endif
 }
 
 //
@@ -5465,7 +5822,7 @@
     return;
 #endif
 
-    if (sampler.isImage() && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 430)))
+    if (sampler.isImage() && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 420)))
         return;
 
     if (profile == EEsProfile)
@@ -5504,9 +5861,9 @@
 
     //
     // textureQueryLod(), fragment stage only
-    //
+    // Also enabled with extension GL_ARB_texture_query_lod
 
-    if (profile != EEsProfile && version >= 400 && sampler.isCombined() && sampler.dim != EsdRect &&
+    if (profile != EEsProfile && version >= 150 && sampler.isCombined() && sampler.dim != EsdRect &&
         ! sampler.isMultiSample() && ! sampler.isBuffer()) {
         for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) {
             if (f16TexAddr && sampler.type != EbtFloat16)
@@ -5725,6 +6082,11 @@
 //
 void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, int version, EProfile profile)
 {
+#ifdef GLSLANG_WEB
+    profile = EEsProfile;
+    version = 310;
+#endif
+
     //
     // texturing
     //
@@ -6005,6 +6367,11 @@
 //
 void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, int version, EProfile profile)
 {
+#ifdef GLSLANG_WEB
+    profile = EEsProfile;
+    version = 310;
+#endif
+
     switch (sampler.dim) {
     case Esd2D:
     case EsdRect:
@@ -6243,6 +6610,11 @@
 //
 void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language)
 {
+#ifdef GLSLANG_WEB
+    version = 310;
+    profile = EEsProfile;
+#endif
+
     //
     // Initialize the context-dependent (resource-dependent) built-in strings for parsing.
     //
@@ -6254,7 +6626,7 @@
     //============================================================================
 
     TString& s = commonBuiltins;
-    const int maxSize = 80;
+    const int maxSize = 200;
     char builtInConstant[maxSize];
 
     //
@@ -6300,9 +6672,7 @@
             s.append(builtInConstant);
         }
 
-#ifdef GLSLANG_WEB
-    }
-#else
+#ifndef GLSLANG_WEB
         if (version >= 310) {
             // geometry
 
@@ -6368,9 +6738,46 @@
             }
         }
 
+        if (version >= 320) {
+            // tessellation
+
+            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlImageUniforms = %d;", resources.maxTessControlImageUniforms);
+            s.append(builtInConstant);
+            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationImageUniforms = %d;", resources.maxTessEvaluationImageUniforms);
+            s.append(builtInConstant);
+            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounters = %d;", resources.maxTessControlAtomicCounters);
+            s.append(builtInConstant);
+            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounters = %d;", resources.maxTessEvaluationAtomicCounters);
+            s.append(builtInConstant);
+            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounterBuffers = %d;", resources.maxTessControlAtomicCounterBuffers);
+            s.append(builtInConstant);
+            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounterBuffers = %d;", resources.maxTessEvaluationAtomicCounterBuffers);
+            s.append(builtInConstant);
+        }
+
+        if (version >= 100) {
+            // GL_EXT_blend_func_extended
+            snprintf(builtInConstant, maxSize, "const mediump int gl_MaxDualSourceDrawBuffersEXT = %d;", resources.maxDualSourceDrawBuffersEXT);
+            s.append(builtInConstant);
+            // this is here instead of with the others in initialize(version, profile) due to the dependence on gl_MaxDualSourceDrawBuffersEXT
+            if (language == EShLangFragment) {
+                s.append(
+                    "mediump vec4 gl_SecondaryFragColorEXT;"
+                    "mediump vec4 gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT];"
+                    "\n");
+            }
+        }
     } else {
         // non-ES profile
 
+        if (version > 400) {
+            snprintf(builtInConstant, maxSize, "const int  gl_MaxVertexUniformVectors = %d;", resources.maxVertexUniformVectors);
+            s.append(builtInConstant);
+
+            snprintf(builtInConstant, maxSize, "const int  gl_MaxFragmentUniformVectors = %d;", resources.maxFragmentUniformVectors);
+            s.append(builtInConstant);
+        }
+
         snprintf(builtInConstant, maxSize, "const int  gl_MaxVertexAttribs = %d;", resources.maxVertexAttribs);
         s.append(builtInConstant);
 
@@ -6584,8 +6991,29 @@
             snprintf(builtInConstant, maxSize, "const int gl_MaxTransformFeedbackInterleavedComponents = %d;", resources.maxTransformFeedbackInterleavedComponents);
             s.append(builtInConstant);
         }
+#endif
     }
 
+    // compute
+    if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) {
+        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupCount = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupCountX,
+                                                                                                         resources.maxComputeWorkGroupCountY,
+                                                                                                         resources.maxComputeWorkGroupCountZ);
+        s.append(builtInConstant);
+        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupSize = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupSizeX,
+                                                                                                        resources.maxComputeWorkGroupSizeY,
+                                                                                                        resources.maxComputeWorkGroupSizeZ);
+        s.append(builtInConstant);
+
+        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeUniformComponents = %d;", resources.maxComputeUniformComponents);
+        s.append(builtInConstant);
+        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeTextureImageUnits = %d;", resources.maxComputeTextureImageUnits);
+        s.append(builtInConstant);
+
+        s.append("\n");
+    }
+
+#ifndef GLSLANG_WEB
     // images (some in compute below)
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 130)) {
@@ -6601,6 +7029,18 @@
         s.append(builtInConstant);
     }
 
+    // compute
+    if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) {
+        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeImageUniforms = %d;", resources.maxComputeImageUniforms);
+        s.append(builtInConstant);
+        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounters = %d;", resources.maxComputeAtomicCounters);
+        s.append(builtInConstant);
+        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounterBuffers = %d;", resources.maxComputeAtomicCounterBuffers);
+        s.append(builtInConstant);
+
+        s.append("\n");
+    }
+
     // atomic counters (some in compute below)
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 420)) {
@@ -6638,31 +7078,6 @@
         s.append("\n");
     }
 
-    // compute
-    if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) {
-        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupCount = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupCountX,
-                                                                                                         resources.maxComputeWorkGroupCountY,
-                                                                                                         resources.maxComputeWorkGroupCountZ);
-        s.append(builtInConstant);
-        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupSize = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupSizeX,
-                                                                                                        resources.maxComputeWorkGroupSizeY,
-                                                                                                        resources.maxComputeWorkGroupSizeZ);
-        s.append(builtInConstant);
-
-        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeUniformComponents = %d;", resources.maxComputeUniformComponents);
-        s.append(builtInConstant);
-        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeTextureImageUnits = %d;", resources.maxComputeTextureImageUnits);
-        s.append(builtInConstant);
-        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeImageUniforms = %d;", resources.maxComputeImageUniforms);
-        s.append(builtInConstant);
-        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounters = %d;", resources.maxComputeAtomicCounters);
-        s.append(builtInConstant);
-        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounterBuffers = %d;", resources.maxComputeAtomicCounterBuffers);
-        s.append(builtInConstant);
-
-        s.append("\n");
-    }
-
     // GL_ARB_cull_distance
     if (profile != EEsProfile && version >= 450) {
         snprintf(builtInConstant, maxSize, "const int gl_MaxCullDistances = %d;",                resources.maxCullDistances);
@@ -6781,6 +7196,11 @@
 //
 void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable)
 {
+#ifdef GLSLANG_WEB
+    version = 310;
+    profile = EEsProfile;
+#endif
+
     //
     // Tag built-in variables and functions with additional qualifier and extension information
     // that cannot be declared with the text strings.
@@ -6886,6 +7306,15 @@
             symbolTable.setFunctionExtensions("fragmentFetchAMD",     1, &E_GL_AMD_shader_fragment_mask);
         }
 
+        symbolTable.setFunctionExtensions("countLeadingZeros",  1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("countTrailingZeros", 1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("absoluteDifference", 1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("addSaturate",        1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("subtractSaturate",   1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("average",            1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("averageRounded",     1, &E_GL_INTEL_shader_integer_functions2);
+        symbolTable.setFunctionExtensions("multiply32x16",      1, &E_GL_INTEL_shader_integer_functions2);
+
         symbolTable.setFunctionExtensions("textureFootprintNV",          1, &E_GL_NV_shader_texture_footprint);
         symbolTable.setFunctionExtensions("textureFootprintClampNV",     1, &E_GL_NV_shader_texture_footprint);
         symbolTable.setFunctionExtensions("textureFootprintLodNV",       1, &E_GL_NV_shader_texture_footprint);
@@ -7150,18 +7579,61 @@
             BuiltInVariable("gl_FragStencilRefARB", EbvFragStencilRef, symbolTable);
         }
 
-        if ((profile != EEsProfile && version >= 400) ||
+        if (profile != EEsProfile && version < 400) {
+            symbolTable.setFunctionExtensions("textureQueryLod", 1, &E_GL_ARB_texture_query_lod);
+        }
+
+        if (profile != EEsProfile && version >= 460) {
+            symbolTable.setFunctionExtensions("rayQueryInitializeEXT",                                            1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryTerminateEXT",                                             1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGenerateIntersectionEXT",                                  1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryConfirmIntersectionEXT",                                   1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryProceedEXT",                                               1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionTypeEXT",                                   1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionTEXT",                                      1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetRayFlagsEXT",                                           1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetRayTMinEXT",                                            1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceCustomIndexEXT",                    1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceIdEXT",                             1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT", 1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionGeometryIndexEXT",                          1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionPrimitiveIndexEXT",                         1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionBarycentricsEXT",                           1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionFrontFaceEXT",                              1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionCandidateAABBOpaqueEXT",                    1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectRayDirectionEXT",                     1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectRayOriginEXT",                        1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectToWorldEXT",                          1, &E_GL_EXT_ray_query);
+            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.setVariableExtensions("gl_RayFlagsSkipAABBEXT",                         1, &E_GL_EXT_ray_flags_primitive_culling);
+            symbolTable.setVariableExtensions("gl_RayFlagsSkipTrianglesEXT",                    1, &E_GL_EXT_ray_flags_primitive_culling);
+        }
+
+        if ((profile != EEsProfile && version >= 130) ||
             (profile == EEsProfile && version >= 310)) {
-            BuiltInVariable("gl_SampleID",        EbvSampleId,       symbolTable);
-            BuiltInVariable("gl_SamplePosition",  EbvSamplePosition, symbolTable);
-            BuiltInVariable("gl_SampleMaskIn",    EbvSampleMask,     symbolTable);
-            BuiltInVariable("gl_SampleMask",      EbvSampleMask,     symbolTable);
-            if (profile == EEsProfile && version < 320) {
-                symbolTable.setVariableExtensions("gl_SampleID",       1, &E_GL_OES_sample_variables);
-                symbolTable.setVariableExtensions("gl_SamplePosition", 1, &E_GL_OES_sample_variables);
-                symbolTable.setVariableExtensions("gl_SampleMaskIn",   1, &E_GL_OES_sample_variables);
-                symbolTable.setVariableExtensions("gl_SampleMask",     1, &E_GL_OES_sample_variables);
-                symbolTable.setVariableExtensions("gl_NumSamples",     1, &E_GL_OES_sample_variables);
+            BuiltInVariable("gl_SampleID",           EbvSampleId,       symbolTable);
+            BuiltInVariable("gl_SamplePosition",     EbvSamplePosition, symbolTable);
+            BuiltInVariable("gl_SampleMask",         EbvSampleMask,     symbolTable);
+
+            if (profile != EEsProfile && version < 400) {
+                BuiltInVariable("gl_NumSamples",     EbvSampleMask,     symbolTable);
+
+                symbolTable.setVariableExtensions("gl_SampleMask",     1, &E_GL_ARB_sample_shading);
+                symbolTable.setVariableExtensions("gl_SampleID",       1, &E_GL_ARB_sample_shading);
+                symbolTable.setVariableExtensions("gl_SamplePosition", 1, &E_GL_ARB_sample_shading);
+                symbolTable.setVariableExtensions("gl_NumSamples",     1, &E_GL_ARB_sample_shading);
+            } else {
+                BuiltInVariable("gl_SampleMaskIn",    EbvSampleMask,     symbolTable);
+
+                if (profile == EEsProfile && version < 320) {
+                    symbolTable.setVariableExtensions("gl_SampleID", 1, &E_GL_OES_sample_variables);
+                    symbolTable.setVariableExtensions("gl_SamplePosition", 1, &E_GL_OES_sample_variables);
+                    symbolTable.setVariableExtensions("gl_SampleMaskIn", 1, &E_GL_OES_sample_variables);
+                    symbolTable.setVariableExtensions("gl_SampleMask", 1, &E_GL_OES_sample_variables);
+                    symbolTable.setVariableExtensions("gl_NumSamples", 1, &E_GL_OES_sample_variables);
+                }
             }
         }
 
@@ -7377,6 +7849,45 @@
             symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic);
         }
 
+        if (profile != EEsProfile && version < 330 ) {
+            symbolTable.setFunctionExtensions("floatBitsToInt", 1, &E_GL_ARB_shader_bit_encoding);
+            symbolTable.setFunctionExtensions("floatBitsToUint", 1, &E_GL_ARB_shader_bit_encoding);
+            symbolTable.setFunctionExtensions("intBitsToFloat", 1, &E_GL_ARB_shader_bit_encoding);
+            symbolTable.setFunctionExtensions("uintBitsToFloat", 1, &E_GL_ARB_shader_bit_encoding);
+        }
+
+        if (profile != EEsProfile && version < 430 ) {
+            symbolTable.setFunctionExtensions("imageSize", 1, &E_GL_ARB_shader_image_size);
+        }
+
+        // GL_ARB_shader_storage_buffer_object
+        if (profile != EEsProfile && version < 430 ) {
+            symbolTable.setFunctionExtensions("atomicAdd", 1, &E_GL_ARB_shader_storage_buffer_object);
+            symbolTable.setFunctionExtensions("atomicMin", 1, &E_GL_ARB_shader_storage_buffer_object);
+            symbolTable.setFunctionExtensions("atomicMax", 1, &E_GL_ARB_shader_storage_buffer_object);
+            symbolTable.setFunctionExtensions("atomicAnd", 1, &E_GL_ARB_shader_storage_buffer_object);
+            symbolTable.setFunctionExtensions("atomicOr", 1, &E_GL_ARB_shader_storage_buffer_object);
+            symbolTable.setFunctionExtensions("atomicXor", 1, &E_GL_ARB_shader_storage_buffer_object);
+            symbolTable.setFunctionExtensions("atomicExchange", 1, &E_GL_ARB_shader_storage_buffer_object);
+            symbolTable.setFunctionExtensions("atomicCompSwap", 1, &E_GL_ARB_shader_storage_buffer_object);
+        }
+
+        // GL_ARB_shading_language_packing
+        if (profile != EEsProfile && version < 400 ) {
+            symbolTable.setFunctionExtensions("packUnorm2x16", 1, &E_GL_ARB_shading_language_packing);
+            symbolTable.setFunctionExtensions("unpackUnorm2x16", 1, &E_GL_ARB_shading_language_packing);
+            symbolTable.setFunctionExtensions("packSnorm4x8", 1, &E_GL_ARB_shading_language_packing);
+            symbolTable.setFunctionExtensions("packUnorm4x8", 1, &E_GL_ARB_shading_language_packing);
+            symbolTable.setFunctionExtensions("unpackSnorm4x8", 1, &E_GL_ARB_shading_language_packing);
+            symbolTable.setFunctionExtensions("unpackUnorm4x8", 1, &E_GL_ARB_shading_language_packing);
+        }
+        if (profile != EEsProfile && version < 420 ) {
+            symbolTable.setFunctionExtensions("packSnorm2x16", 1, &E_GL_ARB_shading_language_packing);
+            symbolTable.setFunctionExtensions("unpackSnorm2x16", 1, &E_GL_ARB_shading_language_packing);
+            symbolTable.setFunctionExtensions("unpackHalf2x16", 1, &E_GL_ARB_shading_language_packing);
+            symbolTable.setFunctionExtensions("packHalf2x16", 1, &E_GL_ARB_shading_language_packing);
+        }
+
         symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
         BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
         symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
@@ -7547,7 +8058,6 @@
 #endif
         break;
 
-#ifndef GLSLANG_WEB
     case EShLangCompute:
         BuiltInVariable("gl_NumWorkGroups",         EbvNumWorkGroups,        symbolTable);
         BuiltInVariable("gl_WorkGroupSize",         EbvWorkGroupSize,        symbolTable);
@@ -7555,6 +8065,15 @@
         BuiltInVariable("gl_LocalInvocationID",     EbvLocalInvocationId,    symbolTable);
         BuiltInVariable("gl_GlobalInvocationID",    EbvGlobalInvocationId,   symbolTable);
         BuiltInVariable("gl_LocalInvocationIndex",  EbvLocalInvocationIndex, symbolTable);
+        BuiltInVariable("gl_DeviceIndex",           EbvDeviceIndex,          symbolTable);
+        BuiltInVariable("gl_ViewIndex",             EbvViewIndex,            symbolTable);
+
+#ifndef GLSLANG_WEB
+        if ((profile != EEsProfile && version >= 140) ||
+            (profile == EEsProfile && version >= 310)) {
+            symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
+            symbolTable.setVariableExtensions("gl_ViewIndex",    1, &E_GL_EXT_multiview);
+        }
 
         if (profile != EEsProfile && version < 430) {
             symbolTable.setVariableExtensions("gl_NumWorkGroups",        1, &E_GL_ARB_compute_shader);
@@ -7580,7 +8099,9 @@
             symbolTable.setFunctionExtensions("groupMemoryBarrier",         1, &E_GL_ARB_compute_shader);
         }
 
+
         symbolTable.setFunctionExtensions("controlBarrier",                 1, &E_GL_KHR_memory_scope_semantics);
+        symbolTable.setFunctionExtensions("debugPrintfEXT",                 1, &E_GL_EXT_debug_printf);
 
         // GL_ARB_shader_ballot
         if (profile != EEsProfile) {
@@ -7636,14 +8157,6 @@
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
         }
 
-        if ((profile != EEsProfile && version >= 140) ||
-            (profile == EEsProfile && version >= 310)) {
-            symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
-            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
-            symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
-            BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
-        }
-
         // GL_KHR_shader_subgroup
         if ((profile == EEsProfile && version >= 310) ||
             (profile != EEsProfile && version >= 140)) {
@@ -7674,51 +8187,101 @@
             symbolTable.setFunctionExtensions("dFdyCoarse",             1, &E_GL_NV_compute_shader_derivatives);
             symbolTable.setFunctionExtensions("fwidthCoarse",           1, &E_GL_NV_compute_shader_derivatives);
         }
-
+#endif
         break;
-    case EShLangRayGenNV:
-    case EShLangIntersectNV:
-    case EShLangAnyHitNV:
-    case EShLangClosestHitNV:
-    case EShLangMissNV:
-    case EShLangCallableNV:
+
+#ifndef GLSLANG_WEB
+    case EShLangRayGen:
+    case EShLangIntersect:
+    case EShLangAnyHit:
+    case EShLangClosestHit:
+    case EShLangMiss:
+    case EShLangCallable:
         if (profile != EEsProfile && version >= 460) {
+            const char *rtexts[] = { E_GL_NV_ray_tracing, E_GL_EXT_ray_tracing };
             symbolTable.setVariableExtensions("gl_LaunchIDNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_LaunchIDEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_LaunchSizeNV", 1, &E_GL_NV_ray_tracing);
-            symbolTable.setVariableExtensions("gl_PrimitiveID", 1, &E_GL_NV_ray_tracing);
-            symbolTable.setVariableExtensions("gl_InstanceID", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_LaunchSizeEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setVariableExtensions("gl_PrimitiveID", 2, rtexts);
+            symbolTable.setVariableExtensions("gl_InstanceID", 2, rtexts);
             symbolTable.setVariableExtensions("gl_InstanceCustomIndexNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_InstanceCustomIndexEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setVariableExtensions("gl_GeometryIndexEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_WorldRayOriginNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_WorldRayOriginEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_WorldRayDirectionNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_WorldRayDirectionEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_ObjectRayOriginNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_ObjectRayOriginEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_ObjectRayDirectionNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_ObjectRayDirectionEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_RayTminNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_RayTminEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_RayTmaxNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_RayTmaxEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_HitTNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_HitTEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_HitKindNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_HitKindEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_ObjectToWorldNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_ObjectToWorldEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setVariableExtensions("gl_ObjectToWorld3x4EXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_WorldToObjectNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_WorldToObjectEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setVariableExtensions("gl_WorldToObject3x4EXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_IncomingRayFlagsNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setVariableExtensions("gl_IncomingRayFlagsEXT", 1, &E_GL_EXT_ray_tracing);
 
             symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
 
-            BuiltInVariable("gl_LaunchIDNV",            EbvLaunchIdNV,           symbolTable);
-            BuiltInVariable("gl_LaunchSizeNV",          EbvLaunchSizeNV,         symbolTable);
-            BuiltInVariable("gl_PrimitiveID",           EbvPrimitiveId,          symbolTable);
-            BuiltInVariable("gl_InstanceID",            EbvInstanceId,           symbolTable);
-            BuiltInVariable("gl_InstanceCustomIndexNV", EbvInstanceCustomIndexNV,symbolTable);
-            BuiltInVariable("gl_WorldRayOriginNV",      EbvWorldRayOriginNV,     symbolTable);
-            BuiltInVariable("gl_WorldRayDirectionNV",   EbvWorldRayDirectionNV,  symbolTable);
-            BuiltInVariable("gl_ObjectRayOriginNV",     EbvObjectRayOriginNV,    symbolTable);
-            BuiltInVariable("gl_ObjectRayDirectionNV",  EbvObjectRayDirectionNV, symbolTable);
-            BuiltInVariable("gl_RayTminNV",             EbvRayTminNV,            symbolTable);
-            BuiltInVariable("gl_RayTmaxNV",             EbvRayTmaxNV,            symbolTable);
-            BuiltInVariable("gl_HitTNV",                EbvHitTNV,               symbolTable);
-            BuiltInVariable("gl_HitKindNV",             EbvHitKindNV,            symbolTable);
-            BuiltInVariable("gl_ObjectToWorldNV",       EbvObjectToWorldNV,      symbolTable);
-            BuiltInVariable("gl_WorldToObjectNV",       EbvWorldToObjectNV,      symbolTable);
-            BuiltInVariable("gl_IncomingRayFlagsNV",    EbvIncomingRayFlagsNV,   symbolTable);
-            BuiltInVariable("gl_DeviceIndex",           EbvDeviceIndex,          symbolTable);
+
+            symbolTable.setFunctionExtensions("traceNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setFunctionExtensions("traceRayEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setFunctionExtensions("reportIntersectionNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setFunctionExtensions("reportIntersectionEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setFunctionExtensions("ignoreIntersectionNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setFunctionExtensions("ignoreIntersectionEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setFunctionExtensions("terminateRayNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setFunctionExtensions("terminateRayEXT", 1, &E_GL_EXT_ray_tracing);
+            symbolTable.setFunctionExtensions("executeCallableNV", 1, &E_GL_NV_ray_tracing);
+            symbolTable.setFunctionExtensions("executeCallableEXT", 1, &E_GL_EXT_ray_tracing);
+
+
+            BuiltInVariable("gl_LaunchIDNV",             EbvLaunchId,           symbolTable);
+            BuiltInVariable("gl_LaunchIDEXT",            EbvLaunchId,           symbolTable);
+            BuiltInVariable("gl_LaunchSizeNV",           EbvLaunchSize,         symbolTable);
+            BuiltInVariable("gl_LaunchSizeEXT",          EbvLaunchSize,         symbolTable);
+            BuiltInVariable("gl_PrimitiveID",            EbvPrimitiveId,        symbolTable);
+            BuiltInVariable("gl_InstanceID",             EbvInstanceId,         symbolTable);
+            BuiltInVariable("gl_InstanceCustomIndexNV",  EbvInstanceCustomIndex,symbolTable);
+            BuiltInVariable("gl_InstanceCustomIndexEXT", EbvInstanceCustomIndex,symbolTable);
+            BuiltInVariable("gl_GeometryIndexEXT",       EbvGeometryIndex,      symbolTable);
+            BuiltInVariable("gl_WorldRayOriginNV",       EbvWorldRayOrigin,     symbolTable);
+            BuiltInVariable("gl_WorldRayOriginEXT",      EbvWorldRayOrigin,     symbolTable);
+            BuiltInVariable("gl_WorldRayDirectionNV",    EbvWorldRayDirection,  symbolTable);
+            BuiltInVariable("gl_WorldRayDirectionEXT",   EbvWorldRayDirection,  symbolTable);
+            BuiltInVariable("gl_ObjectRayOriginNV",      EbvObjectRayOrigin,    symbolTable);
+            BuiltInVariable("gl_ObjectRayOriginEXT",     EbvObjectRayOrigin,    symbolTable);
+            BuiltInVariable("gl_ObjectRayDirectionNV",   EbvObjectRayDirection, symbolTable);
+            BuiltInVariable("gl_ObjectRayDirectionEXT",  EbvObjectRayDirection, symbolTable);
+            BuiltInVariable("gl_RayTminNV",              EbvRayTmin,            symbolTable);
+            BuiltInVariable("gl_RayTminEXT",             EbvRayTmin,            symbolTable);
+            BuiltInVariable("gl_RayTmaxNV",              EbvRayTmax,            symbolTable);
+            BuiltInVariable("gl_RayTmaxEXT",             EbvRayTmax,            symbolTable);
+            BuiltInVariable("gl_HitTNV",                 EbvHitT,               symbolTable);
+            BuiltInVariable("gl_HitTEXT",                EbvHitT,               symbolTable);
+            BuiltInVariable("gl_HitKindNV",              EbvHitKind,            symbolTable);
+            BuiltInVariable("gl_HitKindEXT",             EbvHitKind,            symbolTable);
+            BuiltInVariable("gl_ObjectToWorldNV",        EbvObjectToWorld,      symbolTable);
+            BuiltInVariable("gl_ObjectToWorldEXT",       EbvObjectToWorld,      symbolTable);
+            BuiltInVariable("gl_ObjectToWorld3x4EXT",    EbvObjectToWorld3x4,   symbolTable);
+            BuiltInVariable("gl_WorldToObjectNV",        EbvWorldToObject,      symbolTable);
+            BuiltInVariable("gl_WorldToObjectEXT",       EbvWorldToObject,      symbolTable);
+            BuiltInVariable("gl_WorldToObject3x4EXT",    EbvWorldToObject3x4,   symbolTable);
+            BuiltInVariable("gl_IncomingRayFlagsNV",     EbvIncomingRayFlags,   symbolTable);
+            BuiltInVariable("gl_IncomingRayFlagsEXT",    EbvIncomingRayFlags,   symbolTable);
+            BuiltInVariable("gl_DeviceIndex",            EbvDeviceIndex,        symbolTable);
 
             // GL_ARB_shader_ballot
             symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
@@ -8034,21 +8597,6 @@
 
     relateTabledBuiltins(version, profile, spvVersion, language, symbolTable);
 
-    symbolTable.relateToOperator("matrixCompMult",   EOpMul);
-    // 120 and 150 are correct for both ES and desktop
-    if (version >= 120) {
-        symbolTable.relateToOperator("outerProduct", EOpOuterProduct);
-        symbolTable.relateToOperator("transpose", EOpTranspose);
-        if (version >= 150) {
-            symbolTable.relateToOperator("determinant", EOpDeterminant);
-            symbolTable.relateToOperator("inverse", EOpMatrixInverse);
-        }
-    }
-
-    symbolTable.relateToOperator("floatBitsToInt",  EOpFloatBitsToInt);
-    symbolTable.relateToOperator("floatBitsToUint", EOpFloatBitsToUint);
-    symbolTable.relateToOperator("intBitsToFloat",  EOpIntBitsToFloat);
-    symbolTable.relateToOperator("uintBitsToFloat", EOpUintBitsToFloat);
 #ifndef GLSLANG_WEB
     symbolTable.relateToOperator("doubleBitsToInt64",  EOpDoubleBitsToInt64);
     symbolTable.relateToOperator("doubleBitsToUint64", EOpDoubleBitsToUint64);
@@ -8063,14 +8611,7 @@
 
     symbolTable.relateToOperator("int16BitsToHalf",  EOpInt16BitsToFloat16);
     symbolTable.relateToOperator("uint16BitsToHalf", EOpUint16BitsToFloat16);
-#endif
 
-    symbolTable.relateToOperator("packSnorm2x16",   EOpPackSnorm2x16);
-    symbolTable.relateToOperator("unpackSnorm2x16", EOpUnpackSnorm2x16);
-    symbolTable.relateToOperator("packUnorm2x16",   EOpPackUnorm2x16);
-    symbolTable.relateToOperator("unpackUnorm2x16", EOpUnpackUnorm2x16);
-
-#ifndef GLSLANG_WEB
     symbolTable.relateToOperator("packSnorm4x8",    EOpPackSnorm4x8);
     symbolTable.relateToOperator("unpackSnorm4x8",  EOpUnpackSnorm4x8);
     symbolTable.relateToOperator("packUnorm4x8",    EOpPackUnorm4x8);
@@ -8078,17 +8619,12 @@
 
     symbolTable.relateToOperator("packDouble2x32",    EOpPackDouble2x32);
     symbolTable.relateToOperator("unpackDouble2x32",  EOpUnpackDouble2x32);
-#endif
-
-    symbolTable.relateToOperator("packHalf2x16",    EOpPackHalf2x16);
-    symbolTable.relateToOperator("unpackHalf2x16",  EOpUnpackHalf2x16);
 
     symbolTable.relateToOperator("packInt2x32",     EOpPackInt2x32);
     symbolTable.relateToOperator("unpackInt2x32",   EOpUnpackInt2x32);
     symbolTable.relateToOperator("packUint2x32",    EOpPackUint2x32);
     symbolTable.relateToOperator("unpackUint2x32",  EOpUnpackUint2x32);
 
-#ifndef GLSLANG_WEB
     symbolTable.relateToOperator("packInt2x16",     EOpPackInt2x16);
     symbolTable.relateToOperator("unpackInt2x16",   EOpUnpackInt2x16);
     symbolTable.relateToOperator("packUint2x16",    EOpPackUint2x16);
@@ -8109,11 +8645,8 @@
     symbolTable.relateToOperator("unpack16",        EOpUnpack16);
     symbolTable.relateToOperator("unpack8",         EOpUnpack8);
 
-    symbolTable.relateToOperator("barrier",                    EOpBarrier);
     symbolTable.relateToOperator("controlBarrier",             EOpBarrier);
-    symbolTable.relateToOperator("memoryBarrier",              EOpMemoryBarrier);
     symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierAtomicCounter);
-    symbolTable.relateToOperator("memoryBarrierBuffer",        EOpMemoryBarrierBuffer);
     symbolTable.relateToOperator("memoryBarrierImage",         EOpMemoryBarrierImage);
 
     symbolTable.relateToOperator("atomicLoad",     EOpAtomicLoad);
@@ -8156,10 +8689,19 @@
     symbolTable.relateToOperator("findMSB",           EOpFindMSB);
 
     symbolTable.relateToOperator("helperInvocationEXT",  EOpIsHelperInvocation);
-#endif
+
+    symbolTable.relateToOperator("countLeadingZeros",  EOpCountLeadingZeros);
+    symbolTable.relateToOperator("countTrailingZeros", EOpCountTrailingZeros);
+    symbolTable.relateToOperator("absoluteDifference", EOpAbsDifference);
+    symbolTable.relateToOperator("addSaturate",        EOpAddSaturate);
+    symbolTable.relateToOperator("subtractSaturate",   EOpSubSaturate);
+    symbolTable.relateToOperator("average",            EOpAverage);
+    symbolTable.relateToOperator("averageRounded",     EOpAverageRounded);
+    symbolTable.relateToOperator("multiply32x16",      EOpMul32x16);
+    symbolTable.relateToOperator("debugPrintfEXT",     EOpDebugPrintf);
+
 
     if (PureOperatorBuiltins) {
-#ifndef GLSLANG_WEB
         symbolTable.relateToOperator("imageSize",               EOpImageQuerySize);
         symbolTable.relateToOperator("imageSamples",            EOpImageQuerySamples);
         symbolTable.relateToOperator("imageLoad",               EOpImageLoad);
@@ -8177,28 +8719,7 @@
 
         symbolTable.relateToOperator("subpassLoad",             EOpSubpassLoad);
         symbolTable.relateToOperator("subpassLoadMS",           EOpSubpassLoadMS);
-#endif
 
-        symbolTable.relateToOperator("textureSize",             EOpTextureQuerySize);
-        symbolTable.relateToOperator("textureQueryLod",         EOpTextureQueryLod);
-        symbolTable.relateToOperator("textureQueryLevels",      EOpTextureQueryLevels);
-        symbolTable.relateToOperator("textureSamples",          EOpTextureQuerySamples);
-        symbolTable.relateToOperator("texture",                 EOpTexture);
-        symbolTable.relateToOperator("textureProj",             EOpTextureProj);
-        symbolTable.relateToOperator("textureLod",              EOpTextureLod);
-        symbolTable.relateToOperator("textureOffset",           EOpTextureOffset);
-        symbolTable.relateToOperator("texelFetch",              EOpTextureFetch);
-        symbolTable.relateToOperator("texelFetchOffset",        EOpTextureFetchOffset);
-        symbolTable.relateToOperator("textureProjOffset",       EOpTextureProjOffset);
-        symbolTable.relateToOperator("textureLodOffset",        EOpTextureLodOffset);
-        symbolTable.relateToOperator("textureProjLod",          EOpTextureProjLod);
-        symbolTable.relateToOperator("textureProjLodOffset",    EOpTextureProjLodOffset);
-        symbolTable.relateToOperator("textureGrad",             EOpTextureGrad);
-        symbolTable.relateToOperator("textureGradOffset",       EOpTextureGradOffset);
-        symbolTable.relateToOperator("textureProjGrad",         EOpTextureProjGrad);
-        symbolTable.relateToOperator("textureProjGradOffset",   EOpTextureProjGradOffset);
-
-#ifndef GLSLANG_WEB
         symbolTable.relateToOperator("textureGather",           EOpTextureGather);
         symbolTable.relateToOperator("textureGatherOffset",     EOpTextureGatherOffset);
         symbolTable.relateToOperator("textureGatherOffsets",    EOpTextureGatherOffsets);
@@ -8214,9 +8735,11 @@
         symbolTable.relateToOperator("textureFootprintGradNV",      EOpImageSampleFootprintGradNV);
         symbolTable.relateToOperator("textureFootprintGradClampNV", EOpImageSampleFootprintGradClampNV);
 
+        if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion))
+            symbolTable.relateToOperator("ftransform", EOpFtransform);
+
         if (spvVersion.spv == 0 && (IncludeLegacy(version, profile, spvVersion) ||
             (profile == EEsProfile && version == 100))) {
-            symbolTable.relateToOperator("ftransform",               EOpFtransform);
 
             symbolTable.relateToOperator("texture1D",                EOpTexture);
             symbolTable.relateToOperator("texture1DGradARB",         EOpTextureGrad);
@@ -8440,10 +8963,8 @@
             symbolTable.relateToOperator("shadow2DEXT",              EOpTexture);
             symbolTable.relateToOperator("shadow2DProjEXT",          EOpTextureProj);
         }
-#endif
     }
 
-#ifndef GLSLANG_WEB
     switch(language) {
     case EShLangVertex:
         break;
@@ -8468,6 +8989,33 @@
             symbolTable.relateToOperator("dFdyCoarse",   EOpDPdyCoarse);
             symbolTable.relateToOperator("fwidthCoarse", EOpFwidthCoarse);
         }
+
+        if (profile != EEsProfile && version >= 460) {
+            symbolTable.relateToOperator("rayQueryInitializeEXT",                                             EOpRayQueryInitialize);
+            symbolTable.relateToOperator("rayQueryTerminateEXT",                                              EOpRayQueryTerminate);
+            symbolTable.relateToOperator("rayQueryGenerateIntersectionEXT",                                   EOpRayQueryGenerateIntersection);
+            symbolTable.relateToOperator("rayQueryConfirmIntersectionEXT",                                    EOpRayQueryConfirmIntersection);
+            symbolTable.relateToOperator("rayQueryProceedEXT",                                                EOpRayQueryProceed);
+            symbolTable.relateToOperator("rayQueryGetIntersectionTypeEXT",                                    EOpRayQueryGetIntersectionType);
+            symbolTable.relateToOperator("rayQueryGetRayTMinEXT",                                             EOpRayQueryGetRayTMin);
+            symbolTable.relateToOperator("rayQueryGetRayFlagsEXT",                                            EOpRayQueryGetRayFlags);
+            symbolTable.relateToOperator("rayQueryGetIntersectionTEXT",                                       EOpRayQueryGetIntersectionT);
+            symbolTable.relateToOperator("rayQueryGetIntersectionInstanceCustomIndexEXT",                     EOpRayQueryGetIntersectionInstanceCustomIndex);
+            symbolTable.relateToOperator("rayQueryGetIntersectionInstanceIdEXT",                              EOpRayQueryGetIntersectionInstanceId);
+            symbolTable.relateToOperator("rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT",  EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset);
+            symbolTable.relateToOperator("rayQueryGetIntersectionGeometryIndexEXT",                           EOpRayQueryGetIntersectionGeometryIndex);
+            symbolTable.relateToOperator("rayQueryGetIntersectionPrimitiveIndexEXT",                          EOpRayQueryGetIntersectionPrimitiveIndex);
+            symbolTable.relateToOperator("rayQueryGetIntersectionBarycentricsEXT",                            EOpRayQueryGetIntersectionBarycentrics);
+            symbolTable.relateToOperator("rayQueryGetIntersectionFrontFaceEXT",                               EOpRayQueryGetIntersectionFrontFace);
+            symbolTable.relateToOperator("rayQueryGetIntersectionCandidateAABBOpaqueEXT",                     EOpRayQueryGetIntersectionCandidateAABBOpaque);
+            symbolTable.relateToOperator("rayQueryGetIntersectionObjectRayDirectionEXT",                      EOpRayQueryGetIntersectionObjectRayDirection);
+            symbolTable.relateToOperator("rayQueryGetIntersectionObjectRayOriginEXT",                         EOpRayQueryGetIntersectionObjectRayOrigin);
+            symbolTable.relateToOperator("rayQueryGetWorldRayDirectionEXT",                                   EOpRayQueryGetWorldRayDirection);
+            symbolTable.relateToOperator("rayQueryGetWorldRayOriginEXT",                                      EOpRayQueryGetWorldRayOrigin);
+            symbolTable.relateToOperator("rayQueryGetIntersectionObjectToWorldEXT",                           EOpRayQueryGetIntersectionObjectToWorld);
+            symbolTable.relateToOperator("rayQueryGetIntersectionWorldToObjectEXT",                           EOpRayQueryGetIntersectionWorldToObject);
+        }
+
         symbolTable.relateToOperator("interpolateAtCentroid", EOpInterpolateAtCentroid);
         symbolTable.relateToOperator("interpolateAtSample",   EOpInterpolateAtSample);
         symbolTable.relateToOperator("interpolateAtOffset",   EOpInterpolateAtOffset);
@@ -8481,8 +9029,6 @@
         break;
 
     case EShLangCompute:
-        symbolTable.relateToOperator("memoryBarrierShared",         EOpMemoryBarrierShared);
-        symbolTable.relateToOperator("groupMemoryBarrier",          EOpGroupMemoryBarrier);
         symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
         if ((profile != EEsProfile && version >= 450) ||
             (profile == EEsProfile && version >= 320)) {
@@ -8501,27 +9047,34 @@
         symbolTable.relateToOperator("coopMatMulAddNV",            EOpCooperativeMatrixMulAdd);
         break;
 
-    case EShLangRayGenNV:
-    case EShLangClosestHitNV:
-    case EShLangMissNV:
+    case EShLangRayGen:
+    case EShLangClosestHit:
+    case EShLangMiss:
         if (profile != EEsProfile && version >= 460) {
-            symbolTable.relateToOperator("traceNV", EOpTraceNV);
-            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
+            symbolTable.relateToOperator("traceNV", EOpTrace);
+            symbolTable.relateToOperator("traceRayEXT", EOpTrace);
+            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallable);
+            symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallable);
         }
         break;
-    case EShLangIntersectNV:
-        if (profile != EEsProfile && version >= 460)
-            symbolTable.relateToOperator("reportIntersectionNV", EOpReportIntersectionNV);
-        break;
-    case EShLangAnyHitNV:
+    case EShLangIntersect:
         if (profile != EEsProfile && version >= 460) {
-            symbolTable.relateToOperator("ignoreIntersectionNV", EOpIgnoreIntersectionNV);
-            symbolTable.relateToOperator("terminateRayNV", EOpTerminateRayNV);
+            symbolTable.relateToOperator("reportIntersectionNV", EOpReportIntersection);
+            symbolTable.relateToOperator("reportIntersectionEXT", EOpReportIntersection);
+	}
+        break;
+    case EShLangAnyHit:
+        if (profile != EEsProfile && version >= 460) {
+            symbolTable.relateToOperator("ignoreIntersectionNV", EOpIgnoreIntersection);
+            symbolTable.relateToOperator("ignoreIntersectionEXT", EOpIgnoreIntersection);
+            symbolTable.relateToOperator("terminateRayNV", EOpTerminateRay);
+            symbolTable.relateToOperator("terminateRayEXT", EOpTerminateRay);
         }
         break;
-    case EShLangCallableNV:
+    case EShLangCallable:
         if (profile != EEsProfile && version >= 460) {
-            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
+            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallable);
+            symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallable);
         }
         break;
     case EShLangMeshNV:
@@ -8578,6 +9131,16 @@
             symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData"), fragData));
             SpecialQualifier("gl_FragData", EvqFragColor, EbvFragData, symbolTable);
         }
+
+        // GL_EXT_blend_func_extended
+        if (profile == EEsProfile && version >= 100) {
+           symbolTable.setVariableExtensions("gl_MaxDualSourceDrawBuffersEXT",    1, &E_GL_EXT_blend_func_extended);
+           symbolTable.setVariableExtensions("gl_SecondaryFragColorEXT",    1, &E_GL_EXT_blend_func_extended);
+           symbolTable.setVariableExtensions("gl_SecondaryFragDataEXT",    1, &E_GL_EXT_blend_func_extended);
+           SpecialQualifier("gl_SecondaryFragColorEXT", EvqVaryingOut, EbvSecondaryFragColorEXT, symbolTable);
+           SpecialQualifier("gl_SecondaryFragDataEXT", EvqVaryingOut, EbvSecondaryFragDataEXT, symbolTable);
+        }
+
         break;
 
     case EShLangTessControl:
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
old mode 100644
new mode 100755
index 93d41f7..d7049d8
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -1,7 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2015 LunarG, Inc.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2020 Google, Inc.
 // Copyright (C) 2017 ARM Limited.
 //
 // All rights reserved.
@@ -538,7 +538,7 @@
         return false;
     case EbtAtomicUint:
     case EbtSampler:
-    case EbtAccStructNV:
+    case EbtAccStruct:
         // opaque types can be passed to functions
         if (op == EOpFunction)
             break;
@@ -562,6 +562,237 @@
     return true;
 }
 
+bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& newOp) const
+{
+    switch (dst) {
+#ifndef GLSLANG_WEB
+    case EbtDouble:
+        switch (src) {
+        case EbtUint:    newOp = EOpConvUintToDouble;    break;
+        case EbtBool:    newOp = EOpConvBoolToDouble;    break;
+        case EbtFloat:   newOp = EOpConvFloatToDouble;   break;
+        case EbtInt:     newOp = EOpConvIntToDouble;     break;
+        case EbtInt8:    newOp = EOpConvInt8ToDouble;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToDouble;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToDouble;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToDouble;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
+        case EbtInt64:   newOp = EOpConvInt64ToDouble;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToDouble;  break;
+        default:
+            return false;
+        }
+        break;
+#endif
+    case EbtFloat:
+        switch (src) {
+        case EbtInt:     newOp = EOpConvIntToFloat;     break;
+        case EbtUint:    newOp = EOpConvUintToFloat;    break;
+        case EbtBool:    newOp = EOpConvBoolToFloat;    break;
+#ifndef GLSLANG_WEB
+        case EbtDouble:  newOp = EOpConvDoubleToFloat;  break;
+        case EbtInt8:    newOp = EOpConvInt8ToFloat;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToFloat;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToFloat;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToFloat;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
+        case EbtInt64:   newOp = EOpConvInt64ToFloat;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToFloat;  break;
+#endif
+        default:
+            return false;
+        }
+        break;
+#ifndef GLSLANG_WEB
+    case EbtFloat16:
+        switch (src) {
+        case EbtInt8:   newOp = EOpConvInt8ToFloat16;   break;
+        case EbtUint8:  newOp = EOpConvUint8ToFloat16;  break;
+        case EbtInt16:  newOp = EOpConvInt16ToFloat16;  break;
+        case EbtUint16: newOp = EOpConvUint16ToFloat16; break;
+        case EbtInt:    newOp = EOpConvIntToFloat16;    break;
+        case EbtUint:   newOp = EOpConvUintToFloat16;   break;
+        case EbtBool:   newOp = EOpConvBoolToFloat16;   break;
+        case EbtFloat:  newOp = EOpConvFloatToFloat16;  break;
+        case EbtDouble: newOp = EOpConvDoubleToFloat16; break;
+        case EbtInt64:  newOp = EOpConvInt64ToFloat16;  break;
+        case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
+        default:
+            return false;
+        }
+        break;
+#endif
+    case EbtBool:
+        switch (src) {
+        case EbtInt:     newOp = EOpConvIntToBool;     break;
+        case EbtUint:    newOp = EOpConvUintToBool;    break;
+        case EbtFloat:   newOp = EOpConvFloatToBool;   break;
+#ifndef GLSLANG_WEB
+        case EbtDouble:  newOp = EOpConvDoubleToBool;  break;
+        case EbtInt8:    newOp = EOpConvInt8ToBool;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToBool;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToBool;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToBool;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
+        case EbtInt64:   newOp = EOpConvInt64ToBool;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToBool;  break;
+#endif
+        default:
+            return false;
+        }
+        break;
+#ifndef GLSLANG_WEB
+    case EbtInt8:
+        switch (src) {
+        case EbtUint8:   newOp = EOpConvUint8ToInt8;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToInt8;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToInt8;  break;
+        case EbtInt:     newOp = EOpConvIntToInt8;     break;
+        case EbtUint:    newOp = EOpConvUintToInt8;    break;
+        case EbtInt64:   newOp = EOpConvInt64ToInt8;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToInt8;  break;
+        case EbtBool:    newOp = EOpConvBoolToInt8;    break;
+        case EbtFloat:   newOp = EOpConvFloatToInt8;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToInt8;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt8; break;
+        default:
+            return false;
+        }
+        break;
+    case EbtUint8:
+        switch (src) {
+        case EbtInt8:    newOp = EOpConvInt8ToUint8;    break;
+        case EbtInt16:   newOp = EOpConvInt16ToUint8;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToUint8;  break;
+        case EbtInt:     newOp = EOpConvIntToUint8;     break;
+        case EbtUint:    newOp = EOpConvUintToUint8;    break;
+        case EbtInt64:   newOp = EOpConvInt64ToUint8;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToUint8;  break;
+        case EbtBool:    newOp = EOpConvBoolToUint8;    break;
+        case EbtFloat:   newOp = EOpConvFloatToUint8;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToUint8;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint8; break;
+        default:
+            return false;
+        }
+        break;
+
+    case EbtInt16:
+        switch (src) {
+        case EbtUint8:   newOp = EOpConvUint8ToInt16;   break;
+        case EbtInt8:    newOp = EOpConvInt8ToInt16;    break;
+        case EbtUint16:  newOp = EOpConvUint16ToInt16;  break;
+        case EbtInt:     newOp = EOpConvIntToInt16;     break;
+        case EbtUint:    newOp = EOpConvUintToInt16;    break;
+        case EbtInt64:   newOp = EOpConvInt64ToInt16;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToInt16;  break;
+        case EbtBool:    newOp = EOpConvBoolToInt16;    break;
+        case EbtFloat:   newOp = EOpConvFloatToInt16;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToInt16;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
+        default:
+            return false;
+        }
+        break;
+    case EbtUint16:
+        switch (src) {
+        case EbtInt8:    newOp = EOpConvInt8ToUint16;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToUint16;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToUint16;   break;
+        case EbtInt:     newOp = EOpConvIntToUint16;     break;
+        case EbtUint:    newOp = EOpConvUintToUint16;    break;
+        case EbtInt64:   newOp = EOpConvInt64ToUint16;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToUint16;  break;
+        case EbtBool:    newOp = EOpConvBoolToUint16;    break;
+        case EbtFloat:   newOp = EOpConvFloatToUint16;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToUint16;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
+        default:
+            return false;
+        }
+        break;
+#endif
+
+    case EbtInt:
+        switch (src) {
+        case EbtUint:    newOp = EOpConvUintToInt;    break;
+        case EbtBool:    newOp = EOpConvBoolToInt;    break;
+        case EbtFloat:   newOp = EOpConvFloatToInt;   break;
+#ifndef GLSLANG_WEB
+        case EbtInt8:    newOp = EOpConvInt8ToInt;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToInt;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToInt;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToInt;  break;
+        case EbtDouble:  newOp = EOpConvDoubleToInt;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
+        case EbtInt64:   newOp = EOpConvInt64ToInt;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToInt;  break;
+#endif
+        default:
+            return false;
+        }
+        break;
+    case EbtUint:
+        switch (src) {
+        case EbtInt:     newOp = EOpConvIntToUint;     break;
+        case EbtBool:    newOp = EOpConvBoolToUint;    break;
+        case EbtFloat:   newOp = EOpConvFloatToUint;   break;
+#ifndef GLSLANG_WEB
+        case EbtInt8:    newOp = EOpConvInt8ToUint;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToUint;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToUint;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToUint;  break;
+        case EbtDouble:  newOp = EOpConvDoubleToUint;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
+        case EbtInt64:   newOp = EOpConvInt64ToUint;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToUint;  break;
+#endif
+        default:
+            return false;
+        }
+        break;
+#ifndef GLSLANG_WEB
+    case EbtInt64:
+        switch (src) {
+        case EbtInt8:    newOp = EOpConvInt8ToInt64;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToInt64;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToInt64;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToInt64;  break;
+        case EbtInt:     newOp = EOpConvIntToInt64;     break;
+        case EbtUint:    newOp = EOpConvUintToInt64;    break;
+        case EbtBool:    newOp = EOpConvBoolToInt64;    break;
+        case EbtFloat:   newOp = EOpConvFloatToInt64;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToInt64;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
+        case EbtUint64:  newOp = EOpConvUint64ToInt64;  break;
+        default:
+            return false;
+        }
+        break;
+    case EbtUint64:
+        switch (src) {
+        case EbtInt8:    newOp = EOpConvInt8ToUint64;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToUint64;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToUint64;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToUint64;  break;
+        case EbtInt:     newOp = EOpConvIntToUint64;     break;
+        case EbtUint:    newOp = EOpConvUintToUint64;    break;
+        case EbtBool:    newOp = EOpConvBoolToUint64;    break;
+        case EbtFloat:   newOp = EOpConvFloatToUint64;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToUint64;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
+        case EbtInt64:   newOp = EOpConvInt64ToUint64;   break;
+        default:
+            return false;
+        }
+        break;
+#endif
+    default:
+        return false;
+    }
+    return true;
+}
+
 // This is 'mechanism' here, it does any conversion told.
 // It is about basic type, not about shape.
 // The policy comes from the shader or the calling code.
@@ -570,10 +801,8 @@
     //
     // Add a new newNode for the conversion.
     //
-    TIntermUnary* newNode = nullptr;
 
-    TOperator newOp = EOpNull;
-
+#ifndef GLSLANG_WEB
     bool convertToIntTypes = (convertTo == EbtInt8  || convertTo == EbtUint8  ||
                               convertTo == EbtInt16 || convertTo == EbtUint16 ||
                               convertTo == EbtInt   || convertTo == EbtUint   ||
@@ -607,231 +836,11 @@
             (node->getBasicType() == EbtFloat16 && ! convertToFloatTypes))
             return nullptr;
     }
-
-    switch (convertTo) {
-#ifndef GLSLANG_WEB
-    case EbtDouble:
-        switch (node->getBasicType()) {
-        case EbtUint:    newOp = EOpConvUintToDouble;    break;
-        case EbtBool:    newOp = EOpConvBoolToDouble;    break;
-        case EbtFloat:   newOp = EOpConvFloatToDouble;   break;
-        case EbtInt:     newOp = EOpConvIntToDouble;     break;
-        case EbtInt8:    newOp = EOpConvInt8ToDouble;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToDouble;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToDouble;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToDouble;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
-        case EbtInt64:   newOp = EOpConvInt64ToDouble;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToDouble;  break;
-        default:
-            return nullptr;
-        }
-        break;
-#endif
-    case EbtFloat:
-        switch (node->getBasicType()) {
-        case EbtInt:     newOp = EOpConvIntToFloat;     break;
-        case EbtUint:    newOp = EOpConvUintToFloat;    break;
-        case EbtBool:    newOp = EOpConvBoolToFloat;    break;
-#ifndef GLSLANG_WEB
-        case EbtDouble:  newOp = EOpConvDoubleToFloat;  break;
-        case EbtInt8:    newOp = EOpConvInt8ToFloat;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToFloat;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToFloat;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToFloat;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
-        case EbtInt64:   newOp = EOpConvInt64ToFloat;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToFloat;  break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-#ifndef GLSLANG_WEB
-    case EbtFloat16:
-        switch (node->getBasicType()) {
-        case EbtInt8:   newOp = EOpConvInt8ToFloat16;   break;
-        case EbtUint8:  newOp = EOpConvUint8ToFloat16;  break;
-        case EbtInt16:  newOp = EOpConvInt16ToFloat16;  break;
-        case EbtUint16: newOp = EOpConvUint16ToFloat16; break;
-        case EbtInt:    newOp = EOpConvIntToFloat16;    break;
-        case EbtUint:   newOp = EOpConvUintToFloat16;   break;
-        case EbtBool:   newOp = EOpConvBoolToFloat16;   break;
-        case EbtFloat:  newOp = EOpConvFloatToFloat16;  break;
-        case EbtDouble: newOp = EOpConvDoubleToFloat16; break;
-        case EbtInt64:  newOp = EOpConvInt64ToFloat16;  break;
-        case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
-        default:
-            return nullptr;
-        }
-        break;
-#endif
-    case EbtBool:
-        switch (node->getBasicType()) {
-        case EbtInt:     newOp = EOpConvIntToBool;     break;
-        case EbtUint:    newOp = EOpConvUintToBool;    break;
-        case EbtFloat:   newOp = EOpConvFloatToBool;   break;
-#ifndef GLSLANG_WEB
-        case EbtDouble:  newOp = EOpConvDoubleToBool;  break;
-        case EbtInt8:    newOp = EOpConvInt8ToBool;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToBool;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToBool;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToBool;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
-        case EbtInt64:   newOp = EOpConvInt64ToBool;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToBool;  break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-#ifndef GLSLANG_WEB
-    case EbtInt8:
-        switch (node->getBasicType()) {
-        case EbtUint8:   newOp = EOpConvUint8ToInt8;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToInt8;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToInt8;  break;
-        case EbtInt:     newOp = EOpConvIntToInt8;     break;
-        case EbtUint:    newOp = EOpConvUintToInt8;    break;
-        case EbtInt64:   newOp = EOpConvInt64ToInt8;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToInt8;  break;
-        case EbtBool:    newOp = EOpConvBoolToInt8;    break;
-        case EbtFloat:   newOp = EOpConvFloatToInt8;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToInt8;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToInt8; break;
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint8:
-        switch (node->getBasicType()) {
-        case EbtInt8:    newOp = EOpConvInt8ToUint8;    break;
-        case EbtInt16:   newOp = EOpConvInt16ToUint8;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToUint8;  break;
-        case EbtInt:     newOp = EOpConvIntToUint8;     break;
-        case EbtUint:    newOp = EOpConvUintToUint8;    break;
-        case EbtInt64:   newOp = EOpConvInt64ToUint8;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToUint8;  break;
-        case EbtBool:    newOp = EOpConvBoolToUint8;    break;
-        case EbtFloat:   newOp = EOpConvFloatToUint8;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToUint8;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToUint8; break;
-        default:
-            return nullptr;
-        }
-        break;
-
-    case EbtInt16:
-        switch (node->getBasicType()) {
-        case EbtUint8:   newOp = EOpConvUint8ToInt16;   break;
-        case EbtInt8:    newOp = EOpConvInt8ToInt16;    break;
-        case EbtUint16:  newOp = EOpConvUint16ToInt16;  break;
-        case EbtInt:     newOp = EOpConvIntToInt16;     break;
-        case EbtUint:    newOp = EOpConvUintToInt16;    break;
-        case EbtInt64:   newOp = EOpConvInt64ToInt16;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToInt16;  break;
-        case EbtBool:    newOp = EOpConvBoolToInt16;    break;
-        case EbtFloat:   newOp = EOpConvFloatToInt16;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToInt16;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint16:
-        switch (node->getBasicType()) {
-        case EbtInt8:    newOp = EOpConvInt8ToUint16;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToUint16;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToUint16;   break;
-        case EbtInt:     newOp = EOpConvIntToUint16;     break;
-        case EbtUint:    newOp = EOpConvUintToUint16;    break;
-        case EbtInt64:   newOp = EOpConvInt64ToUint16;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToUint16;  break;
-        case EbtBool:    newOp = EOpConvBoolToUint16;    break;
-        case EbtFloat:   newOp = EOpConvFloatToUint16;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToUint16;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
-        default:
-            return nullptr;
-        }
-        break;
 #endif
 
-    case EbtInt:
-        switch (node->getBasicType()) {
-        case EbtUint:    newOp = EOpConvUintToInt;    break;
-        case EbtBool:    newOp = EOpConvBoolToInt;    break;
-        case EbtFloat:   newOp = EOpConvFloatToInt;   break;
-#ifndef GLSLANG_WEB
-        case EbtInt8:    newOp = EOpConvInt8ToInt;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToInt;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToInt;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToInt;  break;
-        case EbtDouble:  newOp = EOpConvDoubleToInt;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
-        case EbtInt64:   newOp = EOpConvInt64ToInt;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToInt;  break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint:
-        switch (node->getBasicType()) {
-        case EbtInt:     newOp = EOpConvIntToUint;     break;
-        case EbtBool:    newOp = EOpConvBoolToUint;    break;
-        case EbtFloat:   newOp = EOpConvFloatToUint;   break;
-#ifndef GLSLANG_WEB
-        case EbtInt8:    newOp = EOpConvInt8ToUint;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToUint;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToUint;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToUint;  break;
-        case EbtDouble:  newOp = EOpConvDoubleToUint;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
-        case EbtInt64:   newOp = EOpConvInt64ToUint;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToUint;  break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-#ifndef GLSLANG_WEB
-    case EbtInt64:
-        switch (node->getBasicType()) {
-        case EbtInt8:    newOp = EOpConvInt8ToInt64;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToInt64;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToInt64;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToInt64;  break;
-        case EbtInt:     newOp = EOpConvIntToInt64;     break;
-        case EbtUint:    newOp = EOpConvUintToInt64;    break;
-        case EbtBool:    newOp = EOpConvBoolToInt64;    break;
-        case EbtFloat:   newOp = EOpConvFloatToInt64;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToInt64;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
-        case EbtUint64:  newOp = EOpConvUint64ToInt64;  break;
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint64:
-        switch (node->getBasicType()) {
-        case EbtInt8:    newOp = EOpConvInt8ToUint64;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToUint64;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToUint64;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToUint64;  break;
-        case EbtInt:     newOp = EOpConvIntToUint64;     break;
-        case EbtUint:    newOp = EOpConvUintToUint64;    break;
-        case EbtBool:    newOp = EOpConvBoolToUint64;    break;
-        case EbtFloat:   newOp = EOpConvFloatToUint64;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToUint64;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
-        case EbtInt64:   newOp = EOpConvInt64ToUint64;   break;
-        default:
-            return nullptr;
-        }
-        break;
-#endif
-    default:
+    TIntermUnary* newNode = nullptr;
+    TOperator newOp = EOpNull;
+    if (!buildConvertOp(convertTo, node->getBasicType(), newOp)) {
         return nullptr;
     }
 
@@ -839,11 +848,14 @@
     newNode = addUnaryNode(newOp, node, node->getLoc(), newType);
 
     if (node->getAsConstantUnion()) {
+#ifndef GLSLANG_WEB
         // 8/16-bit storage extensions don't support 8/16-bit constants, so don't fold conversions
         // to those types
         if ((getArithemeticInt8Enabled() || !(convertTo == EbtInt8 || convertTo == EbtUint8)) &&
             (getArithemeticInt16Enabled() || !(convertTo == EbtInt16 || convertTo == EbtUint16)) &&
-            (getArithemeticFloat16Enabled() || !(convertTo == EbtFloat16))) {
+            (getArithemeticFloat16Enabled() || !(convertTo == EbtFloat16)))
+#endif
+        {
             TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType);
             if (folded)
                 return folded;
@@ -1117,6 +1129,7 @@
     case EOpLit:
     case EOpMax:
     case EOpMin:
+    case EOpMod:
     case EOpModf:
     case EOpPow:
     case EOpReflect:
@@ -1607,7 +1620,7 @@
 //
 bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperator op) const
 {
-    if (isEsProfile() || version == 110)
+    if ((isEsProfile() && version < 310 ) || version == 110)
         return false;
 
     if (from == to)
@@ -1654,7 +1667,7 @@
                                 extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16) ||
                                 extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float32) ||
                                 extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float64);
-
+    
     if (explicitTypesEnabled) {
         // integral promotions
         if (isIntegralPromotion(from, to)) {
@@ -1686,6 +1699,30 @@
             if (from == EbtBool && (to == EbtInt || to == EbtUint || to == EbtFloat))
                 return true;
         }
+    } else if (isEsProfile()) {
+        switch (to) {
+            case EbtFloat:
+                switch (from) {
+                case EbtInt:
+                case EbtUint:
+                    return extensionRequested(E_GL_EXT_shader_implicit_conversions);
+                case EbtFloat:
+                    return true;
+                default:
+                    return false;
+                }
+            case EbtUint:
+                switch (from) {
+                case EbtInt:
+                    return extensionRequested(E_GL_EXT_shader_implicit_conversions);
+                case EbtUint:
+                    return true;
+                default:
+                    return false;
+                }
+            default:
+                return false;
+        }        
     } else {
         switch (to) {
         case EbtDouble:
@@ -1718,15 +1755,14 @@
                 return extensionRequested(E_GL_AMD_gpu_shader_int16);
             case EbtFloat16:
                 return 
-                    extensionRequested(E_GL_AMD_gpu_shader_half_float) ||
-                    getSource() == EShSourceHlsl;
+                    extensionRequested(E_GL_AMD_gpu_shader_half_float) || getSource() == EShSourceHlsl;
             default:
                  return false;
             }
         case EbtUint:
             switch (from) {
             case EbtInt:
-                 return version >= 400 || getSource() == EShSourceHlsl;
+                return version >= 400 || getSource() == EShSourceHlsl;
             case EbtUint:
                 return true;
             case EbtBool:
@@ -1918,7 +1954,9 @@
     TBasicType res0 = EbtNumTypes;
     TBasicType res1 = EbtNumTypes;
 
-    if (isEsProfile() || version == 110)
+    if ((isEsProfile() && 
+        (version < 310 || !extensionRequested(E_GL_EXT_shader_implicit_conversions))) || 
+        version == 110)
         return std::make_tuple(res0, res1);
 
     if (getSource() == EShSourceHlsl) {
@@ -2761,6 +2799,9 @@
     case EShTexSampTransUpgradeTextureRemoveSampler:
         performTextureUpgradeAndSamplerRemovalTransformation(root);
         break;
+    case EShTexSampTransCount:
+        assert(0);
+        break;
     }
 #endif
 
@@ -3221,10 +3262,17 @@
 
             return false;
         break;
-
     default:
-        if (operand->getBasicType() != EbtFloat)
+        // HLSL uses this path for initial function signature finding for built-ins
+        // taking a single argument, which generally don't participate in
+        // operator-based type promotion (type conversion will occur later).
+        // For now, scalar argument cases are relying on the setType() call below.
+        if (getSource() == EShSourceHlsl)
+            break;
 
+        // GLSL only allows integer arguments for the cases identified above in the
+        // case statements.
+        if (operand->getBasicType() != EbtFloat)
             return false;
     }
 
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index 282ecca..b464009 100644
--- a/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/glslang/MachineIndependent/ParseContextBase.cpp
@@ -157,11 +157,11 @@
     case EvqBuffer:
         if (node->getQualifier().isReadOnly())
             message = "can't modify a readonly buffer";
-        if (node->getQualifier().isShaderRecordNV())
+        if (node->getQualifier().isShaderRecord())
             message = "can't modify a shaderrecordnv qualified buffer";
         break;
-    case EvqHitAttrNV:
-        if (language != EShLangIntersectNV)
+    case EvqHitAttr:
+        if (language != EShLangIntersect)
             message = "cannot modify hitAttributeNV in this stage";
         break;
 #endif
@@ -181,9 +181,12 @@
         case EbtAtomicUint:
             message = "can't modify an atomic_uint";
             break;
-        case EbtAccStructNV:
+        case EbtAccStruct:
             message = "can't modify accelerationStructureNV";
             break;
+        case EbtRayQuery:
+            message = "can't modify rayQueryEXT";
+            break;
 #endif
         default:
             break;
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index b5ea803..117c164 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -2,7 +2,8 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2015 LunarG, Inc.
 // Copyright (C) 2015-2018 Google, Inc.
-// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2017, 2019 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -427,8 +428,18 @@
 #ifndef GLSLANG_WEB
     if (base->isReference() && ! base->isArray()) {
         requireExtensions(loc, 1, &E_GL_EXT_buffer_reference2, "buffer reference indexing");
-        result = intermediate.addBinaryMath(EOpAdd, base, index, loc);
-        result->setType(base->getType());
+        if (base->getType().getReferentType()->containsUnsizedArray()) {
+            error(loc, "cannot index reference to buffer containing an unsized array", "", "");
+            result = nullptr;
+        } else {
+            result = intermediate.addBinaryMath(EOpAdd, base, index, loc);
+            if (result != nullptr)
+                result->setType(base->getType());
+        }
+        if (result == nullptr) {
+            error(loc, "cannot index buffer reference", "", "");
+            result = intermediate.addConstantUnion(0.0, EbtFloat, loc);
+        }
         return result;
     }
     if (base->getAsSymbolNode() && isIoResizeArray(base->getType()))
@@ -821,50 +832,7 @@
     TIntermTyped* result = base;
     if ((base->isVector() || base->isScalar()) &&
         (base->isFloatingDomain() || base->isIntegerDomain() || base->getBasicType() == EbtBool)) {
-        if (base->isScalar()) {
-            const char* dotFeature = "scalar swizzle";
-            requireProfile(loc, ~EEsProfile, dotFeature);
-            profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, dotFeature);
-        }
-
-        TSwizzleSelectors<TVectorSelector> selectors;
-        parseSwizzleSelector(loc, field, base->getVectorSize(), selectors);
-
-        if (base->isVector() && selectors.size() != 1 && base->getType().contains16BitFloat())
-            requireFloat16Arithmetic(loc, ".", "can't swizzle types containing float16");
-        if (base->isVector() && selectors.size() != 1 && base->getType().contains16BitInt())
-            requireInt16Arithmetic(loc, ".", "can't swizzle types containing (u)int16");
-        if (base->isVector() && selectors.size() != 1 && base->getType().contains8BitInt())
-            requireInt8Arithmetic(loc, ".", "can't swizzle types containing (u)int8");
-
-        if (base->isScalar()) {
-            if (selectors.size() == 1)
-                return result;
-            else {
-                TType type(base->getBasicType(), EvqTemporary, selectors.size());
-                // Swizzle operations propagate specialization-constantness
-                if (base->getQualifier().isSpecConstant())
-                    type.getQualifier().makeSpecConstant();
-                return addConstructor(loc, base, type);
-            }
-        }
-
-        if (base->getType().getQualifier().isFrontEndConstant())
-            result = intermediate.foldSwizzle(base, selectors, loc);
-        else {
-            if (selectors.size() == 1) {
-                TIntermTyped* index = intermediate.addConstantUnion(selectors[0], loc);
-                result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
-                result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision));
-            } else {
-                TIntermTyped* index = intermediate.addSwizzle(selectors, loc);
-                result = intermediate.addIndex(EOpVectorSwizzle, base, index, loc);
-                result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision, selectors.size()));
-            }
-            // Swizzle operations propagate specialization-constantness
-            if (base->getType().getQualifier().isSpecConstant())
-                result->getWritableType().getQualifier().makeSpecConstant();
-        }
+        result = handleDotSwizzle(loc, base, field);
     } else if (base->isStruct() || base->isReference()) {
         const TTypeList* fields = base->isReference() ?
                                   base->getType().getReferentType()->getStruct() :
@@ -905,6 +873,60 @@
     return result;
 }
 
+//
+// Handle seeing a base.swizzle, a subset of base.identifier in the grammar.
+//
+TIntermTyped* TParseContext::handleDotSwizzle(const TSourceLoc& loc, TIntermTyped* base, const TString& field)
+{
+    TIntermTyped* result = base;
+    if (base->isScalar()) {
+        const char* dotFeature = "scalar swizzle";
+        requireProfile(loc, ~EEsProfile, dotFeature);
+        profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, dotFeature);
+    }
+
+    TSwizzleSelectors<TVectorSelector> selectors;
+    parseSwizzleSelector(loc, field, base->getVectorSize(), selectors);
+
+    if (base->isVector() && selectors.size() != 1 && base->getType().contains16BitFloat())
+        requireFloat16Arithmetic(loc, ".", "can't swizzle types containing float16");
+    if (base->isVector() && selectors.size() != 1 && base->getType().contains16BitInt())
+        requireInt16Arithmetic(loc, ".", "can't swizzle types containing (u)int16");
+    if (base->isVector() && selectors.size() != 1 && base->getType().contains8BitInt())
+        requireInt8Arithmetic(loc, ".", "can't swizzle types containing (u)int8");
+
+    if (base->isScalar()) {
+        if (selectors.size() == 1)
+            return result;
+        else {
+            TType type(base->getBasicType(), EvqTemporary, selectors.size());
+            // Swizzle operations propagate specialization-constantness
+            if (base->getQualifier().isSpecConstant())
+                type.getQualifier().makeSpecConstant();
+            return addConstructor(loc, base, type);
+        }
+    }
+
+    if (base->getType().getQualifier().isFrontEndConstant())
+        result = intermediate.foldSwizzle(base, selectors, loc);
+    else {
+        if (selectors.size() == 1) {
+            TIntermTyped* index = intermediate.addConstantUnion(selectors[0], loc);
+            result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
+            result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision));
+        } else {
+            TIntermTyped* index = intermediate.addSwizzle(selectors, loc);
+            result = intermediate.addIndex(EOpVectorSwizzle, base, index, loc);
+            result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision, selectors.size()));
+        }
+        // Swizzle operations propagate specialization-constantness
+        if (base->getType().getQualifier().isSpecConstant())
+            result->getWritableType().getQualifier().makeSpecConstant();
+    }
+
+    return result;
+}
+
 void TParseContext::blockMemberExtensionCheck(const TSourceLoc& loc, const TIntermTyped* base, int member, const TString& memberName)
 {
     // a block that needs extension checking is either 'base', or if arrayed,
@@ -1160,6 +1182,7 @@
                     const TQualifier& argQualifier = argType.getQualifier();
                     if (argQualifier.isMemory() && (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)
                             error(arguments->getLoc(), message, "volatile", "");
                         if (argQualifier.coherent && ! (formalQualifier.devicecoherent || formalQualifier.coherent))
@@ -1179,6 +1202,7 @@
                         // Don't check 'restrict', it is different than the rest:
                         // "...but only restrict can be taken away from a calling argument, by a formal parameter that
                         // lacks the restrict qualifier..."
+#endif
                     }
                     if (!builtIn && argQualifier.getFormat() != formalQualifier.getFormat()) {
                         // we have mismatched formats, which should only be allowed if writeonly
@@ -1351,6 +1375,9 @@
         case EOpInterpolateAtSample:
             numArgs = 1;
             break;
+        case EOpDebugPrintf:
+            numArgs = 0;
+            break;
         default:
             break;
         }
@@ -1670,6 +1697,9 @@
     unsigned int semantics = 0, storageClassSemantics = 0;
     unsigned int semantics2 = 0, storageClassSemantics2 = 0;
 
+    const TIntermTyped* arg0 = (*argp)[0]->getAsTyped();
+    const bool isMS = arg0->getBasicType() == EbtSampler && arg0->getType().getSampler().isMultiSample();
+
     // Grab the semantics and storage class semantics from the operands, based on opcode
     switch (callNode.getOp()) {
     case EOpAtomicAdd:
@@ -1702,18 +1732,18 @@
     case EOpImageAtomicXor:
     case EOpImageAtomicExchange:
     case EOpImageAtomicStore:
-        storageClassSemantics = (*argp)[4]->getAsConstantUnion()->getConstArray()[0].getIConst();
-        semantics = (*argp)[5]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        storageClassSemantics = (*argp)[isMS ? 5 : 4]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[isMS ? 6 : 5]->getAsConstantUnion()->getConstArray()[0].getIConst();
         break;
     case EOpImageAtomicLoad:
-        storageClassSemantics = (*argp)[3]->getAsConstantUnion()->getConstArray()[0].getIConst();
-        semantics = (*argp)[4]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        storageClassSemantics = (*argp)[isMS ? 4 : 3]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[isMS ? 5 : 4]->getAsConstantUnion()->getConstArray()[0].getIConst();
         break;
     case EOpImageAtomicCompSwap:
-        storageClassSemantics = (*argp)[5]->getAsConstantUnion()->getConstArray()[0].getIConst();
-        semantics = (*argp)[6]->getAsConstantUnion()->getConstArray()[0].getIConst();
-        storageClassSemantics2 = (*argp)[7]->getAsConstantUnion()->getConstArray()[0].getIConst();
-        semantics2 = (*argp)[8]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        storageClassSemantics = (*argp)[isMS ? 6 : 5]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics = (*argp)[isMS ? 7 : 6]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        storageClassSemantics2 = (*argp)[isMS ? 8 : 7]->getAsConstantUnion()->getConstArray()[0].getIConst();
+        semantics2 = (*argp)[isMS ? 9 : 8]->getAsConstantUnion()->getConstArray()[0].getIConst();
         break;
 
     case EOpBarrier:
@@ -2004,18 +2034,20 @@
         if (arg > 0) {
 
 #ifndef GLSLANG_WEB
-            bool f16ShadowCompare = (*argp)[1]->getAsTyped()->getBasicType() == EbtFloat16 && arg0->getType().getSampler().shadow;
+            bool f16ShadowCompare = (*argp)[1]->getAsTyped()->getBasicType() == EbtFloat16 &&
+                                    arg0->getType().getSampler().shadow;
             if (f16ShadowCompare)
                 ++arg;
 #endif
-            if (! (*argp)[arg]->getAsConstantUnion())
+            if (! (*argp)[arg]->getAsTyped()->getQualifier().isConstant())
                 error(loc, "argument must be compile-time constant", "texel offset", "");
-            else {
+            else if ((*argp)[arg]->getAsConstantUnion()) {
                 const TType& type = (*argp)[arg]->getAsTyped()->getType();
                 for (int c = 0; c < type.getVectorSize(); ++c) {
                     int offset = (*argp)[arg]->getAsConstantUnion()->getConstArray()[c].getIConst();
                     if (offset > resources.maxProgramTexelOffset || offset < resources.minProgramTexelOffset)
-                        error(loc, "value is out of range:", "texel offset", "[gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]");
+                        error(loc, "value is out of range:", "texel offset",
+                              "[gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]");
                 }
             }
         }
@@ -2024,15 +2056,32 @@
     }
 
 #ifndef GLSLANG_WEB
-    case EOpTraceNV:
+    case EOpTrace:
         if (!(*argp)[10]->getAsConstantUnion())
             error(loc, "argument must be compile-time constant", "payload number", "");
         break;
-    case EOpExecuteCallableNV:
+    case EOpExecuteCallable:
         if (!(*argp)[1]->getAsConstantUnion())
             error(loc, "argument must be compile-time constant", "callable data number", "");
         break;
 
+    case EOpRayQueryGetIntersectionType:
+    case EOpRayQueryGetIntersectionT:
+    case EOpRayQueryGetIntersectionInstanceCustomIndex:
+    case EOpRayQueryGetIntersectionInstanceId:
+    case EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset:
+    case EOpRayQueryGetIntersectionGeometryIndex:
+    case EOpRayQueryGetIntersectionPrimitiveIndex:
+    case EOpRayQueryGetIntersectionBarycentrics:
+    case EOpRayQueryGetIntersectionFrontFace:
+    case EOpRayQueryGetIntersectionObjectRayDirection:
+    case EOpRayQueryGetIntersectionObjectRayOrigin:
+    case EOpRayQueryGetIntersectionObjectToWorld:
+    case EOpRayQueryGetIntersectionWorldToObject:
+        if (!(*argp)[1]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "committed", "");
+        break;
+
     case EOpTextureQuerySamples:
     case EOpImageQuerySamples:
         // GL_ARB_shader_texture_image_samples
@@ -2155,6 +2204,7 @@
         break;
 
     case EOpSubgroupBroadcast:
+    case EOpSubgroupQuadBroadcast:
         if (spvVersion.spv < EShTargetSpv_1_5) {
             // <id> must be an integral constant expression.
             if ((*argp)[1]->getAsConstantUnion() == nullptr)
@@ -2169,6 +2219,28 @@
             memorySemanticsCheck(loc, fnCandidate, callNode);
         }
         break;
+
+    case EOpMix:
+        if (profile == EEsProfile && version < 310) {
+            // Look for specific signatures
+            if ((*argp)[0]->getAsTyped()->getBasicType() != EbtFloat &&
+                (*argp)[1]->getAsTyped()->getBasicType() != EbtFloat &&
+                (*argp)[2]->getAsTyped()->getBasicType() == EbtBool) {
+                requireExtensions(loc, 1, &E_GL_EXT_shader_integer_mix, "specific signature of builtin mix");
+            }
+        }
+
+        if (profile != EEsProfile && version < 450) {
+            if ((*argp)[0]->getAsTyped()->getBasicType() != EbtFloat && 
+                (*argp)[0]->getAsTyped()->getBasicType() != EbtDouble &&
+                (*argp)[1]->getAsTyped()->getBasicType() != EbtFloat &&
+                (*argp)[1]->getAsTyped()->getBasicType() != EbtDouble &&
+                (*argp)[2]->getAsTyped()->getBasicType() == EbtBool) {
+                requireExtensions(loc, 1, &E_GL_EXT_shader_integer_mix, fnCandidate.getName().c_str());
+            }
+        }
+
+        break;
 #endif
 
     default:
@@ -2200,7 +2272,7 @@
         break;
     }
 
-    if (callNode.getOp() > EOpSubgroupGuardStart && callNode.getOp() < EOpSubgroupGuardStop) {
+    if (callNode.isSubgroup()) {
         // these require SPIR-V 1.3
         if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_3)
             error(loc, "requires SPIR-V 1.3", "subgroup op", "");
@@ -2666,14 +2738,14 @@
         if (builtInName(identifier))
             error(loc, "identifiers starting with \"gl_\" are reserved", identifier.c_str(), "");
 
-        // "__" are not supposed to be an error.  ES 310 (and desktop) added the clarification:
+        // "__" are not supposed to be an error.  ES 300 (and desktop) added the clarification:
         // "In addition, all identifiers containing two consecutive underscores (__) are
         // reserved; using such a name does not itself result in an error, but may result
         // in undefined behavior."
         // however, before that, ES tests required an error.
         if (identifier.find("__") != TString::npos) {
-            if (isEsProfile() && version <= 300)
-                error(loc, "identifiers containing consecutive underscores (\"__\") are reserved, and an error if version <= 300", identifier.c_str(), "");
+            if (isEsProfile() && version < 300)
+                error(loc, "identifiers containing consecutive underscores (\"__\") are reserved, and an error if version < 300", identifier.c_str(), "");
             else
                 warn(loc, "identifiers containing consecutive underscores (\"__\") are reserved", identifier.c_str(), "");
         }
@@ -2685,7 +2757,7 @@
 //
 void TParseContext::reservedPpErrorCheck(const TSourceLoc& loc, const char* identifier, const char* op)
 {
-    // "__" are not supposed to be an error.  ES 310 (and desktop) added the clarification:
+    // "__" are not supposed to be an error.  ES 300 (and desktop) added the clarification:
     // "All macro names containing two consecutive underscores ( __ ) are reserved;
     // defining such a name does not itself result in an error, but may result in
     // undefined behavior.  All macro names prefixed with "GL_" ("GL" followed by a
@@ -2703,8 +2775,8 @@
              strcmp(identifier, "__VERSION__") == 0))
             ppError(loc, "predefined names can't be (un)defined:", op,  identifier);
         else {
-            if (isEsProfile() && version <= 300)
-                ppError(loc, "names containing consecutive underscores are reserved, and an error if version <= 300:", op, identifier);
+            if (isEsProfile() && version < 300)
+                ppError(loc, "names containing consecutive underscores are reserved, and an error if version < 300:", op, identifier);
             else
                 ppWarn(loc, "names containing consecutive underscores are reserved:", op, identifier);
         }
@@ -2778,6 +2850,7 @@
     // it, in which case the type comes from the argument instead of from the
     // constructor function.
     switch (op) {
+#ifndef GLSLANG_WEB
     case EOpConstructNonuniform:
         if (node != nullptr && node->getAsTyped() != nullptr) {
             type.shallowCopy(node->getAsTyped()->getType());
@@ -2785,6 +2858,7 @@
             type.getQualifier().nonUniform = true;
         }
         break;
+#endif
     default:
         type.shallowCopy(function.getType());
         break;
@@ -2793,10 +2867,8 @@
     // See if it's a matrix
     bool constructingMatrix = false;
     switch (op) {
-#ifndef GLSLANG_WEB
     case EOpConstructTextureSampler:
         return constructorTextureSamplerError(loc, function);
-#endif
     case EOpConstructMat2x2:
     case EOpConstructMat2x3:
     case EOpConstructMat2x4:
@@ -3080,7 +3152,7 @@
         error(loc, "constructor argument does not have a type", "constructor", "");
         return true;
     }
-    if (op != EOpConstructStruct && typed->getBasicType() == EbtSampler) {
+    if (op != EOpConstructStruct && op != EOpConstructNonuniform && typed->getBasicType() == EbtSampler) {
         error(loc, "cannot convert a sampler", "constructor", "");
         return true;
     }
@@ -3125,7 +3197,7 @@
     if (function[0].type->getBasicType() != EbtSampler ||
         ! function[0].type->getSampler().isTexture() ||
         function[0].type->isArray()) {
-        error(loc, "sampler-constructor first argument must be a scalar textureXXX type", token, "");
+        error(loc, "sampler-constructor first argument must be a scalar *texture* type", token, "");
         return true;
     }
     // simulate the first argument's impact on the result type, so it can be compared with the encapsulated operator!=()
@@ -3133,7 +3205,8 @@
     texture.setCombined(false);
     texture.shadow = false;
     if (texture != function[0].type->getSampler()) {
-        error(loc, "sampler-constructor first argument must match type and dimensionality of constructor type", token, "");
+        error(loc, "sampler-constructor first argument must be a *texture* type"
+                   " matching the dimensionality and sampled type of the constructor", token, "");
         return true;
     }
 
@@ -3143,7 +3216,7 @@
     if (  function[1].type->getBasicType() != EbtSampler ||
         ! function[1].type->getSampler().isPureSampler() ||
           function[1].type->isArray()) {
-        error(loc, "sampler-constructor second argument must be a scalar type 'sampler'", token, "");
+        error(loc, "sampler-constructor second argument must be a scalar sampler or samplerShadow", token, "");
         return true;
     }
 
@@ -3219,14 +3292,14 @@
         error(loc, "atomic_uints can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
 }
 
-void TParseContext::accStructNVCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
+void TParseContext::accStructCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
 {
     if (type.getQualifier().storage == EvqUniform)
         return;
 
-    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtAccStructNV))
+    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtAccStruct))
         error(loc, "non-uniform struct contains an accelerationStructureNV:", type.getBasicTypeString().c_str(), identifier.c_str());
-    else if (type.getBasicType() == EbtAccStructNV && type.getQualifier().storage != EvqUniform)
+    else if (type.getBasicType() == EbtAccStruct && type.getQualifier().storage != EvqUniform)
         error(loc, "accelerationStructureNV can only be used in uniform variables or function parameters:",
             type.getBasicTypeString().c_str(), identifier.c_str());
 
@@ -3324,6 +3397,11 @@
         !qualifier.hasBufferReference())
         error(loc, "buffers can be declared only as blocks", "buffer", "");
 
+    if (qualifier.storage != EvqVaryingIn && publicType.basicType == EbtDouble &&
+        extensionTurnedOn(E_GL_ARB_vertex_attrib_64bit) && language == EShLangVertex &&
+        version < 400) {
+        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 410, E_GL_ARB_gpu_shader_fp64, "vertex-shader `double` type");
+    }
     if (qualifier.storage != EvqVaryingIn && qualifier.storage != EvqVaryingOut)
         return;
 
@@ -3374,7 +3452,7 @@
                 profileRequires(loc, ENoProfile, 150, nullptr, "vertex input arrays");
             }
             if (publicType.basicType == EbtDouble)
-                profileRequires(loc, ~EEsProfile, 410, nullptr, "vertex-shader `double` type input");
+                profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_vertex_attrib_64bit, "vertex-shader `double` type input");
             if (qualifier.isAuxiliary() || qualifier.isInterpolation() || qualifier.isMemory() || qualifier.invariant)
                 error(loc, "vertex input cannot be further qualified", "", "");
             break;
@@ -3388,11 +3466,11 @@
                     requireProfile(loc, ~EEsProfile, "fragment-shader struct input containing an array");
             }
             break;
-#ifndef GLSLANG_WEB
        case EShLangCompute:
             if (! symbolTable.atBuiltInLevel())
                 error(loc, "global storage input qualifier cannot be used in a compute shader", "in", "");
             break;
+#ifndef GLSLANG_WEB
        case EShLangTessControl:
             if (qualifier.patch)
                 error(loc, "can only use on output in tessellation-control shader", "patch", "");
@@ -3433,10 +3511,10 @@
                 error(loc, "cannot contain a double, int64, or uint64", GetStorageQualifierString(qualifier.storage), "");
         break;
 
-#ifndef GLSLANG_WEB
         case EShLangCompute:
             error(loc, "global storage output qualifier cannot be used in a compute shader", "out", "");
             break;
+#ifndef GLSLANG_WEB
         case EShLangTessEvaluation:
             if (qualifier.patch)
                 error(loc, "can only use on input in tessellation-evaluation shader", "patch", "");
@@ -3510,12 +3588,14 @@
         dst.precision = src.precision;
 
 #ifndef GLSLANG_WEB
-    if (!force && ((src.coherent && (dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)) ||
-                   (src.devicecoherent && (dst.coherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)) ||
-                   (src.queuefamilycoherent && (dst.coherent || dst.devicecoherent || dst.workgroupcoherent || dst.subgroupcoherent)) ||
-                   (src.workgroupcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.subgroupcoherent)) ||
-                   (src.subgroupcoherent  && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent)))) {
-        error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent qualifier allowed", GetPrecisionQualifierString(src.precision), "");
+    if (!force && ((src.coherent && (dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
+                   (src.devicecoherent && (dst.coherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
+                   (src.queuefamilycoherent && (dst.coherent || dst.devicecoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
+                   (src.workgroupcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
+                   (src.subgroupcoherent  && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.shadercallcoherent)) ||
+                   (src.shadercallcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)))) {
+        error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent/shadercallcoherent qualifier allowed", 
+            GetPrecisionQualifierString(src.precision), "");
     }
 #endif
     // Layout qualifiers
@@ -3543,6 +3623,7 @@
     MERGE_SINGLETON(queuefamilycoherent);
     MERGE_SINGLETON(workgroupcoherent);
     MERGE_SINGLETON(subgroupcoherent);
+    MERGE_SINGLETON(shadercallcoherent);
     MERGE_SINGLETON(nonprivate);
     MERGE_SINGLETON(volatil);
     MERGE_SINGLETON(restrict);
@@ -3814,10 +3895,6 @@
     // for ES, if size isn't coming from an initializer, it has to be explicitly declared now,
     // with very few exceptions
 
-    // last member of ssbo block exception:
-    if (qualifier.storage == EvqBuffer && lastMember)
-        return;
-
     // implicitly-sized io exceptions:
     switch (language) {
     case EShLangGeometry:
@@ -3852,6 +3929,10 @@
 
 #endif
 
+    // last member of ssbo block exception:
+    if (qualifier.storage == EvqBuffer && lastMember)
+        return;
+
     arraySizeRequiredCheck(loc, *arraySizes);
 }
 
@@ -3980,7 +4061,7 @@
     }
 
     // check for additional things allowed by GL_EXT_nonuniform_qualifier
-    if (base.getBasicType() == EbtSampler || base.getBasicType() == EbtAccStructNV ||
+    if (base.getBasicType() == EbtSampler || base.getBasicType() == EbtAccStruct || base.getBasicType() == EbtRayQuery ||
         (base.getBasicType() == EbtBlock && base.getType().getQualifier().isUniformOrBuffer()))
         requireExtensions(loc, 1, &E_GL_EXT_nonuniform_qualifier, "variable index");
     else
@@ -4476,6 +4557,7 @@
 
 void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& qualifier, TType& type)
 {
+#ifndef GLSLANG_WEB
     if (qualifier.isMemory()) {
         type.getQualifier().volatil   = qualifier.volatil;
         type.getQualifier().coherent  = qualifier.coherent;
@@ -4483,11 +4565,13 @@
         type.getQualifier().queuefamilycoherent  = qualifier.queuefamilycoherent;
         type.getQualifier().workgroupcoherent  = qualifier.workgroupcoherent;
         type.getQualifier().subgroupcoherent  = qualifier.subgroupcoherent;
+        type.getQualifier().shadercallcoherent = qualifier.shadercallcoherent;
         type.getQualifier().nonprivate = qualifier.nonprivate;
         type.getQualifier().readonly  = qualifier.readonly;
         type.getQualifier().writeonly = qualifier.writeonly;
         type.getQualifier().restrict  = qualifier.restrict;
     }
+#endif
 
     if (qualifier.isAuxiliary() ||
         qualifier.isInterpolation())
@@ -4863,7 +4947,7 @@
 #ifndef GLSLANG_WEB
     if (id == TQualifier::getLayoutPackingString(ElpStd430)) {
         requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, "std430");
-        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, "std430");
+        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_shader_storage_buffer_object, "std430");
         profileRequires(loc, EEsProfile, 310, nullptr, "std430");
         publicType.qualifier.layoutPacking = ElpStd430;
         return;
@@ -5062,13 +5146,19 @@
             return;
         }
     } else {
-        if (language == EShLangRayGenNV || language == EShLangIntersectNV ||
-        language == EShLangAnyHitNV || language == EShLangClosestHitNV ||
-        language == EShLangMissNV || language == EShLangCallableNV) {
-            if (id == "shaderrecordnv") {
-                publicType.qualifier.layoutShaderRecordNV = true;
+        if (language == EShLangRayGen || language == EShLangIntersect ||
+        language == EShLangAnyHit || language == EShLangClosestHit ||
+        language == EShLangMiss || language == EShLangCallable) {
+            if (id == "shaderrecordnv" || id == "shaderrecordext") {
+                if (id == "shaderrecordnv") {
+                    requireExtensions(loc, 1, &E_GL_NV_ray_tracing, "shader record NV");
+                } else {
+                    requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "shader record EXT");
+                }
+                publicType.qualifier.layoutShaderRecord = true;
                 return;
             }
+
         }
     }
     if (language == EShLangCompute) {
@@ -5130,6 +5220,7 @@
             profileRequires(loc, EEsProfile, 310, nullptr, feature);
         }
         publicType.qualifier.layoutOffset = value;
+        publicType.qualifier.explicitOffset = true;
         if (nonLiteral)
             error(loc, "needs a literal integer", "offset", "");
         return;
@@ -5149,7 +5240,8 @@
         return;
     } else if (id == "location") {
         profileRequires(loc, EEsProfile, 300, nullptr, "location");
-        const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
+        const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location }; 
+        // GL_ARB_explicit_uniform_location requires 330 or GL_ARB_explicit_attrib_location we do not need to add it here
         profileRequires(loc, ~EEsProfile, 330, 2, exts, "location");
         if ((unsigned int)value >= TQualifier::layoutLocationEnd)
             error(loc, "location is too large", id.c_str(), "");
@@ -5293,11 +5385,10 @@
             error(loc, "needs a literal integer", "buffer_reference_align", "");
         return;
     }
+#endif
 
     switch (language) {
-    case EShLangVertex:
-        break;
-
+#ifndef GLSLANG_WEB
     case EShLangTessControl:
         if (id == "vertices") {
             if (value == 0)
@@ -5310,9 +5401,6 @@
         }
         break;
 
-    case EShLangTessEvaluation:
-        break;
-
     case EShLangGeometry:
         if (id == "invocations") {
             profileRequires(loc, ECompatibilityProfile | ECoreProfile, 400, nullptr, "invocations");
@@ -5345,10 +5433,10 @@
 
     case EShLangFragment:
         if (id == "index") {
-            requireProfile(loc, ECompatibilityProfile | ECoreProfile, "index layout qualifier on fragment output");
+            requireProfile(loc, ECompatibilityProfile | ECoreProfile | EEsProfile, "index layout qualifier on fragment output");
             const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
             profileRequires(loc, ECompatibilityProfile | ECoreProfile, 330, 2, exts, "index layout qualifier on fragment output");
-
+            profileRequires(loc, EEsProfile ,310, E_GL_EXT_blend_func_extended, "index layout qualifier on fragment output");
             // "It is also a compile-time error if a fragment shader sets a layout index to less than 0 or greater than 1."
             if (value < 0 || value > 1) {
                 value = 0;
@@ -5385,16 +5473,17 @@
 
     case EShLangTaskNV:
         // Fall through
+#endif
     case EShLangCompute:
         if (id.compare(0, 11, "local_size_") == 0) {
+#ifndef GLSLANG_WEB
             if (language == EShLangMeshNV || language == EShLangTaskNV) {
                 requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "gl_WorkGroupSize");
-            }
-            else
-            {
+            } else {
                 profileRequires(loc, EEsProfile, 310, 0, "gl_WorkGroupSize");
                 profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize");
             }
+#endif
             if (nonLiteral)
                 error(loc, "needs a literal integer", "local_size", "");
             if (id.size() == 12 && value == 0) {
@@ -5432,12 +5521,11 @@
             }
         }
         break;
+
     default:
         break;
     }
 
-#endif // GLSLANG_WEB
-
     error(loc, "there is no such layout identifier for this stage taking an assigned value", id.c_str(), "");
 }
 
@@ -5512,8 +5600,8 @@
             dst.layoutViewportRelative = true;
         if (src.layoutSecondaryViewportRelativeOffset != -2048)
             dst.layoutSecondaryViewportRelativeOffset = src.layoutSecondaryViewportRelativeOffset;
-        if (src.layoutShaderRecordNV)
-            dst.layoutShaderRecordNV = true;
+        if (src.layoutShaderRecord)
+            dst.layoutShaderRecord = true;
         if (src.pervertexNV)
             dst.pervertexNV = true;
 #endif
@@ -5581,7 +5669,7 @@
                     error(loc, "cannot specify on a variable declaration", "align", "");
                 if (qualifier.isPushConstant())
                     error(loc, "can only specify on a uniform block", "push_constant", "");
-                if (qualifier.isShaderRecordNV())
+                if (qualifier.isShaderRecord())
                     error(loc, "can only specify on a buffer block", "shaderRecordNV", "");
             }
             break;
@@ -5655,11 +5743,11 @@
                 error(loc, "cannot apply to uniform or buffer block", "location", "");
             break;
 #ifndef GLSLANG_WEB
-        case EvqPayloadNV:
-        case EvqPayloadInNV:
-        case EvqHitAttrNV:
-        case EvqCallableDataNV:
-        case EvqCallableDataInNV:
+        case EvqPayload:
+        case EvqPayloadIn:
+        case EvqHitAttr:
+        case EvqCallableData:
+        case EvqCallableDataIn:
             break;
 #endif
         default:
@@ -5754,7 +5842,7 @@
         if (spvVersion.spv > 0) {
             if (qualifier.isUniformOrBuffer()) {
                 if (type.getBasicType() == EbtBlock && !qualifier.isPushConstant() &&
-                       !qualifier.isShaderRecordNV() &&
+                       !qualifier.isShaderRecord() &&
                        !qualifier.hasAttachment() &&
                        !qualifier.hasBufferReference())
                     error(loc, "uniform/buffer blocks require layout(binding=X)", "binding", "");
@@ -5811,7 +5899,7 @@
     if (qualifier.hasBufferReference() && type.getBasicType() != EbtBlock)
         error(loc, "can only be used with a block", "buffer_reference", "");
 
-    if (qualifier.isShaderRecordNV() && type.getBasicType() != EbtBlock)
+    if (qualifier.isShaderRecord() && type.getBasicType() != EbtBlock)
         error(loc, "can only be used with a block", "shaderRecordNV", "");
 
     // input attachment
@@ -5909,8 +5997,9 @@
         case EvqBuffer:
         {
             const char* feature = "location qualifier on uniform or buffer";
-            requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature);
-            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, feature);
+            requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile | ENoProfile, feature);
+            profileRequires(loc, ~EEsProfile, 330, E_GL_ARB_explicit_attrib_location, feature);
+            profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_explicit_uniform_location, feature);
             profileRequires(loc, EEsProfile, 310, nullptr, feature);
             break;
         }
@@ -5955,7 +6044,7 @@
         if (qualifier.storage != EvqBuffer)
             error(loc, "can only be used with buffer", "buffer_reference", "");
     }
-    if (qualifier.isShaderRecordNV()) {
+    if (qualifier.isShaderRecord()) {
         if (qualifier.storage != EvqBuffer)
             error(loc, "can only be used with a buffer", "shaderRecordNV", "");
         if (qualifier.hasBinding())
@@ -5964,7 +6053,7 @@
             error(loc, "cannot be used with shaderRecordNV", "set", "");
 
     }
-    if (qualifier.storage == EvqHitAttrNV && qualifier.hasLayout()) {
+    if (qualifier.storage == EvqHitAttr && qualifier.hasLayout()) {
         error(loc, "cannot apply layout qualifiers to hitAttributeNV variable", "hitAttributeNV", "");
     }
 }
@@ -6032,6 +6121,10 @@
                 offset = qualifier.layoutOffset;
             else
                 offset = atomicUintOffsets[qualifier.layoutBinding];
+
+            if (offset % 4 != 0)
+                error(loc, "atomic counters offset should align based on 4:", "offset", "%d", offset);
+
             symbol.getWritableType().getQualifier().layoutOffset = offset;
 
             // Check for overlap
@@ -6072,6 +6165,15 @@
 #endif
 
     const TFunction* function = nullptr;
+
+    // debugPrintfEXT has var args and is in the symbol table as "debugPrintfEXT()",
+    // mangled to "debugPrintfEXT("
+    if (call.getName() == "debugPrintfEXT") {
+        TSymbol* symbol = symbolTable.find("debugPrintfEXT(", &builtIn);
+        if (symbol)
+            return symbol->getAsFunction();
+    }
+
     bool explicitTypesEnabled = extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
                                 extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8) ||
                                 extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16) ||
@@ -6081,10 +6183,13 @@
                                 extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32) ||
                                 extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64);
 
-    if (isEsProfile() || version < 120)
+    if (isEsProfile())
+        function = (extensionTurnedOn(E_GL_EXT_shader_implicit_conversions) && version >= 310) ?
+                    findFunction120(loc, call, builtIn) : findFunctionExact(loc, call, builtIn);
+    else if (version < 120)
         function = findFunctionExact(loc, call, builtIn);
     else if (version < 400)
-        function = findFunction120(loc, call, builtIn);
+        function = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn);
     else if (explicitTypesEnabled)
         function = findFunctionExplicitTypes(loc, call, builtIn);
     else
@@ -6377,13 +6482,15 @@
 void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType)
 {
 #ifndef GLSLANG_WEB
-    if (publicType.basicType == EbtAtomicUint && publicType.qualifier.hasBinding() &&
-        publicType.qualifier.hasOffset()) {
+    if (publicType.basicType == EbtAtomicUint && publicType.qualifier.hasBinding()) {
         if (publicType.qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) {
             error(loc, "atomic_uint binding is too large", "binding", "");
             return;
         }
-        atomicUintOffsets[publicType.qualifier.layoutBinding] = publicType.qualifier.layoutOffset;
+
+        if(publicType.qualifier.hasOffset()) {
+            atomicUintOffsets[publicType.qualifier.layoutBinding] = publicType.qualifier.layoutOffset;
+        }
         return;
     }
 
@@ -6452,7 +6559,7 @@
     transparentOpaqueCheck(loc, type, identifier);
 #ifndef GLSLANG_WEB
     atomicUintCheck(loc, type, identifier);
-    accStructNVCheck(loc, type, identifier);
+    accStructCheck(loc, type, identifier);
     checkAndResizeMeshViewDim(loc, type, /*isBlockMember*/ false);
 #endif
     if (type.getQualifier().storage == EvqConst && type.containsReference()) {
@@ -6919,7 +7026,7 @@
     // This avoids requesting a matrix of a new type that is going to be discarded anyway.
     // TODO: This could be generalized to more type combinations, but that would require
     // more extensive testing and full algorithm rework. For now, the need to do two changes makes
-    // the recursive call work, and avoids the most aggregious case of creating integer matrices.
+    // the recursive call work, and avoids the most egregious case of creating integer matrices.
     if (node->getType().isMatrix() && (type.isScalar() || type.isVector()) &&
             type.isFloatingDomain() != node->getType().isFloatingDomain()) {
         TType transitionType(node->getBasicType(), glslang::EvqTemporary, type.getVectorSize(), 0, 0, node->isVector());
@@ -7014,8 +7121,14 @@
         if (!intermediate.getArithemeticFloat16Enabled()) {
             TType tempType(EbtFloat, EvqTemporary, type.getVectorSize());
             newNode = node;
-            if (tempType != newNode->getType())
-                newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructVec2 + op - EOpConstructF16Vec2), tempType, node->getLoc());
+            if (tempType != newNode->getType()) {
+                TOperator aggregateOp;
+                if (op == EOpConstructFloat16)
+                    aggregateOp = EOpConstructFloat;
+                else
+                    aggregateOp = (TOperator)(EOpConstructVec2 + op - EOpConstructF16Vec2);
+                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
+            }
             newNode = intermediate.addConversion(EbtFloat16, newNode);
             return newNode;
         }
@@ -7031,8 +7144,14 @@
         if (!intermediate.getArithemeticInt8Enabled()) {
             TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
             newNode = node;
-            if (tempType != newNode->getType())
-                newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructIVec2 + op - EOpConstructI8Vec2), tempType, node->getLoc());
+            if (tempType != newNode->getType()) {
+                TOperator aggregateOp;
+                if (op == EOpConstructInt8)
+                    aggregateOp = EOpConstructInt;
+                else
+                    aggregateOp = (TOperator)(EOpConstructIVec2 + op - EOpConstructI8Vec2);
+                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
+            }
             newNode = intermediate.addConversion(EbtInt8, newNode);
             return newNode;
         }
@@ -7048,8 +7167,14 @@
         if (!intermediate.getArithemeticInt8Enabled()) {
             TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
             newNode = node;
-            if (tempType != newNode->getType())
-                newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructUVec2 + op - EOpConstructU8Vec2), tempType, node->getLoc());
+            if (tempType != newNode->getType()) {
+                TOperator aggregateOp;
+                if (op == EOpConstructUint8)
+                    aggregateOp = EOpConstructUint;
+                else
+                    aggregateOp = (TOperator)(EOpConstructUVec2 + op - EOpConstructU8Vec2);
+                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
+            }
             newNode = intermediate.addConversion(EbtUint8, newNode);
             return newNode;
         }
@@ -7065,8 +7190,14 @@
         if (!intermediate.getArithemeticInt16Enabled()) {
             TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
             newNode = node;
-            if (tempType != newNode->getType())
-                newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructIVec2 + op - EOpConstructI16Vec2), tempType, node->getLoc());
+            if (tempType != newNode->getType()) {
+                TOperator aggregateOp;
+                if (op == EOpConstructInt16)
+                    aggregateOp = EOpConstructInt;
+                else
+                    aggregateOp = (TOperator)(EOpConstructIVec2 + op - EOpConstructI16Vec2);
+                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
+            }
             newNode = intermediate.addConversion(EbtInt16, newNode);
             return newNode;
         }
@@ -7082,8 +7213,14 @@
         if (!intermediate.getArithemeticInt16Enabled()) {
             TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
             newNode = node;
-            if (tempType != newNode->getType())
-                newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructUVec2 + op - EOpConstructU16Vec2), tempType, node->getLoc());
+            if (tempType != newNode->getType()) {
+                TOperator aggregateOp;
+                if (op == EOpConstructUint16)
+                    aggregateOp = EOpConstructUint;
+                else
+                    aggregateOp = (TOperator)(EOpConstructUVec2 + op - EOpConstructU16Vec2);
+                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
+            }
             newNode = intermediate.addConversion(EbtUint16, newNode);
             return newNode;
         }
@@ -7356,7 +7493,7 @@
     // Special case for "push_constant uniform", which has a default of std430,
     // contrary to normal uniform defaults, and can't have a default tracked for it.
     if ((currentBlockQualifier.isPushConstant() && !currentBlockQualifier.hasPacking()) ||
-        (currentBlockQualifier.isShaderRecordNV() && !currentBlockQualifier.hasPacking()))
+        (currentBlockQualifier.isShaderRecord() && !currentBlockQualifier.hasPacking()))
         currentBlockQualifier.layoutPacking = ElpStd430;
 
     // Special case for "taskNV in/out", which has a default of std430,
@@ -7383,6 +7520,7 @@
     for (unsigned int member = 0; member < typeList.size(); ++member) {
         TQualifier& memberQualifier = typeList[member].type->getQualifier();
         const TSourceLoc& memberLoc = typeList[member].loc;
+#ifndef GLSLANG_WEB
         if (memberQualifier.hasStream()) {
             if (defaultQualification.layoutStream != memberQualifier.layoutStream)
                 error(memberLoc, "member cannot contradict block", "stream", "");
@@ -7396,6 +7534,7 @@
             if (defaultQualification.layoutXfbBuffer != memberQualifier.layoutXfbBuffer)
                 error(memberLoc, "member cannot contradict block (or what block inherited from global)", "xfb_buffer", "");
         }
+#endif
 
         if (memberQualifier.hasPacking())
             error(memberLoc, "member of block cannot have a packing layout qualifier", typeList[member].type->getFieldName().c_str(), "");
@@ -7438,6 +7577,7 @@
 
     layoutMemberLocationArrayCheck(loc, memberWithLocation, arraySizes);
 
+#ifndef GLSLANG_WEB
     // Ensure that the block has an XfbBuffer assigned. This is needed
     // because if the block has a XfbOffset assigned, then it is
     // assumed that it has implicitly assigned the current global
@@ -7447,6 +7587,7 @@
        if (!currentBlockQualifier.hasXfbBuffer() && currentBlockQualifier.hasXfbOffset())
           currentBlockQualifier.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer;
     }
+#endif
 
     // Process the members
     fixBlockLocations(loc, currentBlockQualifier, typeList, memberWithLocation, memberWithoutLocation);
@@ -7569,16 +7710,17 @@
 // with a particular stage.
 void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& qualifier)
 {
+    const char *extsrt[2] = { E_GL_NV_ray_tracing, E_GL_EXT_ray_tracing };
     switch (qualifier.storage) {
     case EvqUniform:
         profileRequires(loc, EEsProfile, 300, nullptr, "uniform block");
-        profileRequires(loc, ENoProfile, 140, nullptr, "uniform block");
+        profileRequires(loc, ENoProfile, 140, E_GL_ARB_uniform_buffer_object, "uniform block");
         if (currentBlockQualifier.layoutPacking == ElpStd430 && ! currentBlockQualifier.isPushConstant())
             requireExtensions(loc, 1, &E_GL_EXT_scalar_block_layout, "std430 requires the buffer storage qualifier");
         break;
     case EvqBuffer:
         requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, "buffer block");
-        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, "buffer block");
+        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_shader_storage_buffer_object, "buffer block");
         profileRequires(loc, EEsProfile, 310, nullptr, "buffer block");
         break;
     case EvqVaryingIn:
@@ -7607,28 +7749,28 @@
         }
         break;
 #ifndef GLSLANG_WEB
-    case EvqPayloadNV:
-        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV block");
-        requireStage(loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangAnyHitNVMask | EShLangClosestHitNVMask | EShLangMissNVMask),
+    case EvqPayload:
+        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "rayPayloadNV block");
+        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangAnyHitMask | EShLangClosestHitMask | EShLangMissMask),
             "rayPayloadNV block");
         break;
-    case EvqPayloadInNV:
-        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV block");
-        requireStage(loc, (EShLanguageMask)(EShLangAnyHitNVMask | EShLangClosestHitNVMask | EShLangMissNVMask),
+    case EvqPayloadIn:
+        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "rayPayloadInNV block");
+        requireStage(loc, (EShLanguageMask)(EShLangAnyHitMask | EShLangClosestHitMask | EShLangMissMask),
             "rayPayloadInNV block");
         break;
-    case EvqHitAttrNV:
-        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV block");
-        requireStage(loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangAnyHitNVMask | EShLangClosestHitNVMask), "hitAttributeNV block");
+    case EvqHitAttr:
+        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "hitAttributeNV block");
+        requireStage(loc, (EShLanguageMask)(EShLangIntersectMask | EShLangAnyHitMask | EShLangClosestHitMask), "hitAttributeNV block");
         break;
-    case EvqCallableDataNV:
-        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_ray_tracing, "callableDataNV block");
-        requireStage(loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask | EShLangMissNVMask | EShLangCallableNVMask),
+    case EvqCallableData:
+        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "callableDataNV block");
+        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask),
             "callableDataNV block");
         break;
-    case EvqCallableDataInNV:
-        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV block");
-        requireStage(loc, (EShLanguageMask)(EShLangCallableNVMask), "callableDataInNV block");
+    case EvqCallableDataIn:
+        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "callableDataInNV block");
+        requireStage(loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV block");
         break;
 #endif
     default:
@@ -7667,8 +7809,8 @@
         error(loc, "cannot use invariant qualifier on an interface block", "invariant", "");
     if (qualifier.isPushConstant())
         intermediate.addPushConstantCount();
-    if (qualifier.isShaderRecordNV())
-        intermediate.addShaderRecordNVCount();
+    if (qualifier.isShaderRecord())
+        intermediate.addShaderRecordCount();
     if (qualifier.isTaskMemory())
         intermediate.addTaskNVCount();
 }
@@ -8003,6 +8145,7 @@
         else
             error(loc, "can only apply to 'in'", "point_mode", "");
     }
+#endif
     for (int i = 0; i < 3; ++i) {
         if (publicType.shaderQualifiers.localSizeNotDefault[i]) {
             if (publicType.qualifier.storage == EvqVaryingIn) {
@@ -8019,7 +8162,9 @@
                         }
                         if (intermediate.getLocalSize(i) > (unsigned int)max)
                             error(loc, "too large; see gl_MaxComputeWorkGroupSize", "local_size", "");
-                    } else if (language == EShLangMeshNV) {
+                    }
+#ifndef GLSLANG_WEB
+                    else if (language == EShLangMeshNV) {
                         switch (i) {
                         case 0: max = resources.maxMeshWorkGroupSizeX_NV; break;
                         case 1: max = resources.maxMeshWorkGroupSizeY_NV; break;
@@ -8037,7 +8182,9 @@
                         }
                         if (intermediate.getLocalSize(i) > (unsigned int)max)
                             error(loc, "too large; see gl_MaxTaskWorkGroupSizeNV", "local_size", "");
-                    } else {
+                    }
+#endif
+                    else {
                         assert(0);
                     }
 
@@ -8062,6 +8209,7 @@
         }
     }
 
+#ifndef GLSLANG_WEB
     if (publicType.shaderQualifiers.earlyFragmentTests) {
         if (publicType.qualifier.storage == EvqVaryingIn)
             intermediate.setEarlyFragmentTests();
@@ -8184,7 +8332,7 @@
         error(loc, "cannot declare a default, can only be used on a block", "buffer_reference", "");
     if (qualifier.hasSpecConstantId())
         error(loc, "cannot declare a default, can only be used on a scalar", "constant_id", "");
-    if (qualifier.isShaderRecordNV())
+    if (qualifier.isShaderRecord())
         error(loc, "cannot declare a default, can only be used on a block", "shaderRecordNV", "");
 }
 
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 5cee05e..9c5fdc7 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -283,7 +283,7 @@
                   const TString* entryPoint = nullptr);
     virtual ~TParseContext();
 
-    bool obeyPrecisionQualifiers() const { return precisionManager.respectingPrecisionQualifiers(); };
+    bool obeyPrecisionQualifiers() const { return precisionManager.respectingPrecisionQualifiers(); }
     void setPrecisionDefaults();
 
     void setLimits(const TBuiltInResource&) override;
@@ -315,6 +315,7 @@
     TIntermTyped* handleBinaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right);
     TIntermTyped* handleUnaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* childNode);
     TIntermTyped* handleDotDereference(const TSourceLoc&, TIntermTyped* base, const TString& field);
+    TIntermTyped* handleDotSwizzle(const TSourceLoc&, TIntermTyped* base, const TString& field);
     void blockMemberExtensionCheck(const TSourceLoc&, const TIntermTyped* base, int member, const TString& memberName);
     TFunction* handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype);
     TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&);
@@ -358,7 +359,7 @@
     void boolCheck(const TSourceLoc&, const TPublicType&);
     void samplerCheck(const TSourceLoc&, const TType&, const TString& identifier, TIntermTyped* initializer);
     void atomicUintCheck(const TSourceLoc&, const TType&, const TString& identifier);
-    void accStructNVCheck(const TSourceLoc & loc, const TType & type, const TString & identifier);
+    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&);
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index 9a9b69c..bd3181a 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -2,6 +2,8 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2020 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -187,17 +189,15 @@
         if (lookingInMiddle) {
             notFirstToken = true;
             // make forward progress by finishing off the current line plus extra new lines
-            if (peek() == '\n' || peek() == '\r') {
-                while (peek() == '\n' || peek() == '\r')
-                    get();
-            } else
+            if (peek() != '\n' && peek() != '\r') {
                 do {
                     c = get();
                 } while (c != EndOfInput && c != '\n' && c != '\r');
-                while (peek() == '\n' || peek() == '\r')
-                    get();
-                if (peek() == EndOfInput)
-                    return true;
+            }
+            while (peek() == '\n' || peek() == '\r')
+                get();
+            if (peek() == EndOfInput)
+                return true;
         }
         lookingInMiddle = true;
 
@@ -343,6 +343,7 @@
 
     (*KeywordMap)["const"] =                   CONST;
     (*KeywordMap)["uniform"] =                 UNIFORM;
+    (*KeywordMap)["buffer"] =                  BUFFER;
     (*KeywordMap)["in"] =                      IN;
     (*KeywordMap)["out"] =                     OUT;
     (*KeywordMap)["smooth"] =                  SMOOTH;
@@ -410,12 +411,12 @@
     (*KeywordMap)["attribute"] =               ATTRIBUTE;
     (*KeywordMap)["varying"] =                 VARYING;
     (*KeywordMap)["noperspective"] =           NOPERSPECTIVE;
-    (*KeywordMap)["buffer"] =                  BUFFER;
     (*KeywordMap)["coherent"] =                COHERENT;
     (*KeywordMap)["devicecoherent"] =          DEVICECOHERENT;
     (*KeywordMap)["queuefamilycoherent"] =     QUEUEFAMILYCOHERENT;
     (*KeywordMap)["workgroupcoherent"] =       WORKGROUPCOHERENT;
     (*KeywordMap)["subgroupcoherent"] =        SUBGROUPCOHERENT;
+    (*KeywordMap)["shadercallcoherent"] =      SHADERCALLCOHERENT;
     (*KeywordMap)["nonprivate"] =              NONPRIVATE;
     (*KeywordMap)["restrict"] =                RESTRICT;
     (*KeywordMap)["readonly"] =                READONLY;
@@ -564,10 +565,6 @@
 
     (*KeywordMap)["sampler2D"] =               SAMPLER2D;
     (*KeywordMap)["samplerCube"] =             SAMPLERCUBE;
-    (*KeywordMap)["samplerCubeArray"] =        SAMPLERCUBEARRAY;
-    (*KeywordMap)["samplerCubeArrayShadow"] =  SAMPLERCUBEARRAYSHADOW;
-    (*KeywordMap)["isamplerCubeArray"] =       ISAMPLERCUBEARRAY;
-    (*KeywordMap)["usamplerCubeArray"] =       USAMPLERCUBEARRAY;
     (*KeywordMap)["samplerCubeShadow"] =       SAMPLERCUBESHADOW;
     (*KeywordMap)["sampler2DArray"] =          SAMPLER2DARRAY;
     (*KeywordMap)["sampler2DArrayShadow"] =    SAMPLER2DARRAYSHADOW;
@@ -582,7 +579,30 @@
     (*KeywordMap)["sampler3D"] =               SAMPLER3D;
     (*KeywordMap)["sampler2DShadow"] =         SAMPLER2DSHADOW;
 
+    (*KeywordMap)["texture2D"] =               TEXTURE2D;
+    (*KeywordMap)["textureCube"] =             TEXTURECUBE;
+    (*KeywordMap)["texture2DArray"] =          TEXTURE2DARRAY;
+    (*KeywordMap)["itexture2D"] =              ITEXTURE2D;
+    (*KeywordMap)["itexture3D"] =              ITEXTURE3D;
+    (*KeywordMap)["itextureCube"] =            ITEXTURECUBE;
+    (*KeywordMap)["itexture2DArray"] =         ITEXTURE2DARRAY;
+    (*KeywordMap)["utexture2D"] =              UTEXTURE2D;
+    (*KeywordMap)["utexture3D"] =              UTEXTURE3D;
+    (*KeywordMap)["utextureCube"] =            UTEXTURECUBE;
+    (*KeywordMap)["utexture2DArray"] =         UTEXTURE2DARRAY;
+    (*KeywordMap)["texture3D"] =               TEXTURE3D;
+
+    (*KeywordMap)["sampler"] =                 SAMPLER;
+    (*KeywordMap)["samplerShadow"] =           SAMPLERSHADOW;
+
 #ifndef GLSLANG_WEB
+    (*KeywordMap)["textureCubeArray"] =        TEXTURECUBEARRAY;
+    (*KeywordMap)["itextureCubeArray"] =       ITEXTURECUBEARRAY;
+    (*KeywordMap)["utextureCubeArray"] =       UTEXTURECUBEARRAY;
+    (*KeywordMap)["samplerCubeArray"] =        SAMPLERCUBEARRAY;
+    (*KeywordMap)["samplerCubeArrayShadow"] =  SAMPLERCUBEARRAYSHADOW;
+    (*KeywordMap)["isamplerCubeArray"] =       ISAMPLERCUBEARRAY;
+    (*KeywordMap)["usamplerCubeArray"] =       USAMPLERCUBEARRAY;
     (*KeywordMap)["sampler1DArrayShadow"] =    SAMPLER1DARRAYSHADOW;
     (*KeywordMap)["isampler1DArray"] =         ISAMPLER1DARRAY;
     (*KeywordMap)["usampler1D"] =              USAMPLER1D;
@@ -609,28 +629,11 @@
 
     (*KeywordMap)["__samplerExternal2DY2YEXT"] = SAMPLEREXTERNAL2DY2YEXT; // GL_EXT_YUV_target
 
-    (*KeywordMap)["sampler"] =                 SAMPLER;
-    (*KeywordMap)["samplerShadow"] =           SAMPLERSHADOW;
-
-    (*KeywordMap)["texture2D"] =               TEXTURE2D;
-    (*KeywordMap)["textureCube"] =             TEXTURECUBE;
-    (*KeywordMap)["textureCubeArray"] =        TEXTURECUBEARRAY;
-    (*KeywordMap)["itextureCubeArray"] =       ITEXTURECUBEARRAY;
-    (*KeywordMap)["utextureCubeArray"] =       UTEXTURECUBEARRAY;
     (*KeywordMap)["itexture1DArray"] =         ITEXTURE1DARRAY;
     (*KeywordMap)["utexture1D"] =              UTEXTURE1D;
     (*KeywordMap)["itexture1D"] =              ITEXTURE1D;
     (*KeywordMap)["utexture1DArray"] =         UTEXTURE1DARRAY;
     (*KeywordMap)["textureBuffer"] =           TEXTUREBUFFER;
-    (*KeywordMap)["texture2DArray"] =          TEXTURE2DARRAY;
-    (*KeywordMap)["itexture2D"] =              ITEXTURE2D;
-    (*KeywordMap)["itexture3D"] =              ITEXTURE3D;
-    (*KeywordMap)["itextureCube"] =            ITEXTURECUBE;
-    (*KeywordMap)["itexture2DArray"] =         ITEXTURE2DARRAY;
-    (*KeywordMap)["utexture2D"] =              UTEXTURE2D;
-    (*KeywordMap)["utexture3D"] =              UTEXTURE3D;
-    (*KeywordMap)["utextureCube"] =            UTEXTURECUBE;
-    (*KeywordMap)["utexture2DArray"] =         UTEXTURE2DARRAY;
     (*KeywordMap)["itexture2DRect"] =          ITEXTURE2DRECT;
     (*KeywordMap)["utexture2DRect"] =          UTEXTURE2DRECT;
     (*KeywordMap)["itextureBuffer"] =          ITEXTUREBUFFER;
@@ -642,7 +645,6 @@
     (*KeywordMap)["itexture2DMSArray"] =       ITEXTURE2DMSARRAY;
     (*KeywordMap)["utexture2DMSArray"] =       UTEXTURE2DMSARRAY;
     (*KeywordMap)["texture1D"] =               TEXTURE1D;
-    (*KeywordMap)["texture3D"] =               TEXTURE3D;
     (*KeywordMap)["texture2DRect"] =           TEXTURE2DRECT;
     (*KeywordMap)["texture1DArray"] =          TEXTURE1DARRAY;
 
@@ -703,11 +705,18 @@
     (*KeywordMap)["precise"] =                 PRECISE;
 
     (*KeywordMap)["rayPayloadNV"] =            PAYLOADNV;
+    (*KeywordMap)["rayPayloadEXT"] =           PAYLOADEXT;
     (*KeywordMap)["rayPayloadInNV"] =          PAYLOADINNV;
+    (*KeywordMap)["rayPayloadInEXT"] =         PAYLOADINEXT;
     (*KeywordMap)["hitAttributeNV"] =          HITATTRNV;
+    (*KeywordMap)["hitAttributeEXT"] =         HITATTREXT;
     (*KeywordMap)["callableDataNV"] =          CALLDATANV;
+    (*KeywordMap)["callableDataEXT"] =         CALLDATAEXT;
     (*KeywordMap)["callableDataInNV"] =        CALLDATAINNV;
+    (*KeywordMap)["callableDataInEXT"] =       CALLDATAINEXT;
     (*KeywordMap)["accelerationStructureNV"] = ACCSTRUCTNV;
+    (*KeywordMap)["accelerationStructureEXT"]   = ACCSTRUCTEXT;
+    (*KeywordMap)["rayQueryEXT"] =              RAYQUERYEXT;
     (*KeywordMap)["perprimitiveNV"] =          PERPRIMITIVENV;
     (*KeywordMap)["perviewNV"] =               PERVIEWNV;
     (*KeywordMap)["taskNV"] =                  PERTASKNV;
@@ -842,6 +851,7 @@
             parseContext.error(loc, "not supported", "::", "");
             break;
 
+        case PpAtomConstString:        parserToken->sType.lex.string = NewPoolTString(tokenText);     return STRING_LITERAL;
         case PpAtomConstInt:           parserToken->sType.lex.i    = ppToken.ival;       return INTCONSTANT;
         case PpAtomConstUint:          parserToken->sType.lex.i    = ppToken.ival;       return UINTCONSTANT;
         case PpAtomConstFloat:         parserToken->sType.lex.d    = ppToken.dval;       return FLOATCONSTANT;
@@ -904,6 +914,14 @@
     case CASE:
         return keyword;
 
+    case BUFFER:
+        afterBuffer = true;
+        if ((parseContext.isEsProfile() && parseContext.version < 310) ||
+            (!parseContext.isEsProfile() && (parseContext.version < 430 &&
+            !parseContext.extensionTurnedOn(E_GL_ARB_shader_storage_buffer_object))))
+            return identifierOrType();
+        return keyword;
+
     case STRUCT:
         afterStruct = true;
         return keyword;
@@ -982,8 +1000,7 @@
 
 #ifndef GLSLANG_WEB
     case NOPERSPECTIVE:
-        if (parseContext.isEsProfile() && parseContext.version >= 300 &&
-            parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation))
+        if (parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation))
             return keyword;
         return es30ReservedFromGLSL(130);
 
@@ -997,12 +1014,6 @@
         if (parseContext.isEsProfile() && parseContext.version >= 300)
             reservedWord();
         return keyword;
-    case BUFFER:
-        afterBuffer = true;
-        if ((parseContext.isEsProfile() && parseContext.version < 310) ||
-            (!parseContext.isEsProfile() && parseContext.version < 430))
-            return identifierOrType();
-        return keyword;
     case PAYLOADNV:
     case PAYLOADINNV:
     case HITATTRNV:
@@ -1010,8 +1021,24 @@
     case CALLDATAINNV:
     case ACCSTRUCTNV:
         if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_NV_ray_tracing))
+            return keyword;
+        return identifierOrType();
+    case PAYLOADEXT:
+    case PAYLOADINEXT:
+    case HITATTREXT:
+    case CALLDATAEXT:
+    case CALLDATAINEXT:
+    case ACCSTRUCTEXT:
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_ray_query))
+            return keyword;
+        return identifierOrType();
+    case RAYQUERYEXT:
+        if (parseContext.symbolTable.atBuiltInLevel() ||
             (!parseContext.isEsProfile() && parseContext.version >= 460
-                 && parseContext.extensionTurnedOn(E_GL_NV_ray_tracing)))
+                 && parseContext.extensionTurnedOn(E_GL_EXT_ray_query)))
             return keyword;
         return identifierOrType();
     case ATOMIC_UINT:
@@ -1025,6 +1052,7 @@
     case QUEUEFAMILYCOHERENT:
     case WORKGROUPCOHERENT:
     case SUBGROUPCOHERENT:
+    case SHADERCALLCOHERENT:
     case NONPRIVATE:
     case RESTRICT:
     case READONLY:
@@ -1057,13 +1085,12 @@
 
     case SUBROUTINE:
         return es30ReservedFromGLSL(400);
+#endif
     case SHARED:
         if ((parseContext.isEsProfile() && parseContext.version < 300) ||
             (!parseContext.isEsProfile() && parseContext.version < 140))
             return identifierOrType();
         return keyword;
-#endif
-
     case LAYOUT:
     {
         const int numLayoutExts = 2;
@@ -1167,7 +1194,10 @@
     case DVEC3:
     case DVEC4:
         afterType = true;
-        if (parseContext.isEsProfile() || parseContext.version < 400)
+        if (parseContext.isEsProfile() || parseContext.version < 150 ||
+            (!parseContext.symbolTable.atBuiltInLevel() &&
+              (parseContext.version < 400 && !parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) &&
+              (parseContext.version < 410 && !parseContext.extensionTurnedOn(E_GL_ARB_vertex_attrib_64bit)))))
             reservedWord();
         return keyword;
 
@@ -1181,10 +1211,9 @@
     case U64VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (!parseContext.isEsProfile() && parseContext.version >= 450 &&
-             (parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int64))))
+            parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int64))
             return keyword;
         return identifierOrType();
 
@@ -1198,10 +1227,9 @@
     case U8VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            ((parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_8bit_storage) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8)) &&
-              !parseContext.isEsProfile() && parseContext.version >= 450))
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_8bit_storage) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8))
             return keyword;
         return identifierOrType();
 
@@ -1215,11 +1243,10 @@
     case U16VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (!parseContext.isEsProfile() && parseContext.version >= 450 &&
-             (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16))))
+            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16))
             return keyword;
         return identifierOrType();
     case INT32_T:
@@ -1232,9 +1259,8 @@
     case U32VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-           ((parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-             parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int32)) &&
-             !parseContext.isEsProfile() && parseContext.version >= 450))
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int32))
             return keyword;
         return identifierOrType();
     case FLOAT32_T:
@@ -1255,9 +1281,8 @@
     case F32MAT4X4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            ((parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32)) &&
-              !parseContext.isEsProfile() && parseContext.version >= 450))
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32))
             return keyword;
         return identifierOrType();
 
@@ -1279,9 +1304,8 @@
     case F64MAT4X4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            ((parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64)) &&
-              !parseContext.isEsProfile() && parseContext.version >= 450))
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64))
             return keyword;
         return identifierOrType();
 
@@ -1291,11 +1315,10 @@
     case F16VEC4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (!parseContext.isEsProfile() && parseContext.version >= 450 &&
-             (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))))
+            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))
             return keyword;
 
         return identifierOrType();
@@ -1314,14 +1337,12 @@
     case F16MAT4X4:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (!parseContext.isEsProfile() && parseContext.version >= 450 &&
-             (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
-              parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))))
+            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
+            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))
             return keyword;
 
         return identifierOrType();
-#endif
 
     case SAMPLERCUBEARRAY:
     case SAMPLERCUBEARRAYSHADOW:
@@ -1335,6 +1356,15 @@
             reservedWord();
         return keyword;
 
+    case TEXTURECUBEARRAY:
+    case ITEXTURECUBEARRAY:
+    case UTEXTURECUBEARRAY:
+        if (parseContext.spvVersion.vulkan > 0)
+            return keyword;
+        else
+            return identifierOrType();
+#endif
+
     case UINT:
     case UVEC2:
     case UVEC3:
@@ -1369,6 +1399,25 @@
         }
         return keyword;
 
+    case TEXTURE2D:
+    case TEXTURECUBE:
+    case TEXTURE2DARRAY:
+    case ITEXTURE2D:
+    case ITEXTURE3D:
+    case ITEXTURECUBE:
+    case ITEXTURE2DARRAY:
+    case UTEXTURE2D:
+    case UTEXTURE3D:
+    case UTEXTURECUBE:
+    case UTEXTURE2DARRAY:
+    case TEXTURE3D:
+    case SAMPLER:
+    case SAMPLERSHADOW:
+        if (parseContext.spvVersion.vulkan > 0)
+            return keyword;
+        else
+            return identifierOrType();
+
 #ifndef GLSLANG_WEB
     case ISAMPLER1D:
     case ISAMPLER1DARRAY:
@@ -1403,6 +1452,9 @@
         afterType = true;
         if (parseContext.isEsProfile() && parseContext.version >= 310)
             return keyword;
+        if (!parseContext.isEsProfile() && (parseContext.version > 140 ||
+            (parseContext.version == 140 && parseContext.extensionsTurnedOn(1, &E_GL_ARB_texture_multisample))))
+            return keyword;
         return es30ReservedFromGLSL(150);
 
     case SAMPLER2DMSARRAY:
@@ -1412,6 +1464,9 @@
         if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
             parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_storage_multisample_2d_array))
             return keyword;
+        if (!parseContext.isEsProfile() && (parseContext.version > 140 ||
+            (parseContext.version == 140 && parseContext.extensionsTurnedOn(1, &E_GL_ARB_texture_multisample))))
+            return keyword;
         return es30ReservedFromGLSL(150);
 
     case SAMPLER1D:
@@ -1458,25 +1513,11 @@
             return keyword;
         return identifierOrType();
 
-    case TEXTURE2D:
-    case TEXTURECUBE:
-    case TEXTURECUBEARRAY:
-    case ITEXTURECUBEARRAY:
-    case UTEXTURECUBEARRAY:
     case ITEXTURE1DARRAY:
     case UTEXTURE1D:
     case ITEXTURE1D:
     case UTEXTURE1DARRAY:
     case TEXTUREBUFFER:
-    case TEXTURE2DARRAY:
-    case ITEXTURE2D:
-    case ITEXTURE3D:
-    case ITEXTURECUBE:
-    case ITEXTURE2DARRAY:
-    case UTEXTURE2D:
-    case UTEXTURE3D:
-    case UTEXTURECUBE:
-    case UTEXTURE2DARRAY:
     case ITEXTURE2DRECT:
     case UTEXTURE2DRECT:
     case ITEXTUREBUFFER:
@@ -1488,11 +1529,8 @@
     case ITEXTURE2DMSARRAY:
     case UTEXTURE2DMSARRAY:
     case TEXTURE1D:
-    case TEXTURE3D:
     case TEXTURE2DRECT:
     case TEXTURE1DARRAY:
-    case SAMPLER:
-    case SAMPLERSHADOW:
         if (parseContext.spvVersion.vulkan > 0)
             return keyword;
         else
@@ -1556,20 +1594,17 @@
     case F16SUBPASSINPUTMS:
         afterType = true;
         if (parseContext.symbolTable.atBuiltInLevel() ||
-            (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float_fetch) &&
-             !parseContext.isEsProfile() && parseContext.version >= 450))
+            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float_fetch))
             return keyword;
         return identifierOrType();
 
     case EXPLICITINTERPAMD:
-        if (!parseContext.isEsProfile() && parseContext.version >= 450 &&
-            parseContext.extensionTurnedOn(E_GL_AMD_shader_explicit_vertex_parameter))
+        if (parseContext.extensionTurnedOn(E_GL_AMD_shader_explicit_vertex_parameter))
             return keyword;
         return identifierOrType();
 
     case PERVERTEXNV:
-        if (((!parseContext.isEsProfile() && parseContext.version >= 450) ||
-            (parseContext.isEsProfile() && parseContext.version >= 320)) &&
+        if ((!parseContext.isEsProfile() && parseContext.version >= 450) ||
             parseContext.extensionTurnedOn(E_GL_NV_fragment_shader_barycentric))
             return keyword;
         return identifierOrType();
@@ -1737,7 +1772,11 @@
         return keyword;
     }
 
-    if (!parseContext.isEsProfile() && parseContext.version >= 400)
+    if (!parseContext.isEsProfile() && (parseContext.version >= 400 ||
+        parseContext.symbolTable.atBuiltInLevel() ||
+        (parseContext.version >= 150 && parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64)) ||
+        (parseContext.version >= 150 && parseContext.extensionTurnedOn(E_GL_ARB_vertex_attrib_64bit)
+         && parseContext.language == EShLangVertex)))
         return keyword;
 
     if (parseContext.isForwardCompatible())
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index 9b3cdc6..a1392db 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -1,7 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2013-2016 LunarG, Inc.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2020 Google, Inc.
 //
 // All rights reserved.
 //
@@ -288,6 +288,11 @@
                                 EShLanguage language, EShSource source, TInfoSink& infoSink, TSymbolTable** commonTable,
                                 TSymbolTable** symbolTables)
 {
+#ifdef GLSLANG_WEB
+    profile = EEsProfile;
+    version = 310;
+#endif
+
     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
     InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, source,
                           infoSink, *symbolTables[language]);
@@ -304,6 +309,11 @@
 //
 bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TSymbolTable** symbolTables, int version, EProfile profile, const SpvVersion& spvVersion, EShSource source)
 {
+#ifdef GLSLANG_WEB
+    profile = EEsProfile;
+    version = 310;
+#endif
+
     std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
 
     if (builtInParseables == nullptr)
@@ -341,6 +351,7 @@
         (profile == EEsProfile && version >= 310))
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source,
                                    infoSink, commonTable, symbolTables);
+#endif
 
     // check for compute
     if ((profile != EEsProfile && version >= 420) ||
@@ -350,17 +361,17 @@
 
     // check for ray tracing stages
     if (profile != EEsProfile && version >= 450) {
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGenNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGen, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangIntersectNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangIntersect, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangAnyHitNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangAnyHit, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangClosestHitNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangClosestHit, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMissNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMiss, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCallableNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCallable, source,
             infoSink, commonTable, symbolTables);
     }
 
@@ -375,7 +386,6 @@
         (profile == EEsProfile && version >= 320))
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTaskNV, source,
                                    infoSink, commonTable, symbolTables);
-#endif
 
     return true;
 }
@@ -613,12 +623,12 @@
             version = profile == EEsProfile ? 310 : 420;
         }
         break;
-    case EShLangRayGenNV:
-    case EShLangIntersectNV:
-    case EShLangAnyHitNV:
-    case EShLangClosestHitNV:
-    case EShLangMissNV:
-    case EShLangCallableNV:
+    case EShLangRayGen:
+    case EShLangIntersect:
+    case EShLangAnyHit:
+    case EShLangClosestHit:
+    case EShLangMiss:
+    case EShLangCallable:
         if (profile == EEsProfile || version < 460) {
             correct = false;
             infoSink.info.message(EPrefixError, "#version: ray tracing shaders require non-es profile with version 460 or above");
@@ -706,6 +716,9 @@
             case EShClientOpenGL:
                 spvVersion.openGl = environment->input.dialectVersion;
                 break;
+            case EShClientCount:
+                assert(0);
+                break;
             }
             switch (environment->input.languageFamily) {
             case EShSourceNone:
@@ -718,6 +731,9 @@
                 source = EShSourceHlsl;
                 messages = static_cast<EShMessages>(messages | EShMsgReadHlsl);
                 break;
+            case EShSourceCount:
+                assert(0);
+                break;
             }
         }
 
@@ -871,6 +887,11 @@
 
     bool goodVersion = DeduceVersionProfile(compiler->infoSink, stage,
                                             versionNotFirst, defaultVersion, source, version, profile, spvVersion);
+#ifdef GLSLANG_WEB
+    profile = EEsProfile;
+    version = 310;
+#endif
+
     bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
 #ifndef GLSLANG_WEB
     bool warnVersionNotFirst = false;
@@ -1756,6 +1777,8 @@
     sourceEntryPointName = name;
 }
 
+// Log initial settings and transforms.
+// See comment for class TProcesses.
 void TShader::addProcesses(const std::vector<std::string>& p)
 {
     intermediate->addProcesses(p);
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 2ea14af..06b5a81 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -3,6 +3,7 @@
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
 // Copyright (C) 2015-2018 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -74,7 +75,8 @@
     case EbtInt64:              mangledName += "i64";    break;
     case EbtUint64:             mangledName += "u64";    break;
     case EbtAtomicUint:         mangledName += "au";     break;
-    case EbtAccStructNV:        mangledName += "asnv";   break;
+    case EbtAccStruct:          mangledName += "as";     break;
+    case EbtRayQuery:           mangledName += "rq";     break;
 #endif
     case EbtSampler:
         switch (sampler.type) {
@@ -114,12 +116,13 @@
         default: break; // some compilers want this
         }
 
+#ifdef ENABLE_HLSL
         if (sampler.hasReturnStruct()) {
             // Name mangle for sampler return struct uses struct table index.
             mangledName += "-tx-struct";
 
             char text[16]; // plenty enough space for the small integers.
-            snprintf(text, sizeof(text), "%d-", sampler.getStructReturnIndex());
+            snprintf(text, sizeof(text), "%u-", sampler.getStructReturnIndex());
             mangledName += text;
         } else {
             switch (sampler.getVectorSize()) {
@@ -129,6 +132,7 @@
             case 4: break; // default to prior name mangle behavior
             }
         }
+#endif
 
         if (sampler.isMultiSample())
             mangledName += "M";
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index 644acb1..143f251 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -2,7 +2,8 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2020 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -172,8 +173,10 @@
     extensionBehavior[E_GL_ARB_tessellation_shader]          = EBhDisable;
     extensionBehavior[E_GL_ARB_enhanced_layouts]             = EBhDisable;
     extensionBehavior[E_GL_ARB_texture_cube_map_array]       = EBhDisable;
+    extensionBehavior[E_GL_ARB_texture_multisample]          = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_texture_lod]           = EBhDisable;
     extensionBehavior[E_GL_ARB_explicit_attrib_location]     = EBhDisable;
+    extensionBehavior[E_GL_ARB_explicit_uniform_location]    = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_image_load_store]      = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_atomic_counters]       = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_draw_parameters]       = EBhDisable;
@@ -182,6 +185,7 @@
     extensionBehavior[E_GL_ARB_shader_texture_image_samples] = EBhDisable;
     extensionBehavior[E_GL_ARB_viewport_array]               = EBhDisable;
     extensionBehavior[E_GL_ARB_gpu_shader_int64]             = EBhDisable;
+    extensionBehavior[E_GL_ARB_gpu_shader_fp64]              = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_ballot]                = EBhDisable;
     extensionBehavior[E_GL_ARB_sparse_texture2]              = EBhDisable;
     extensionBehavior[E_GL_ARB_sparse_texture_clamp]         = EBhDisable;
@@ -191,6 +195,14 @@
     extensionBehavior[E_GL_ARB_shader_viewport_layer_array]  = EBhDisable;
     extensionBehavior[E_GL_ARB_fragment_shader_interlock]    = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_clock]                 = EBhDisable;
+    extensionBehavior[E_GL_ARB_uniform_buffer_object]        = EBhDisable;
+    extensionBehavior[E_GL_ARB_sample_shading]               = EBhDisable;
+    extensionBehavior[E_GL_ARB_shader_bit_encoding]          = EBhDisable;
+    extensionBehavior[E_GL_ARB_shader_image_size]            = EBhDisable;
+    extensionBehavior[E_GL_ARB_shader_storage_buffer_object] = EBhDisable;
+    extensionBehavior[E_GL_ARB_shading_language_packing]     = EBhDisable;
+    extensionBehavior[E_GL_ARB_texture_query_lod]            = EBhDisable;
+    extensionBehavior[E_GL_ARB_vertex_attrib_64bit]          = EBhDisable;
 
     extensionBehavior[E_GL_KHR_shader_subgroup_basic]            = EBhDisable;
     extensionBehavior[E_GL_KHR_shader_subgroup_vote]             = EBhDisable;
@@ -216,6 +228,7 @@
     extensionBehavior[E_GL_EXT_buffer_reference2]                       = EBhDisable;
     extensionBehavior[E_GL_EXT_buffer_reference_uvec2]                  = EBhDisable;
     extensionBehavior[E_GL_EXT_demote_to_helper_invocation]             = EBhDisable;
+    extensionBehavior[E_GL_EXT_debug_printf]                            = EBhDisable;
 
     extensionBehavior[E_GL_EXT_shader_16bit_storage]                    = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_8bit_storage]                     = EBhDisable;
@@ -235,6 +248,8 @@
     extensionBehavior[E_GL_AMD_shader_fragment_mask]                 = EBhDisable;
     extensionBehavior[E_GL_AMD_gpu_shader_half_float_fetch]          = EBhDisable;
 
+    extensionBehavior[E_GL_INTEL_shader_integer_functions2]          = EBhDisable;
+
     extensionBehavior[E_GL_NV_sample_mask_override_coverage]         = EBhDisable;
     extensionBehavior[E_SPV_NV_geometry_shader_passthrough]          = EBhDisable;
     extensionBehavior[E_GL_NV_viewport_array2]                       = EBhDisable;
@@ -282,11 +297,17 @@
     extensionBehavior[E_GL_OES_tessellation_point_size]  = EBhDisable;
     extensionBehavior[E_GL_OES_texture_buffer]           = EBhDisable;
     extensionBehavior[E_GL_OES_texture_cube_map_array]   = EBhDisable;
+    extensionBehavior[E_GL_EXT_shader_integer_mix]       = EBhDisable;
 
     // EXT extensions
-    extensionBehavior[E_GL_EXT_device_group]             = EBhDisable;
-    extensionBehavior[E_GL_EXT_multiview]                = EBhDisable;
-    extensionBehavior[E_GL_EXT_shader_realtime_clock]    = EBhDisable;
+    extensionBehavior[E_GL_EXT_device_group]                = EBhDisable;
+    extensionBehavior[E_GL_EXT_multiview]                   = EBhDisable;
+    extensionBehavior[E_GL_EXT_shader_realtime_clock]       = EBhDisable;
+    extensionBehavior[E_GL_EXT_ray_tracing]                 = EBhDisable;
+    extensionBehavior[E_GL_EXT_ray_query]                   = EBhDisable;
+    extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable;
+    extensionBehavior[E_GL_EXT_blend_func_extended]         = EBhDisable;
+    extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable;
 
     // OVR extensions
     extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
@@ -332,7 +353,6 @@
 
             // AEP
             "#define GL_ANDROID_extension_pack_es31a 1\n"
-            "#define GL_KHR_blend_equation_advanced 1\n"
             "#define GL_OES_sample_variables 1\n"
             "#define GL_OES_shader_image_atomic 1\n"
             "#define GL_OES_shader_multisample_interpolation 1\n"
@@ -346,6 +366,9 @@
             "#define GL_EXT_tessellation_point_size 1\n"
             "#define GL_EXT_texture_buffer 1\n"
             "#define GL_EXT_texture_cube_map_array 1\n"
+            "#define GL_EXT_shader_implicit_conversions 1\n"
+            "#define GL_EXT_shader_integer_mix 1\n"
+            "#define GL_EXT_blend_func_extended 1\n"
 
             // OES matching AEP
             "#define GL_OES_geometry_shader 1\n"
@@ -376,8 +399,10 @@
             "#define GL_ARB_tessellation_shader 1\n"
             "#define GL_ARB_enhanced_layouts 1\n"
             "#define GL_ARB_texture_cube_map_array 1\n"
+            "#define GL_ARB_texture_multisample 1\n"
             "#define GL_ARB_shader_texture_lod 1\n"
             "#define GL_ARB_explicit_attrib_location 1\n"
+            "#define GL_ARB_explicit_uniform_location 1\n"
             "#define GL_ARB_shader_image_load_store 1\n"
             "#define GL_ARB_shader_atomic_counters 1\n"
             "#define GL_ARB_shader_draw_parameters 1\n"
@@ -386,13 +411,22 @@
             "#define GL_ARB_shader_texture_image_samples 1\n"
             "#define GL_ARB_viewport_array 1\n"
             "#define GL_ARB_gpu_shader_int64 1\n"
+            "#define GL_ARB_gpu_shader_fp64 1\n"
             "#define GL_ARB_shader_ballot 1\n"
             "#define GL_ARB_sparse_texture2 1\n"
             "#define GL_ARB_sparse_texture_clamp 1\n"
             "#define GL_ARB_shader_stencil_export 1\n"
+            "#define GL_ARB_sample_shading 1\n"
+            "#define GL_ARB_shader_image_size 1\n"
+            "#define GL_ARB_shading_language_packing 1\n"
 //            "#define GL_ARB_cull_distance 1\n"    // present for 4.5, but need extension control over block members
             "#define GL_ARB_post_depth_coverage 1\n"
             "#define GL_ARB_fragment_shader_interlock 1\n"
+            "#define GL_ARB_uniform_buffer_object 1\n"
+            "#define GL_ARB_shader_bit_encoding 1\n"
+            "#define GL_ARB_shader_storage_buffer_object 1\n"
+            "#define GL_ARB_texture_query_lod 1\n"
+            "#define GL_ARB_vertex_attrib_64bit 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"
@@ -407,6 +441,7 @@
             "#define GL_EXT_buffer_reference2 1\n"
             "#define GL_EXT_buffer_reference_uvec2 1\n"
             "#define GL_EXT_demote_to_helper_invocation 1\n"
+            "#define GL_EXT_debug_printf 1\n"
 
             // GL_KHR_shader_subgroup
             "#define GL_KHR_shader_subgroup_basic 1\n"
@@ -420,6 +455,9 @@
 
             "#define E_GL_EXT_shader_atomic_int64 1\n"
             "#define E_GL_EXT_shader_realtime_clock 1\n"
+            "#define E_GL_EXT_ray_tracing 1\n"
+            "#define E_GL_EXT_ray_query 1\n"
+            "#define E_GL_EXT_ray_flags_primitive_culling 1\n"
 
             "#define GL_AMD_shader_ballot 1\n"
             "#define GL_AMD_shader_trinary_minmax 1\n"
@@ -432,6 +470,8 @@
             "#define GL_AMD_shader_fragment_mask 1\n"
             "#define GL_AMD_gpu_shader_half_float_fetch 1\n"
 
+            "#define GL_INTEL_shader_integer_functions2 1\n"
+
             "#define GL_NV_sample_mask_override_coverage 1\n"
             "#define GL_NV_geometry_shader_passthrough 1\n"
             "#define GL_NV_viewport_array2 1\n"
@@ -493,6 +533,7 @@
     preamble +=
             "#define GL_GOOGLE_cpp_style_line_directive 1\n"
             "#define GL_GOOGLE_include_directive 1\n"
+            "#define GL_KHR_blend_equation_advanced 1\n"
             ;
 #endif
 
@@ -525,17 +566,17 @@
     switch(stage) {
     case EShLangVertex:         return "vertex";
     case EShLangFragment:       return "fragment";
+    case EShLangCompute:        return "compute";
 #ifndef GLSLANG_WEB
     case EShLangTessControl:    return "tessellation control";
     case EShLangTessEvaluation: return "tessellation evaluation";
     case EShLangGeometry:       return "geometry";
-    case EShLangCompute:        return "compute";
-    case EShLangRayGenNV:       return "ray-generation";
-    case EShLangIntersectNV:    return "intersection";
-    case EShLangAnyHitNV:       return "any-hit";
-    case EShLangClosestHitNV:   return "closest-hit";
-    case EShLangMissNV:         return "miss";
-    case EShLangCallableNV:     return "callable";
+    case EShLangRayGen:         return "ray-generation";
+    case EShLangIntersect:      return "intersection";
+    case EShLangAnyHit:         return "any-hit";
+    case EShLangClosestHit:     return "closest-hit";
+    case EShLangMiss:           return "miss";
+    case EShLangCallable:       return "callable";
     case EShLangMeshNV:         return "mesh";
     case EShLangTaskNV:         return "task";
 #endif
@@ -884,8 +925,8 @@
         } else {
             if (iter->second == EBhDisablePartial)
                 warn(getCurrentLoc(), "extension is only partially supported:", "#extension", extension);
-            if (behavior == EBhEnable || behavior == EBhRequire)
-                intermediate.addRequestedExtension(extension);
+            if (behavior == EBhEnable || behavior == EBhRequire || behavior == EBhDisable)
+                intermediate.updateRequestedExtension(extension, behavior);
             iter->second = behavior;
         }
     }
@@ -913,8 +954,13 @@
 // Call for any operation needing GLSL double data-type support.
 void TParseVersions::doubleCheck(const TSourceLoc& loc, const char* op)
 {
-    requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
-    profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
+
+    //requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
+    if (language == EShLangVertex) {
+        const char* const f64_Extensions[] = {E_GL_ARB_gpu_shader_fp64, E_GL_ARB_vertex_attrib_64bit};
+        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, 2, f64_Extensions, op);
+    } else
+        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader_fp64, op);
 }
 
 // Call for any operation needing GLSL float16 data-type support.
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index fae04f4..8667411 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -3,6 +3,7 @@
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
 // Copyright (C) 2015-2018 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -38,6 +39,8 @@
 #ifndef _VERSIONS_INCLUDED_
 #define _VERSIONS_INCLUDED_
 
+#define LAST_ELEMENT_MARKER(x) x
+
 //
 // Help manage multiple profiles, versions, extensions etc.
 //
@@ -54,7 +57,8 @@
     ENoProfile            = (1 << 0), // only for desktop, before profiles showed up
     ECoreProfile          = (1 << 1),
     ECompatibilityProfile = (1 << 2),
-    EEsProfile            = (1 << 3)
+    EEsProfile            = (1 << 3),
+    LAST_ELEMENT_MARKER(EProfileCount),
 } EProfile;
 
 namespace glslang {
@@ -124,8 +128,10 @@
 const char* const E_GL_ARB_tessellation_shader          = "GL_ARB_tessellation_shader";
 const char* const E_GL_ARB_enhanced_layouts             = "GL_ARB_enhanced_layouts";
 const char* const E_GL_ARB_texture_cube_map_array       = "GL_ARB_texture_cube_map_array";
+const char* const E_GL_ARB_texture_multisample          = "GL_ARB_texture_multisample";
 const char* const E_GL_ARB_shader_texture_lod           = "GL_ARB_shader_texture_lod";
 const char* const E_GL_ARB_explicit_attrib_location     = "GL_ARB_explicit_attrib_location";
+const char* const E_GL_ARB_explicit_uniform_location    = "GL_ARB_explicit_uniform_location";
 const char* const E_GL_ARB_shader_image_load_store      = "GL_ARB_shader_image_load_store";
 const char* const E_GL_ARB_shader_atomic_counters       = "GL_ARB_shader_atomic_counters";
 const char* const E_GL_ARB_shader_draw_parameters       = "GL_ARB_shader_draw_parameters";
@@ -134,6 +140,7 @@
 const char* const E_GL_ARB_shader_texture_image_samples = "GL_ARB_shader_texture_image_samples";
 const char* const E_GL_ARB_viewport_array               = "GL_ARB_viewport_array";
 const char* const E_GL_ARB_gpu_shader_int64             = "GL_ARB_gpu_shader_int64";
+const char* const E_GL_ARB_gpu_shader_fp64              = "GL_ARB_gpu_shader_fp64";
 const char* const E_GL_ARB_shader_ballot                = "GL_ARB_shader_ballot";
 const char* const E_GL_ARB_sparse_texture2              = "GL_ARB_sparse_texture2";
 const char* const E_GL_ARB_sparse_texture_clamp         = "GL_ARB_sparse_texture_clamp";
@@ -143,6 +150,14 @@
 const char* const E_GL_ARB_shader_viewport_layer_array  = "GL_ARB_shader_viewport_layer_array";
 const char* const E_GL_ARB_fragment_shader_interlock    = "GL_ARB_fragment_shader_interlock";
 const char* const E_GL_ARB_shader_clock                 = "GL_ARB_shader_clock";
+const char* const E_GL_ARB_uniform_buffer_object        = "GL_ARB_uniform_buffer_object";
+const char* const E_GL_ARB_sample_shading               = "GL_ARB_sample_shading";
+const char* const E_GL_ARB_shader_bit_encoding          = "GL_ARB_shader_bit_encoding";
+const char* const E_GL_ARB_shader_image_size            = "GL_ARB_shader_image_size";
+const char* const E_GL_ARB_shader_storage_buffer_object = "GL_ARB_shader_storage_buffer_object";
+const char* const E_GL_ARB_shading_language_packing     = "GL_ARB_shading_language_packing";
+const char* const E_GL_ARB_texture_query_lod            = "GL_ARB_texture_query_lod";
+const char* const E_GL_ARB_vertex_attrib_64bit          = "GL_ARB_vertex_attrib_64bit";
 
 const char* const E_GL_KHR_shader_subgroup_basic            = "GL_KHR_shader_subgroup_basic";
 const char* const E_GL_KHR_shader_subgroup_vote             = "GL_KHR_shader_subgroup_vote";
@@ -177,6 +192,12 @@
 const char* const E_GL_EXT_buffer_reference_uvec2           = "GL_EXT_buffer_reference_uvec2";
 const char* const E_GL_EXT_demote_to_helper_invocation      = "GL_EXT_demote_to_helper_invocation";
 const char* const E_GL_EXT_shader_realtime_clock            = "GL_EXT_shader_realtime_clock";
+const char* const E_GL_EXT_debug_printf                     = "GL_EXT_debug_printf";
+const char* const E_GL_EXT_ray_tracing                      = "GL_EXT_ray_tracing";
+const char* const E_GL_EXT_ray_query                        = "GL_EXT_ray_query";
+const char* const E_GL_EXT_ray_flags_primitive_culling      = "GL_EXT_ray_flags_primitive_culling";
+const char* const E_GL_EXT_blend_func_extended              = "GL_EXT_blend_func_extended";
+const char* const E_GL_EXT_shader_implicit_conversions      = "GL_EXT_shader_implicit_conversions";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
@@ -205,6 +226,8 @@
 const char* const E_GL_AMD_shader_fragment_mask                 = "GL_AMD_shader_fragment_mask";
 const char* const E_GL_AMD_gpu_shader_half_float_fetch          = "GL_AMD_gpu_shader_half_float_fetch";
 
+const char* const E_GL_INTEL_shader_integer_functions2          = "GL_INTEL_shader_integer_functions2";
+
 const char* const E_GL_NV_sample_mask_override_coverage         = "GL_NV_sample_mask_override_coverage";
 const char* const E_SPV_NV_geometry_shader_passthrough          = "GL_NV_geometry_shader_passthrough";
 const char* const E_GL_NV_viewport_array2                       = "GL_NV_viewport_array2";
@@ -246,6 +269,7 @@
 const char* const E_GL_EXT_tessellation_point_size              = "GL_EXT_tessellation_point_size";
 const char* const E_GL_EXT_texture_buffer                       = "GL_EXT_texture_buffer";
 const char* const E_GL_EXT_texture_cube_map_array               = "GL_EXT_texture_cube_map_array";
+const char* const E_GL_EXT_shader_integer_mix                   = "GL_EXT_shader_integer_mix"; 
 
 // OES matching AEP
 const char* const E_GL_OES_geometry_shader                      = "GL_OES_geometry_shader";
diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4
index 6ace038..1432bf6 100644
--- a/glslang/MachineIndependent/glslang.m4
+++ b/glslang/MachineIndependent/glslang.m4
@@ -2,7 +2,8 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2019 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -38,7 +39,7 @@
 
 //
 // Do not edit the .y file, only edit the .m4 file.
-// The .y bison file is not a source file, it is a derivitive of the .m4 file.
+// The .y bison file is not a source file, it is a derivative of the .m4 file.
 // The m4 file needs to be processed by m4 to generate the .y bison file.
 //
 // Code sandwiched between a pair:
@@ -49,7 +50,7 @@
 //      ...
 //    GLSLANG_WEB_EXCLUDE_OFF
 //
-// Will be exluded from the grammar when m4 is executed as:
+// Will be excluded from the grammar when m4 is executed as:
 //
 //    m4 -P -DGLSLANG_WEB
 //
@@ -166,8 +167,12 @@
 %token <lex> SAMPLER2DARRAYSHADOW ISAMPLER2D ISAMPLER3D ISAMPLERCUBE
 %token <lex> ISAMPLER2DARRAY USAMPLER2D USAMPLER3D
 %token <lex> USAMPLERCUBE USAMPLER2DARRAY
-%token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
-%token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
+
+// separate image/sampler
+%token <lex> SAMPLER SAMPLERSHADOW
+%token <lex>  TEXTURE2D  TEXTURE3D  TEXTURECUBE  TEXTURE2DARRAY
+%token <lex> ITEXTURE2D ITEXTURE3D ITEXTURECUBE ITEXTURE2DARRAY
+%token <lex> UTEXTURE2D UTEXTURE3D UTEXTURECUBE UTEXTURE2DARRAY
 
 GLSLANG_WEB_EXCLUDE_ON
 
@@ -200,9 +205,13 @@
 %token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
 %token <lex> ATOMIC_UINT
 %token <lex> ACCSTRUCTNV
+%token <lex> ACCSTRUCTEXT
+%token <lex> RAYQUERYEXT
 %token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
 
 // combined image/sampler
+%token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
+%token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
 %token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
 %token <lex> SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT
 %token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
@@ -233,18 +242,12 @@
 %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
 %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
 
-// pure sampler
-%token <lex> SAMPLER SAMPLERSHADOW
-
 // texture without sampler
-%token <lex> TEXTURE1D TEXTURE2D TEXTURE3D TEXTURECUBE
-%token <lex> TEXTURE1DARRAY TEXTURE2DARRAY
-%token <lex> ITEXTURE1D ITEXTURE2D ITEXTURE3D ITEXTURECUBE
-%token <lex> ITEXTURE1DARRAY ITEXTURE2DARRAY UTEXTURE1D UTEXTURE2D UTEXTURE3D
-%token <lex> UTEXTURECUBE UTEXTURE1DARRAY UTEXTURE2DARRAY
+%token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
+%token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
+%token <lex> TEXTURE1DARRAY ITEXTURE1DARRAY UTEXTURE1DARRAY
 %token <lex> TEXTURE2DRECT ITEXTURE2DRECT UTEXTURE2DRECT
 %token <lex> TEXTUREBUFFER ITEXTUREBUFFER UTEXTUREBUFFER
-%token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
 %token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
 %token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
 
@@ -263,6 +266,7 @@
 %token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
 %token <lex> MOD_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN XOR_ASSIGN OR_ASSIGN
 %token <lex> SUB_ASSIGN
+%token <lex> STRING_LITERAL
 
 %token <lex> LEFT_PAREN RIGHT_PAREN LEFT_BRACKET RIGHT_BRACKET LEFT_BRACE RIGHT_BRACE DOT
 %token <lex> COMMA COLON EQUAL SEMICOLON BANG DASH TILDE PLUS STAR SLASH PERCENT
@@ -277,7 +281,7 @@
 %token <lex> CENTROID IN OUT INOUT
 %token <lex> STRUCT VOID WHILE
 %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
-%token <lex> UNIFORM SHARED
+%token <lex> UNIFORM SHARED BUFFER
 %token <lex> FLAT SMOOTH LAYOUT
 
 GLSLANG_WEB_EXCLUDE_ON
@@ -285,9 +289,10 @@
 %token <lex> INT64CONSTANT UINT64CONSTANT
 %token <lex> SUBROUTINE DEMOTE
 %token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
-%token <lex> PATCH SAMPLE BUFFER NONUNIFORM
+%token <lex> PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT
+%token <lex> PATCH SAMPLE NONUNIFORM
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
-%token <lex> SUBGROUPCOHERENT NONPRIVATE
+%token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
 %token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
 %token <lex> PRECISE
 GLSLANG_WEB_EXCLUDE_OFF
@@ -377,6 +382,9 @@
         $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
     }
 GLSLANG_WEB_EXCLUDE_ON
+    | STRING_LITERAL {
+        $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true);
+    }
     | INT32CONSTANT {
         parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
         $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
@@ -402,7 +410,9 @@
         $$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $1.loc, true);
     }
     | DOUBLECONSTANT {
-        parseContext.doubleCheck($1.loc, "double literal");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double literal");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double literal");
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true);
     }
     | FLOAT16CONSTANT {
@@ -1360,7 +1370,6 @@
         $$.init($1.loc);
         $$.qualifier.storage = EvqUniform;
     }
-GLSLANG_WEB_EXCLUDE_ON
     | SHARED {
         parseContext.globalCheck($1.loc, "shared");
         parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
@@ -1374,6 +1383,7 @@
         $$.init($1.loc);
         $$.qualifier.storage = EvqBuffer;
     }
+GLSLANG_WEB_EXCLUDE_ON
     | ATTRIBUTE {
         parseContext.requireStage($1.loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "attribute");
@@ -1413,42 +1423,81 @@
     }
     | HITATTRNV {
         parseContext.globalCheck($1.loc, "hitAttributeNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangClosestHitNVMask
-            | EShLangAnyHitNVMask), "hitAttributeNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
+            | EShLangAnyHitMask), "hitAttributeNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqHitAttrNV;
+        $$.qualifier.storage = EvqHitAttr;
+    }
+    | HITATTREXT {
+        parseContext.globalCheck($1.loc, "hitAttributeEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
+            | EShLangAnyHitMask), "hitAttributeEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "hitAttributeNV");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqHitAttr;
     }
     | PAYLOADNV {
         parseContext.globalCheck($1.loc, "rayPayloadNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask |
-            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqPayloadNV;
+        $$.qualifier.storage = EvqPayload;
+    }
+    | PAYLOADEXT {
+        parseContext.globalCheck($1.loc, "rayPayloadEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayload;
     }
     | PAYLOADINNV {
         parseContext.globalCheck($1.loc, "rayPayloadInNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitNVMask |
-            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadInNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqPayloadInNV;
+        $$.qualifier.storage = EvqPayloadIn;
+    }
+    | PAYLOADINEXT {
+        parseContext.globalCheck($1.loc, "rayPayloadInEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadInEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayloadIn;
     }
     | CALLDATANV {
         parseContext.globalCheck($1.loc, "callableDataNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenNVMask |
-            EShLangClosestHitNVMask | EShLangMissNVMask | EShLangCallableNVMask), "callableDataNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask |
+            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqCallableDataNV;
+        $$.qualifier.storage = EvqCallableData;
+    }
+    | CALLDATAEXT {
+        parseContext.globalCheck($1.loc, "callableDataEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask |
+            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqCallableData;
     }
     | CALLDATAINNV {
         parseContext.globalCheck($1.loc, "callableDataInNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableNVMask), "callableDataInNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqCallableDataInNV;
+        $$.qualifier.storage = EvqCallableDataIn;
+    }
+    | CALLDATAINEXT {
+        parseContext.globalCheck($1.loc, "callableDataInEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataInEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqCallableDataIn;
     }
     | COHERENT {
         $$.init($1.loc);
@@ -1479,6 +1528,11 @@
         parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
         $$.qualifier.nonprivate = true;
     }
+    | SHADERCALLCOHERENT {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
+        $$.qualifier.shadercallcoherent = true;
+    }
     | VOLATILE {
         $$.init($1.loc);
         $$.qualifier.volatil = true;
@@ -1751,7 +1805,9 @@
     }
 GLSLANG_WEB_EXCLUDE_ON
     | DOUBLE {
-        parseContext.doubleCheck($1.loc, "double");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
     }
@@ -1811,19 +1867,25 @@
         $$.basicType = EbtUint64;
     }
     | DVEC2 {
-        parseContext.doubleCheck($1.loc, "double vector");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double vector");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setVector(2);
     }
     | DVEC3 {
-        parseContext.doubleCheck($1.loc, "double vector");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double vector");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setVector(3);
     }
     | DVEC4 {
-        parseContext.doubleCheck($1.loc, "double vector");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double vector");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setVector(4);
@@ -2027,73 +2089,97 @@
         $$.setVector(4);
     }
     | DMAT2 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(2, 2);
     }
     | DMAT3 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(3, 3);
     }
     | DMAT4 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 4);
     }
     | DMAT2X2 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(2, 2);
     }
     | DMAT2X3 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(2, 3);
     }
     | DMAT2X4 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(2, 4);
     }
     | DMAT3X2 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(3, 2);
     }
     | DMAT3X3 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(3, 3);
     }
     | DMAT3X4 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(3, 4);
     }
     | DMAT4X2 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 2);
     }
     | DMAT4X3 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 3);
     }
     | DMAT4X4 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 4);
@@ -2316,7 +2402,15 @@
     }
     | ACCSTRUCTNV {
        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-       $$.basicType = EbtAccStructNV;
+       $$.basicType = EbtAccStruct;
+    }
+    | ACCSTRUCTEXT {
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtAccStruct;
+    }
+    | RAYQUERYEXT {
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtRayQuery;
     }
     | ATOMIC_UINT {
         parseContext.vulkanRemoved($1.loc, "atomic counter types");
@@ -2354,6 +2448,16 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdCube, false, true);
     }
+    | SAMPLER2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D, true);
+    }
+    | SAMPLER2DARRAYSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D, true, true);
+    }
 GLSLANG_WEB_EXCLUDE_ON
     | SAMPLER1DSHADOW {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2370,17 +2474,6 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd1D, true, true);
     }
-GLSLANG_WEB_EXCLUDE_OFF
-    | SAMPLER2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd2D, true);
-    }
-    | SAMPLER2DARRAYSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd2D, true, true);
-    }
     | SAMPLERCUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2391,7 +2484,6 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdCube, true, true);
     }
-GLSLANG_WEB_EXCLUDE_ON
     | F16SAMPLER1D {
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2491,30 +2583,11 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtInt, EsdCube);
     }
-GLSLANG_WEB_EXCLUDE_ON
-    | ISAMPLER1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, Esd1D, true);
-    }
-GLSLANG_WEB_EXCLUDE_OFF
     | ISAMPLER2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtInt, Esd2D, true);
     }
-    | ISAMPLERCUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, EsdCube, true);
-    }
-GLSLANG_WEB_EXCLUDE_ON
-    | USAMPLER1D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd1D);
-    }
-GLSLANG_WEB_EXCLUDE_OFF
     | USAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2531,21 +2604,121 @@
         $$.sampler.set(EbtUint, EsdCube);
     }
 GLSLANG_WEB_EXCLUDE_ON
+    | ISAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd1D, true);
+    }
+    | ISAMPLERCUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, EsdCube, true);
+    }
+    | USAMPLER1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd1D);
+    }
     | USAMPLER1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, Esd1D, true);
     }
+    | USAMPLERCUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, EsdCube, true);
+    }
+    | TEXTURECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, EsdCube, true);
+    }
+    | ITEXTURECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, EsdCube, true);
+    }
+    | UTEXTURECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, EsdCube, true);
+    }
 GLSLANG_WEB_EXCLUDE_OFF
     | USAMPLER2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, Esd2D, true);
     }
-    | USAMPLERCUBEARRAY {
+    | TEXTURE2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, EsdCube, true);
+        $$.sampler.setTexture(EbtFloat, Esd2D);
+    }
+    | TEXTURE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd3D);
+    }
+    | TEXTURE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd2D, true);
+    }
+    | TEXTURECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, EsdCube);
+    }
+    | ITEXTURE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd2D);
+    }
+    | ITEXTURE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd3D);
+    }
+    | ITEXTURECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, EsdCube);
+    }
+    | ITEXTURE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd2D, true);
+    }
+    | UTEXTURE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd2D);
+    }
+    | UTEXTURE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd3D);
+    }
+    | UTEXTURECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, EsdCube);
+    }
+    | UTEXTURE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd2D, true);
+    }
+    | SAMPLER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setPureSampler(false);
+    }
+    | SAMPLERSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setPureSampler(true);
     }
 GLSLANG_WEB_EXCLUDE_ON
     | SAMPLER2DRECT {
@@ -2643,16 +2816,6 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, Esd2D, true, false, true);
     }
-    | SAMPLER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setPureSampler(false);
-    }
-    | SAMPLERSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setPureSampler(true);
-    }
     | TEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2664,33 +2827,18 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd1D);
     }
-    | TEXTURE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd2D);
-    }
     | F16TEXTURE2D {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd2D);
     }
-    | TEXTURE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd3D);
-    }
     | F16TEXTURE3D {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd3D);
     }
-    | TEXTURECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, EsdCube);
-    }
     | F16TEXTURECUBE {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2708,22 +2856,12 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd1D, true);
     }
-    | TEXTURE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd2D, true);
-    }
     | F16TEXTURE2DARRAY {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd2D, true);
     }
-    | TEXTURECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, EsdCube, true);
-    }
     | F16TEXTURECUBEARRAY {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2735,71 +2873,21 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtInt, Esd1D);
     }
-    | ITEXTURE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd2D);
-    }
-    | ITEXTURE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd3D);
-    }
-    | ITEXTURECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, EsdCube);
-    }
     | ITEXTURE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtInt, Esd1D, true);
     }
-    | ITEXTURE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd2D, true);
-    }
-    | ITEXTURECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, EsdCube, true);
-    }
     | UTEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtUint, Esd1D);
     }
-    | UTEXTURE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd2D);
-    }
-    | UTEXTURE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd3D);
-    }
-    | UTEXTURECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, EsdCube);
-    }
     | UTEXTURE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtUint, Esd1D, true);
     }
-    | UTEXTURE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd2D, true);
-    }
-    | UTEXTURECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, EsdCube, true);
-    }
     | TEXTURE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index 008faf0..e33d7d1 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -2,7 +2,8 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
-// Copyright (C) 2015-2018 Google, Inc.
+// Copyright (C) 2015-2019 Google, Inc.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -38,7 +39,7 @@
 
 //
 // Do not edit the .y file, only edit the .m4 file.
-// The .y bison file is not a source file, it is a derivitive of the .m4 file.
+// The .y bison file is not a source file, it is a derivative of the .m4 file.
 // The m4 file needs to be processed by m4 to generate the .y bison file.
 //
 // Code sandwiched between a pair:
@@ -49,7 +50,7 @@
 //      ...
 //    GLSLANG_WEB_EXCLUDE_OFF
 //
-// Will be exluded from the grammar when m4 is executed as:
+// Will be excluded from the grammar when m4 is executed as:
 //
 //    m4 -P -DGLSLANG_WEB
 //
@@ -166,8 +167,12 @@
 %token <lex> SAMPLER2DARRAYSHADOW ISAMPLER2D ISAMPLER3D ISAMPLERCUBE
 %token <lex> ISAMPLER2DARRAY USAMPLER2D USAMPLER3D
 %token <lex> USAMPLERCUBE USAMPLER2DARRAY
-%token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
-%token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
+
+// separate image/sampler
+%token <lex> SAMPLER SAMPLERSHADOW
+%token <lex>  TEXTURE2D  TEXTURE3D  TEXTURECUBE  TEXTURE2DARRAY
+%token <lex> ITEXTURE2D ITEXTURE3D ITEXTURECUBE ITEXTURE2DARRAY
+%token <lex> UTEXTURE2D UTEXTURE3D UTEXTURECUBE UTEXTURE2DARRAY
 
 
 
@@ -200,9 +205,13 @@
 %token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
 %token <lex> ATOMIC_UINT
 %token <lex> ACCSTRUCTNV
+%token <lex> ACCSTRUCTEXT
+%token <lex> RAYQUERYEXT
 %token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
 
 // combined image/sampler
+%token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
+%token <lex> ISAMPLERCUBEARRAY USAMPLERCUBEARRAY
 %token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
 %token <lex> SAMPLER2DRECT SAMPLER2DRECTSHADOW ISAMPLER2DRECT USAMPLER2DRECT
 %token <lex> SAMPLERBUFFER ISAMPLERBUFFER USAMPLERBUFFER
@@ -233,18 +242,12 @@
 %token <lex> F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY
 %token <lex> F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY
 
-// pure sampler
-%token <lex> SAMPLER SAMPLERSHADOW
-
 // texture without sampler
-%token <lex> TEXTURE1D TEXTURE2D TEXTURE3D TEXTURECUBE
-%token <lex> TEXTURE1DARRAY TEXTURE2DARRAY
-%token <lex> ITEXTURE1D ITEXTURE2D ITEXTURE3D ITEXTURECUBE
-%token <lex> ITEXTURE1DARRAY ITEXTURE2DARRAY UTEXTURE1D UTEXTURE2D UTEXTURE3D
-%token <lex> UTEXTURECUBE UTEXTURE1DARRAY UTEXTURE2DARRAY
+%token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
+%token <lex> TEXTURE1D ITEXTURE1D UTEXTURE1D
+%token <lex> TEXTURE1DARRAY ITEXTURE1DARRAY UTEXTURE1DARRAY
 %token <lex> TEXTURE2DRECT ITEXTURE2DRECT UTEXTURE2DRECT
 %token <lex> TEXTUREBUFFER ITEXTUREBUFFER UTEXTUREBUFFER
-%token <lex> TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY
 %token <lex> TEXTURE2DMS ITEXTURE2DMS UTEXTURE2DMS
 %token <lex> TEXTURE2DMSARRAY ITEXTURE2DMSARRAY UTEXTURE2DMSARRAY
 
@@ -263,6 +266,7 @@
 %token <lex> AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN
 %token <lex> MOD_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN XOR_ASSIGN OR_ASSIGN
 %token <lex> SUB_ASSIGN
+%token <lex> STRING_LITERAL
 
 %token <lex> LEFT_PAREN RIGHT_PAREN LEFT_BRACKET RIGHT_BRACKET LEFT_BRACE RIGHT_BRACE DOT
 %token <lex> COMMA COLON EQUAL SEMICOLON BANG DASH TILDE PLUS STAR SLASH PERCENT
@@ -277,7 +281,7 @@
 %token <lex> CENTROID IN OUT INOUT
 %token <lex> STRUCT VOID WHILE
 %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
-%token <lex> UNIFORM SHARED
+%token <lex> UNIFORM SHARED BUFFER
 %token <lex> FLAT SMOOTH LAYOUT
 
 
@@ -285,9 +289,10 @@
 %token <lex> INT64CONSTANT UINT64CONSTANT
 %token <lex> SUBROUTINE DEMOTE
 %token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
-%token <lex> PATCH SAMPLE BUFFER NONUNIFORM
+%token <lex> PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT
+%token <lex> PATCH SAMPLE NONUNIFORM
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
-%token <lex> SUBGROUPCOHERENT NONPRIVATE
+%token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
 %token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
 %token <lex> PRECISE
 
@@ -377,6 +382,9 @@
         $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
     }
 
+    | STRING_LITERAL {
+        $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true);
+    }
     | INT32CONSTANT {
         parseContext.explicitInt32Check($1.loc, "32-bit signed literal");
         $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
@@ -402,7 +410,9 @@
         $$ = parseContext.intermediate.addConstantUnion((unsigned short)$1.u, $1.loc, true);
     }
     | DOUBLECONSTANT {
-        parseContext.doubleCheck($1.loc, "double literal");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double literal");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double literal");
         $$ = parseContext.intermediate.addConstantUnion($1.d, EbtDouble, $1.loc, true);
     }
     | FLOAT16CONSTANT {
@@ -1360,7 +1370,6 @@
         $$.init($1.loc);
         $$.qualifier.storage = EvqUniform;
     }
-
     | SHARED {
         parseContext.globalCheck($1.loc, "shared");
         parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
@@ -1374,6 +1383,7 @@
         $$.init($1.loc);
         $$.qualifier.storage = EvqBuffer;
     }
+
     | ATTRIBUTE {
         parseContext.requireStage($1.loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated($1.loc, ECoreProfile, 130, "attribute");
@@ -1413,42 +1423,81 @@
     }
     | HITATTRNV {
         parseContext.globalCheck($1.loc, "hitAttributeNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangClosestHitNVMask
-            | EShLangAnyHitNVMask), "hitAttributeNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
+            | EShLangAnyHitMask), "hitAttributeNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqHitAttrNV;
+        $$.qualifier.storage = EvqHitAttr;
+    }
+    | HITATTREXT {
+        parseContext.globalCheck($1.loc, "hitAttributeEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
+            | EShLangAnyHitMask), "hitAttributeEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "hitAttributeNV");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqHitAttr;
     }
     | PAYLOADNV {
         parseContext.globalCheck($1.loc, "rayPayloadNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask |
-            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqPayloadNV;
+        $$.qualifier.storage = EvqPayload;
+    }
+    | PAYLOADEXT {
+        parseContext.globalCheck($1.loc, "rayPayloadEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayload;
     }
     | PAYLOADINNV {
         parseContext.globalCheck($1.loc, "rayPayloadInNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitNVMask |
-            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadInNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqPayloadInNV;
+        $$.qualifier.storage = EvqPayloadIn;
+    }
+    | PAYLOADINEXT {
+        parseContext.globalCheck($1.loc, "rayPayloadInEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadInEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqPayloadIn;
     }
     | CALLDATANV {
         parseContext.globalCheck($1.loc, "callableDataNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenNVMask |
-            EShLangClosestHitNVMask | EShLangMissNVMask | EShLangCallableNVMask), "callableDataNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask |
+            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqCallableDataNV;
+        $$.qualifier.storage = EvqCallableData;
+    }
+    | CALLDATAEXT {
+        parseContext.globalCheck($1.loc, "callableDataEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask |
+            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqCallableData;
     }
     | CALLDATAINNV {
         parseContext.globalCheck($1.loc, "callableDataInNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableNVMask), "callableDataInNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
         parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
         $$.init($1.loc);
-        $$.qualifier.storage = EvqCallableDataInNV;
+        $$.qualifier.storage = EvqCallableDataIn;
+    }
+    | CALLDATAINEXT {
+        parseContext.globalCheck($1.loc, "callableDataInEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataInEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqCallableDataIn;
     }
     | COHERENT {
         $$.init($1.loc);
@@ -1479,6 +1528,11 @@
         parseContext.requireExtensions($1.loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
         $$.qualifier.nonprivate = true;
     }
+    | SHADERCALLCOHERENT {
+        $$.init($1.loc);
+        parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
+        $$.qualifier.shadercallcoherent = true;
+    }
     | VOLATILE {
         $$.init($1.loc);
         $$.qualifier.volatil = true;
@@ -1751,7 +1805,9 @@
     }
 
     | DOUBLE {
-        parseContext.doubleCheck($1.loc, "double");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
     }
@@ -1811,19 +1867,25 @@
         $$.basicType = EbtUint64;
     }
     | DVEC2 {
-        parseContext.doubleCheck($1.loc, "double vector");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double vector");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setVector(2);
     }
     | DVEC3 {
-        parseContext.doubleCheck($1.loc, "double vector");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double vector");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setVector(3);
     }
     | DVEC4 {
-        parseContext.doubleCheck($1.loc, "double vector");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double vector");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setVector(4);
@@ -2027,73 +2089,97 @@
         $$.setVector(4);
     }
     | DMAT2 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(2, 2);
     }
     | DMAT3 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(3, 3);
     }
     | DMAT4 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 4);
     }
     | DMAT2X2 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(2, 2);
     }
     | DMAT2X3 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(2, 3);
     }
     | DMAT2X4 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(2, 4);
     }
     | DMAT3X2 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(3, 2);
     }
     | DMAT3X3 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(3, 3);
     }
     | DMAT3X4 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(3, 4);
     }
     | DMAT4X2 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 2);
     }
     | DMAT4X3 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 3);
     }
     | DMAT4X4 {
-        parseContext.doubleCheck($1.loc, "double matrix");
+        parseContext.requireProfile($1.loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck($1.loc, "double matrix");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtDouble;
         $$.setMatrix(4, 4);
@@ -2316,7 +2402,15 @@
     }
     | ACCSTRUCTNV {
        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-       $$.basicType = EbtAccStructNV;
+       $$.basicType = EbtAccStruct;
+    }
+    | ACCSTRUCTEXT {
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtAccStruct;
+    }
+    | RAYQUERYEXT {
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtRayQuery;
     }
     | ATOMIC_UINT {
         parseContext.vulkanRemoved($1.loc, "atomic counter types");
@@ -2354,6 +2448,16 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdCube, false, true);
     }
+    | SAMPLER2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D, true);
+    }
+    | SAMPLER2DARRAYSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtFloat, Esd2D, true, true);
+    }
 
     | SAMPLER1DSHADOW {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2370,17 +2474,6 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, Esd1D, true, true);
     }
-
-    | SAMPLER2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd2D, true);
-    }
-    | SAMPLER2DARRAYSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtFloat, Esd2D, true, true);
-    }
     | SAMPLERCUBEARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2391,7 +2484,6 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtFloat, EsdCube, true, true);
     }
-
     | F16SAMPLER1D {
         parseContext.float16OpaqueCheck($1.loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2491,30 +2583,11 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtInt, EsdCube);
     }
-
-    | ISAMPLER1DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, Esd1D, true);
-    }
-
     | ISAMPLER2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtInt, Esd2D, true);
     }
-    | ISAMPLERCUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtInt, EsdCube, true);
-    }
-
-    | USAMPLER1D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, Esd1D);
-    }
-
     | USAMPLER2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2531,21 +2604,121 @@
         $$.sampler.set(EbtUint, EsdCube);
     }
 
+    | ISAMPLER1DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, Esd1D, true);
+    }
+    | ISAMPLERCUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtInt, EsdCube, true);
+    }
+    | USAMPLER1D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, Esd1D);
+    }
     | USAMPLER1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, Esd1D, true);
     }
+    | USAMPLERCUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.set(EbtUint, EsdCube, true);
+    }
+    | TEXTURECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, EsdCube, true);
+    }
+    | ITEXTURECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, EsdCube, true);
+    }
+    | UTEXTURECUBEARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, EsdCube, true);
+    }
 
     | USAMPLER2DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, Esd2D, true);
     }
-    | USAMPLERCUBEARRAY {
+    | TEXTURE2D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
-        $$.sampler.set(EbtUint, EsdCube, true);
+        $$.sampler.setTexture(EbtFloat, Esd2D);
+    }
+    | TEXTURE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd3D);
+    }
+    | TEXTURE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, Esd2D, true);
+    }
+    | TEXTURECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtFloat, EsdCube);
+    }
+    | ITEXTURE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd2D);
+    }
+    | ITEXTURE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd3D);
+    }
+    | ITEXTURECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, EsdCube);
+    }
+    | ITEXTURE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtInt, Esd2D, true);
+    }
+    | UTEXTURE2D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd2D);
+    }
+    | UTEXTURE3D {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd3D);
+    }
+    | UTEXTURECUBE {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, EsdCube);
+    }
+    | UTEXTURE2DARRAY {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setTexture(EbtUint, Esd2D, true);
+    }
+    | SAMPLER {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setPureSampler(false);
+    }
+    | SAMPLERSHADOW {
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setPureSampler(true);
     }
 
     | SAMPLER2DRECT {
@@ -2643,16 +2816,6 @@
         $$.basicType = EbtSampler;
         $$.sampler.set(EbtUint, Esd2D, true, false, true);
     }
-    | SAMPLER {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setPureSampler(false);
-    }
-    | SAMPLERSHADOW {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setPureSampler(true);
-    }
     | TEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -2664,33 +2827,18 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd1D);
     }
-    | TEXTURE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd2D);
-    }
     | F16TEXTURE2D {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd2D);
     }
-    | TEXTURE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd3D);
-    }
     | F16TEXTURE3D {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd3D);
     }
-    | TEXTURECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, EsdCube);
-    }
     | F16TEXTURECUBE {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2708,22 +2856,12 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd1D, true);
     }
-    | TEXTURE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, Esd2D, true);
-    }
     | F16TEXTURE2DARRAY {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtFloat16, Esd2D, true);
     }
-    | TEXTURECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtFloat, EsdCube, true);
-    }
     | F16TEXTURECUBEARRAY {
         parseContext.float16OpaqueCheck($1.loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -2735,71 +2873,21 @@
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtInt, Esd1D);
     }
-    | ITEXTURE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd2D);
-    }
-    | ITEXTURE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd3D);
-    }
-    | ITEXTURECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, EsdCube);
-    }
     | ITEXTURE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtInt, Esd1D, true);
     }
-    | ITEXTURE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, Esd2D, true);
-    }
-    | ITEXTURECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtInt, EsdCube, true);
-    }
     | UTEXTURE1D {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtUint, Esd1D);
     }
-    | UTEXTURE2D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd2D);
-    }
-    | UTEXTURE3D {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd3D);
-    }
-    | UTEXTURECUBE {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, EsdCube);
-    }
     | UTEXTURE1DARRAY {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
         $$.sampler.setTexture(EbtUint, Esd1D, true);
     }
-    | UTEXTURE2DARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, Esd2D, true);
-    }
-    | UTEXTURECUBEARRAY {
-        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
-        $$.basicType = EbtSampler;
-        $$.sampler.setTexture(EbtUint, EsdCube, true);
-    }
     | TEXTURE2DRECT {
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
         $$.basicType = EbtSampler;
@@ -3797,3 +3885,4 @@
 
 
 %%
+
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index 523e405..69f7f8e 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -62,7 +62,7 @@
 
 
 /* Copy the first part of user declarations.  */
-#line 68 "MachineIndependent/glslang.y" /* yacc.c:339  */
+#line 69 "glslang.y" /* yacc.c:339  */
 
 
 /* Based on:
@@ -88,7 +88,7 @@
 using namespace glslang;
 
 
-#line 92 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339  */
+#line 92 "glslang_tab.cpp" /* yacc.c:339  */
 
 # ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
@@ -108,8 +108,8 @@
 
 /* In a future release of Bison, this section will be replaced
    by #include "glslang_tab.cpp.h".  */
-#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
+#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -167,370 +167,379 @@
     USAMPLER3D = 299,
     USAMPLERCUBE = 300,
     USAMPLER2DARRAY = 301,
-    SAMPLERCUBEARRAY = 302,
-    SAMPLERCUBEARRAYSHADOW = 303,
-    ISAMPLERCUBEARRAY = 304,
-    USAMPLERCUBEARRAY = 305,
-    ATTRIBUTE = 306,
-    VARYING = 307,
-    FLOAT16_T = 308,
-    FLOAT32_T = 309,
-    DOUBLE = 310,
-    FLOAT64_T = 311,
-    INT64_T = 312,
-    UINT64_T = 313,
-    INT32_T = 314,
-    UINT32_T = 315,
-    INT16_T = 316,
-    UINT16_T = 317,
-    INT8_T = 318,
-    UINT8_T = 319,
-    I64VEC2 = 320,
-    I64VEC3 = 321,
-    I64VEC4 = 322,
-    U64VEC2 = 323,
-    U64VEC3 = 324,
-    U64VEC4 = 325,
-    I32VEC2 = 326,
-    I32VEC3 = 327,
-    I32VEC4 = 328,
-    U32VEC2 = 329,
-    U32VEC3 = 330,
-    U32VEC4 = 331,
-    I16VEC2 = 332,
-    I16VEC3 = 333,
-    I16VEC4 = 334,
-    U16VEC2 = 335,
-    U16VEC3 = 336,
-    U16VEC4 = 337,
-    I8VEC2 = 338,
-    I8VEC3 = 339,
-    I8VEC4 = 340,
-    U8VEC2 = 341,
-    U8VEC3 = 342,
-    U8VEC4 = 343,
-    DVEC2 = 344,
-    DVEC3 = 345,
-    DVEC4 = 346,
-    DMAT2 = 347,
-    DMAT3 = 348,
-    DMAT4 = 349,
-    F16VEC2 = 350,
-    F16VEC3 = 351,
-    F16VEC4 = 352,
-    F16MAT2 = 353,
-    F16MAT3 = 354,
-    F16MAT4 = 355,
-    F32VEC2 = 356,
-    F32VEC3 = 357,
-    F32VEC4 = 358,
-    F32MAT2 = 359,
-    F32MAT3 = 360,
-    F32MAT4 = 361,
-    F64VEC2 = 362,
-    F64VEC3 = 363,
-    F64VEC4 = 364,
-    F64MAT2 = 365,
-    F64MAT3 = 366,
-    F64MAT4 = 367,
-    DMAT2X2 = 368,
-    DMAT2X3 = 369,
-    DMAT2X4 = 370,
-    DMAT3X2 = 371,
-    DMAT3X3 = 372,
-    DMAT3X4 = 373,
-    DMAT4X2 = 374,
-    DMAT4X3 = 375,
-    DMAT4X4 = 376,
-    F16MAT2X2 = 377,
-    F16MAT2X3 = 378,
-    F16MAT2X4 = 379,
-    F16MAT3X2 = 380,
-    F16MAT3X3 = 381,
-    F16MAT3X4 = 382,
-    F16MAT4X2 = 383,
-    F16MAT4X3 = 384,
-    F16MAT4X4 = 385,
-    F32MAT2X2 = 386,
-    F32MAT2X3 = 387,
-    F32MAT2X4 = 388,
-    F32MAT3X2 = 389,
-    F32MAT3X3 = 390,
-    F32MAT3X4 = 391,
-    F32MAT4X2 = 392,
-    F32MAT4X3 = 393,
-    F32MAT4X4 = 394,
-    F64MAT2X2 = 395,
-    F64MAT2X3 = 396,
-    F64MAT2X4 = 397,
-    F64MAT3X2 = 398,
-    F64MAT3X3 = 399,
-    F64MAT3X4 = 400,
-    F64MAT4X2 = 401,
-    F64MAT4X3 = 402,
-    F64MAT4X4 = 403,
-    ATOMIC_UINT = 404,
-    ACCSTRUCTNV = 405,
-    FCOOPMATNV = 406,
-    ICOOPMATNV = 407,
-    UCOOPMATNV = 408,
-    SAMPLER1D = 409,
-    SAMPLER1DARRAY = 410,
-    SAMPLER1DARRAYSHADOW = 411,
-    ISAMPLER1D = 412,
-    SAMPLER1DSHADOW = 413,
-    SAMPLER2DRECT = 414,
-    SAMPLER2DRECTSHADOW = 415,
-    ISAMPLER2DRECT = 416,
-    USAMPLER2DRECT = 417,
-    SAMPLERBUFFER = 418,
-    ISAMPLERBUFFER = 419,
-    USAMPLERBUFFER = 420,
-    SAMPLER2DMS = 421,
-    ISAMPLER2DMS = 422,
-    USAMPLER2DMS = 423,
-    SAMPLER2DMSARRAY = 424,
-    ISAMPLER2DMSARRAY = 425,
-    USAMPLER2DMSARRAY = 426,
-    SAMPLEREXTERNALOES = 427,
-    SAMPLEREXTERNAL2DY2YEXT = 428,
-    ISAMPLER1DARRAY = 429,
-    USAMPLER1D = 430,
-    USAMPLER1DARRAY = 431,
-    F16SAMPLER1D = 432,
-    F16SAMPLER2D = 433,
-    F16SAMPLER3D = 434,
-    F16SAMPLER2DRECT = 435,
-    F16SAMPLERCUBE = 436,
-    F16SAMPLER1DARRAY = 437,
-    F16SAMPLER2DARRAY = 438,
-    F16SAMPLERCUBEARRAY = 439,
-    F16SAMPLERBUFFER = 440,
-    F16SAMPLER2DMS = 441,
-    F16SAMPLER2DMSARRAY = 442,
-    F16SAMPLER1DSHADOW = 443,
-    F16SAMPLER2DSHADOW = 444,
-    F16SAMPLER1DARRAYSHADOW = 445,
-    F16SAMPLER2DARRAYSHADOW = 446,
-    F16SAMPLER2DRECTSHADOW = 447,
-    F16SAMPLERCUBESHADOW = 448,
-    F16SAMPLERCUBEARRAYSHADOW = 449,
-    IMAGE1D = 450,
-    IIMAGE1D = 451,
-    UIMAGE1D = 452,
-    IMAGE2D = 453,
-    IIMAGE2D = 454,
-    UIMAGE2D = 455,
-    IMAGE3D = 456,
-    IIMAGE3D = 457,
-    UIMAGE3D = 458,
-    IMAGE2DRECT = 459,
-    IIMAGE2DRECT = 460,
-    UIMAGE2DRECT = 461,
-    IMAGECUBE = 462,
-    IIMAGECUBE = 463,
-    UIMAGECUBE = 464,
-    IMAGEBUFFER = 465,
-    IIMAGEBUFFER = 466,
-    UIMAGEBUFFER = 467,
-    IMAGE1DARRAY = 468,
-    IIMAGE1DARRAY = 469,
-    UIMAGE1DARRAY = 470,
-    IMAGE2DARRAY = 471,
-    IIMAGE2DARRAY = 472,
-    UIMAGE2DARRAY = 473,
-    IMAGECUBEARRAY = 474,
-    IIMAGECUBEARRAY = 475,
-    UIMAGECUBEARRAY = 476,
-    IMAGE2DMS = 477,
-    IIMAGE2DMS = 478,
-    UIMAGE2DMS = 479,
-    IMAGE2DMSARRAY = 480,
-    IIMAGE2DMSARRAY = 481,
-    UIMAGE2DMSARRAY = 482,
-    F16IMAGE1D = 483,
-    F16IMAGE2D = 484,
-    F16IMAGE3D = 485,
-    F16IMAGE2DRECT = 486,
-    F16IMAGECUBE = 487,
-    F16IMAGE1DARRAY = 488,
-    F16IMAGE2DARRAY = 489,
-    F16IMAGECUBEARRAY = 490,
-    F16IMAGEBUFFER = 491,
-    F16IMAGE2DMS = 492,
-    F16IMAGE2DMSARRAY = 493,
-    SAMPLER = 494,
-    SAMPLERSHADOW = 495,
-    TEXTURE1D = 496,
-    TEXTURE2D = 497,
-    TEXTURE3D = 498,
-    TEXTURECUBE = 499,
-    TEXTURE1DARRAY = 500,
-    TEXTURE2DARRAY = 501,
-    ITEXTURE1D = 502,
-    ITEXTURE2D = 503,
-    ITEXTURE3D = 504,
-    ITEXTURECUBE = 505,
-    ITEXTURE1DARRAY = 506,
-    ITEXTURE2DARRAY = 507,
-    UTEXTURE1D = 508,
-    UTEXTURE2D = 509,
-    UTEXTURE3D = 510,
-    UTEXTURECUBE = 511,
-    UTEXTURE1DARRAY = 512,
-    UTEXTURE2DARRAY = 513,
-    TEXTURE2DRECT = 514,
-    ITEXTURE2DRECT = 515,
-    UTEXTURE2DRECT = 516,
-    TEXTUREBUFFER = 517,
-    ITEXTUREBUFFER = 518,
-    UTEXTUREBUFFER = 519,
-    TEXTURECUBEARRAY = 520,
-    ITEXTURECUBEARRAY = 521,
-    UTEXTURECUBEARRAY = 522,
-    TEXTURE2DMS = 523,
-    ITEXTURE2DMS = 524,
-    UTEXTURE2DMS = 525,
-    TEXTURE2DMSARRAY = 526,
-    ITEXTURE2DMSARRAY = 527,
-    UTEXTURE2DMSARRAY = 528,
-    F16TEXTURE1D = 529,
-    F16TEXTURE2D = 530,
-    F16TEXTURE3D = 531,
-    F16TEXTURE2DRECT = 532,
-    F16TEXTURECUBE = 533,
-    F16TEXTURE1DARRAY = 534,
-    F16TEXTURE2DARRAY = 535,
-    F16TEXTURECUBEARRAY = 536,
-    F16TEXTUREBUFFER = 537,
-    F16TEXTURE2DMS = 538,
-    F16TEXTURE2DMSARRAY = 539,
-    SUBPASSINPUT = 540,
-    SUBPASSINPUTMS = 541,
-    ISUBPASSINPUT = 542,
-    ISUBPASSINPUTMS = 543,
-    USUBPASSINPUT = 544,
-    USUBPASSINPUTMS = 545,
-    F16SUBPASSINPUT = 546,
-    F16SUBPASSINPUTMS = 547,
-    LEFT_OP = 548,
-    RIGHT_OP = 549,
-    INC_OP = 550,
-    DEC_OP = 551,
-    LE_OP = 552,
-    GE_OP = 553,
-    EQ_OP = 554,
-    NE_OP = 555,
-    AND_OP = 556,
-    OR_OP = 557,
-    XOR_OP = 558,
-    MUL_ASSIGN = 559,
-    DIV_ASSIGN = 560,
-    ADD_ASSIGN = 561,
-    MOD_ASSIGN = 562,
-    LEFT_ASSIGN = 563,
-    RIGHT_ASSIGN = 564,
-    AND_ASSIGN = 565,
-    XOR_ASSIGN = 566,
-    OR_ASSIGN = 567,
-    SUB_ASSIGN = 568,
-    LEFT_PAREN = 569,
-    RIGHT_PAREN = 570,
-    LEFT_BRACKET = 571,
-    RIGHT_BRACKET = 572,
-    LEFT_BRACE = 573,
-    RIGHT_BRACE = 574,
-    DOT = 575,
-    COMMA = 576,
-    COLON = 577,
-    EQUAL = 578,
-    SEMICOLON = 579,
-    BANG = 580,
-    DASH = 581,
-    TILDE = 582,
-    PLUS = 583,
-    STAR = 584,
-    SLASH = 585,
-    PERCENT = 586,
-    LEFT_ANGLE = 587,
-    RIGHT_ANGLE = 588,
-    VERTICAL_BAR = 589,
-    CARET = 590,
-    AMPERSAND = 591,
-    QUESTION = 592,
-    INVARIANT = 593,
-    HIGH_PRECISION = 594,
-    MEDIUM_PRECISION = 595,
-    LOW_PRECISION = 596,
-    PRECISION = 597,
-    PACKED = 598,
-    RESOURCE = 599,
-    SUPERP = 600,
-    FLOATCONSTANT = 601,
-    INTCONSTANT = 602,
-    UINTCONSTANT = 603,
-    BOOLCONSTANT = 604,
-    IDENTIFIER = 605,
-    TYPE_NAME = 606,
-    CENTROID = 607,
-    IN = 608,
-    OUT = 609,
-    INOUT = 610,
-    STRUCT = 611,
-    VOID = 612,
-    WHILE = 613,
-    BREAK = 614,
-    CONTINUE = 615,
-    DO = 616,
-    ELSE = 617,
-    FOR = 618,
-    IF = 619,
-    DISCARD = 620,
-    RETURN = 621,
-    SWITCH = 622,
-    CASE = 623,
-    DEFAULT = 624,
-    UNIFORM = 625,
-    SHARED = 626,
-    FLAT = 627,
-    SMOOTH = 628,
-    LAYOUT = 629,
-    DOUBLECONSTANT = 630,
-    INT16CONSTANT = 631,
-    UINT16CONSTANT = 632,
-    FLOAT16CONSTANT = 633,
-    INT32CONSTANT = 634,
-    UINT32CONSTANT = 635,
-    INT64CONSTANT = 636,
-    UINT64CONSTANT = 637,
-    SUBROUTINE = 638,
-    DEMOTE = 639,
-    PAYLOADNV = 640,
-    PAYLOADINNV = 641,
-    HITATTRNV = 642,
-    CALLDATANV = 643,
-    CALLDATAINNV = 644,
-    PATCH = 645,
-    SAMPLE = 646,
-    BUFFER = 647,
-    NONUNIFORM = 648,
-    COHERENT = 649,
-    VOLATILE = 650,
-    RESTRICT = 651,
-    READONLY = 652,
-    WRITEONLY = 653,
-    DEVICECOHERENT = 654,
-    QUEUEFAMILYCOHERENT = 655,
-    WORKGROUPCOHERENT = 656,
-    SUBGROUPCOHERENT = 657,
-    NONPRIVATE = 658,
-    NOPERSPECTIVE = 659,
-    EXPLICITINTERPAMD = 660,
-    PERVERTEXNV = 661,
-    PERPRIMITIVENV = 662,
-    PERVIEWNV = 663,
-    PERTASKNV = 664,
-    PRECISE = 665
+    SAMPLER = 302,
+    SAMPLERSHADOW = 303,
+    TEXTURE2D = 304,
+    TEXTURE3D = 305,
+    TEXTURECUBE = 306,
+    TEXTURE2DARRAY = 307,
+    ITEXTURE2D = 308,
+    ITEXTURE3D = 309,
+    ITEXTURECUBE = 310,
+    ITEXTURE2DARRAY = 311,
+    UTEXTURE2D = 312,
+    UTEXTURE3D = 313,
+    UTEXTURECUBE = 314,
+    UTEXTURE2DARRAY = 315,
+    ATTRIBUTE = 316,
+    VARYING = 317,
+    FLOAT16_T = 318,
+    FLOAT32_T = 319,
+    DOUBLE = 320,
+    FLOAT64_T = 321,
+    INT64_T = 322,
+    UINT64_T = 323,
+    INT32_T = 324,
+    UINT32_T = 325,
+    INT16_T = 326,
+    UINT16_T = 327,
+    INT8_T = 328,
+    UINT8_T = 329,
+    I64VEC2 = 330,
+    I64VEC3 = 331,
+    I64VEC4 = 332,
+    U64VEC2 = 333,
+    U64VEC3 = 334,
+    U64VEC4 = 335,
+    I32VEC2 = 336,
+    I32VEC3 = 337,
+    I32VEC4 = 338,
+    U32VEC2 = 339,
+    U32VEC3 = 340,
+    U32VEC4 = 341,
+    I16VEC2 = 342,
+    I16VEC3 = 343,
+    I16VEC4 = 344,
+    U16VEC2 = 345,
+    U16VEC3 = 346,
+    U16VEC4 = 347,
+    I8VEC2 = 348,
+    I8VEC3 = 349,
+    I8VEC4 = 350,
+    U8VEC2 = 351,
+    U8VEC3 = 352,
+    U8VEC4 = 353,
+    DVEC2 = 354,
+    DVEC3 = 355,
+    DVEC4 = 356,
+    DMAT2 = 357,
+    DMAT3 = 358,
+    DMAT4 = 359,
+    F16VEC2 = 360,
+    F16VEC3 = 361,
+    F16VEC4 = 362,
+    F16MAT2 = 363,
+    F16MAT3 = 364,
+    F16MAT4 = 365,
+    F32VEC2 = 366,
+    F32VEC3 = 367,
+    F32VEC4 = 368,
+    F32MAT2 = 369,
+    F32MAT3 = 370,
+    F32MAT4 = 371,
+    F64VEC2 = 372,
+    F64VEC3 = 373,
+    F64VEC4 = 374,
+    F64MAT2 = 375,
+    F64MAT3 = 376,
+    F64MAT4 = 377,
+    DMAT2X2 = 378,
+    DMAT2X3 = 379,
+    DMAT2X4 = 380,
+    DMAT3X2 = 381,
+    DMAT3X3 = 382,
+    DMAT3X4 = 383,
+    DMAT4X2 = 384,
+    DMAT4X3 = 385,
+    DMAT4X4 = 386,
+    F16MAT2X2 = 387,
+    F16MAT2X3 = 388,
+    F16MAT2X4 = 389,
+    F16MAT3X2 = 390,
+    F16MAT3X3 = 391,
+    F16MAT3X4 = 392,
+    F16MAT4X2 = 393,
+    F16MAT4X3 = 394,
+    F16MAT4X4 = 395,
+    F32MAT2X2 = 396,
+    F32MAT2X3 = 397,
+    F32MAT2X4 = 398,
+    F32MAT3X2 = 399,
+    F32MAT3X3 = 400,
+    F32MAT3X4 = 401,
+    F32MAT4X2 = 402,
+    F32MAT4X3 = 403,
+    F32MAT4X4 = 404,
+    F64MAT2X2 = 405,
+    F64MAT2X3 = 406,
+    F64MAT2X4 = 407,
+    F64MAT3X2 = 408,
+    F64MAT3X3 = 409,
+    F64MAT3X4 = 410,
+    F64MAT4X2 = 411,
+    F64MAT4X3 = 412,
+    F64MAT4X4 = 413,
+    ATOMIC_UINT = 414,
+    ACCSTRUCTNV = 415,
+    ACCSTRUCTEXT = 416,
+    RAYQUERYEXT = 417,
+    FCOOPMATNV = 418,
+    ICOOPMATNV = 419,
+    UCOOPMATNV = 420,
+    SAMPLERCUBEARRAY = 421,
+    SAMPLERCUBEARRAYSHADOW = 422,
+    ISAMPLERCUBEARRAY = 423,
+    USAMPLERCUBEARRAY = 424,
+    SAMPLER1D = 425,
+    SAMPLER1DARRAY = 426,
+    SAMPLER1DARRAYSHADOW = 427,
+    ISAMPLER1D = 428,
+    SAMPLER1DSHADOW = 429,
+    SAMPLER2DRECT = 430,
+    SAMPLER2DRECTSHADOW = 431,
+    ISAMPLER2DRECT = 432,
+    USAMPLER2DRECT = 433,
+    SAMPLERBUFFER = 434,
+    ISAMPLERBUFFER = 435,
+    USAMPLERBUFFER = 436,
+    SAMPLER2DMS = 437,
+    ISAMPLER2DMS = 438,
+    USAMPLER2DMS = 439,
+    SAMPLER2DMSARRAY = 440,
+    ISAMPLER2DMSARRAY = 441,
+    USAMPLER2DMSARRAY = 442,
+    SAMPLEREXTERNALOES = 443,
+    SAMPLEREXTERNAL2DY2YEXT = 444,
+    ISAMPLER1DARRAY = 445,
+    USAMPLER1D = 446,
+    USAMPLER1DARRAY = 447,
+    F16SAMPLER1D = 448,
+    F16SAMPLER2D = 449,
+    F16SAMPLER3D = 450,
+    F16SAMPLER2DRECT = 451,
+    F16SAMPLERCUBE = 452,
+    F16SAMPLER1DARRAY = 453,
+    F16SAMPLER2DARRAY = 454,
+    F16SAMPLERCUBEARRAY = 455,
+    F16SAMPLERBUFFER = 456,
+    F16SAMPLER2DMS = 457,
+    F16SAMPLER2DMSARRAY = 458,
+    F16SAMPLER1DSHADOW = 459,
+    F16SAMPLER2DSHADOW = 460,
+    F16SAMPLER1DARRAYSHADOW = 461,
+    F16SAMPLER2DARRAYSHADOW = 462,
+    F16SAMPLER2DRECTSHADOW = 463,
+    F16SAMPLERCUBESHADOW = 464,
+    F16SAMPLERCUBEARRAYSHADOW = 465,
+    IMAGE1D = 466,
+    IIMAGE1D = 467,
+    UIMAGE1D = 468,
+    IMAGE2D = 469,
+    IIMAGE2D = 470,
+    UIMAGE2D = 471,
+    IMAGE3D = 472,
+    IIMAGE3D = 473,
+    UIMAGE3D = 474,
+    IMAGE2DRECT = 475,
+    IIMAGE2DRECT = 476,
+    UIMAGE2DRECT = 477,
+    IMAGECUBE = 478,
+    IIMAGECUBE = 479,
+    UIMAGECUBE = 480,
+    IMAGEBUFFER = 481,
+    IIMAGEBUFFER = 482,
+    UIMAGEBUFFER = 483,
+    IMAGE1DARRAY = 484,
+    IIMAGE1DARRAY = 485,
+    UIMAGE1DARRAY = 486,
+    IMAGE2DARRAY = 487,
+    IIMAGE2DARRAY = 488,
+    UIMAGE2DARRAY = 489,
+    IMAGECUBEARRAY = 490,
+    IIMAGECUBEARRAY = 491,
+    UIMAGECUBEARRAY = 492,
+    IMAGE2DMS = 493,
+    IIMAGE2DMS = 494,
+    UIMAGE2DMS = 495,
+    IMAGE2DMSARRAY = 496,
+    IIMAGE2DMSARRAY = 497,
+    UIMAGE2DMSARRAY = 498,
+    F16IMAGE1D = 499,
+    F16IMAGE2D = 500,
+    F16IMAGE3D = 501,
+    F16IMAGE2DRECT = 502,
+    F16IMAGECUBE = 503,
+    F16IMAGE1DARRAY = 504,
+    F16IMAGE2DARRAY = 505,
+    F16IMAGECUBEARRAY = 506,
+    F16IMAGEBUFFER = 507,
+    F16IMAGE2DMS = 508,
+    F16IMAGE2DMSARRAY = 509,
+    TEXTURECUBEARRAY = 510,
+    ITEXTURECUBEARRAY = 511,
+    UTEXTURECUBEARRAY = 512,
+    TEXTURE1D = 513,
+    ITEXTURE1D = 514,
+    UTEXTURE1D = 515,
+    TEXTURE1DARRAY = 516,
+    ITEXTURE1DARRAY = 517,
+    UTEXTURE1DARRAY = 518,
+    TEXTURE2DRECT = 519,
+    ITEXTURE2DRECT = 520,
+    UTEXTURE2DRECT = 521,
+    TEXTUREBUFFER = 522,
+    ITEXTUREBUFFER = 523,
+    UTEXTUREBUFFER = 524,
+    TEXTURE2DMS = 525,
+    ITEXTURE2DMS = 526,
+    UTEXTURE2DMS = 527,
+    TEXTURE2DMSARRAY = 528,
+    ITEXTURE2DMSARRAY = 529,
+    UTEXTURE2DMSARRAY = 530,
+    F16TEXTURE1D = 531,
+    F16TEXTURE2D = 532,
+    F16TEXTURE3D = 533,
+    F16TEXTURE2DRECT = 534,
+    F16TEXTURECUBE = 535,
+    F16TEXTURE1DARRAY = 536,
+    F16TEXTURE2DARRAY = 537,
+    F16TEXTURECUBEARRAY = 538,
+    F16TEXTUREBUFFER = 539,
+    F16TEXTURE2DMS = 540,
+    F16TEXTURE2DMSARRAY = 541,
+    SUBPASSINPUT = 542,
+    SUBPASSINPUTMS = 543,
+    ISUBPASSINPUT = 544,
+    ISUBPASSINPUTMS = 545,
+    USUBPASSINPUT = 546,
+    USUBPASSINPUTMS = 547,
+    F16SUBPASSINPUT = 548,
+    F16SUBPASSINPUTMS = 549,
+    LEFT_OP = 550,
+    RIGHT_OP = 551,
+    INC_OP = 552,
+    DEC_OP = 553,
+    LE_OP = 554,
+    GE_OP = 555,
+    EQ_OP = 556,
+    NE_OP = 557,
+    AND_OP = 558,
+    OR_OP = 559,
+    XOR_OP = 560,
+    MUL_ASSIGN = 561,
+    DIV_ASSIGN = 562,
+    ADD_ASSIGN = 563,
+    MOD_ASSIGN = 564,
+    LEFT_ASSIGN = 565,
+    RIGHT_ASSIGN = 566,
+    AND_ASSIGN = 567,
+    XOR_ASSIGN = 568,
+    OR_ASSIGN = 569,
+    SUB_ASSIGN = 570,
+    STRING_LITERAL = 571,
+    LEFT_PAREN = 572,
+    RIGHT_PAREN = 573,
+    LEFT_BRACKET = 574,
+    RIGHT_BRACKET = 575,
+    LEFT_BRACE = 576,
+    RIGHT_BRACE = 577,
+    DOT = 578,
+    COMMA = 579,
+    COLON = 580,
+    EQUAL = 581,
+    SEMICOLON = 582,
+    BANG = 583,
+    DASH = 584,
+    TILDE = 585,
+    PLUS = 586,
+    STAR = 587,
+    SLASH = 588,
+    PERCENT = 589,
+    LEFT_ANGLE = 590,
+    RIGHT_ANGLE = 591,
+    VERTICAL_BAR = 592,
+    CARET = 593,
+    AMPERSAND = 594,
+    QUESTION = 595,
+    INVARIANT = 596,
+    HIGH_PRECISION = 597,
+    MEDIUM_PRECISION = 598,
+    LOW_PRECISION = 599,
+    PRECISION = 600,
+    PACKED = 601,
+    RESOURCE = 602,
+    SUPERP = 603,
+    FLOATCONSTANT = 604,
+    INTCONSTANT = 605,
+    UINTCONSTANT = 606,
+    BOOLCONSTANT = 607,
+    IDENTIFIER = 608,
+    TYPE_NAME = 609,
+    CENTROID = 610,
+    IN = 611,
+    OUT = 612,
+    INOUT = 613,
+    STRUCT = 614,
+    VOID = 615,
+    WHILE = 616,
+    BREAK = 617,
+    CONTINUE = 618,
+    DO = 619,
+    ELSE = 620,
+    FOR = 621,
+    IF = 622,
+    DISCARD = 623,
+    RETURN = 624,
+    SWITCH = 625,
+    CASE = 626,
+    DEFAULT = 627,
+    UNIFORM = 628,
+    SHARED = 629,
+    BUFFER = 630,
+    FLAT = 631,
+    SMOOTH = 632,
+    LAYOUT = 633,
+    DOUBLECONSTANT = 634,
+    INT16CONSTANT = 635,
+    UINT16CONSTANT = 636,
+    FLOAT16CONSTANT = 637,
+    INT32CONSTANT = 638,
+    UINT32CONSTANT = 639,
+    INT64CONSTANT = 640,
+    UINT64CONSTANT = 641,
+    SUBROUTINE = 642,
+    DEMOTE = 643,
+    PAYLOADNV = 644,
+    PAYLOADINNV = 645,
+    HITATTRNV = 646,
+    CALLDATANV = 647,
+    CALLDATAINNV = 648,
+    PAYLOADEXT = 649,
+    PAYLOADINEXT = 650,
+    HITATTREXT = 651,
+    CALLDATAEXT = 652,
+    CALLDATAINEXT = 653,
+    PATCH = 654,
+    SAMPLE = 655,
+    NONUNIFORM = 656,
+    COHERENT = 657,
+    VOLATILE = 658,
+    RESTRICT = 659,
+    READONLY = 660,
+    WRITEONLY = 661,
+    DEVICECOHERENT = 662,
+    QUEUEFAMILYCOHERENT = 663,
+    WORKGROUPCOHERENT = 664,
+    SUBGROUPCOHERENT = 665,
+    NONPRIVATE = 666,
+    SHADERCALLCOHERENT = 667,
+    NOPERSPECTIVE = 668,
+    EXPLICITINTERPAMD = 669,
+    PERVERTEXNV = 670,
+    PERPRIMITIVENV = 671,
+    PERVIEWNV = 672,
+    PERTASKNV = 673,
+    PRECISE = 674
   };
 #endif
 
@@ -539,7 +548,7 @@
 
 union YYSTYPE
 {
-#line 96 "MachineIndependent/glslang.y" /* yacc.c:355  */
+#line 97 "glslang.y" /* yacc.c:355  */
 
     struct {
         glslang::TSourceLoc loc;
@@ -575,7 +584,7 @@
         glslang::TArraySizes* typeParameters;
     } interm;
 
-#line 579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
+#line 588 "glslang_tab.cpp" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -587,10 +596,10 @@
 
 int yyparse (glslang::TParseContext* pParseContext);
 
-#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
-#line 132 "MachineIndependent/glslang.y" /* yacc.c:358  */
+#line 133 "glslang.y" /* yacc.c:358  */
 
 
 /* windows only pragma */
@@ -606,7 +615,7 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
+#line 619 "glslang_tab.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -846,23 +855,23 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  386
+#define YYFINAL  394
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   9369
+#define YYLAST   9550
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  411
+#define YYNTOKENS  420
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  111
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  582
+#define YYNRULES  591
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  727
+#define YYNSTATES  736
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   665
+#define YYMAXUTOK   674
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -937,72 +946,74 @@
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
-     405,   406,   407,   408,   409,   410
+     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   352,   352,   358,   361,   366,   369,   372,   376,   380,
-     384,   388,   392,   396,   400,   404,   408,   416,   419,   422,
-     425,   428,   433,   441,   448,   455,   461,   465,   472,   475,
-     481,   488,   498,   506,   511,   539,   548,   554,   558,   562,
-     582,   583,   584,   585,   591,   592,   597,   602,   611,   612,
-     617,   625,   626,   632,   641,   642,   647,   652,   657,   665,
-     666,   675,   687,   688,   697,   698,   707,   708,   717,   718,
-     726,   727,   735,   736,   744,   745,   745,   763,   764,   780,
-     784,   788,   792,   797,   801,   805,   809,   813,   817,   821,
-     828,   831,   842,   849,   854,   859,   866,   870,   874,   878,
-     883,   888,   897,   897,   908,   912,   919,   926,   929,   936,
-     944,   964,   987,  1002,  1027,  1038,  1048,  1058,  1068,  1077,
-    1080,  1084,  1088,  1093,  1101,  1108,  1113,  1118,  1123,  1132,
-    1142,  1169,  1178,  1185,  1193,  1200,  1207,  1215,  1225,  1232,
-    1243,  1249,  1252,  1259,  1263,  1267,  1276,  1286,  1289,  1300,
-    1303,  1306,  1310,  1314,  1319,  1323,  1330,  1334,  1339,  1345,
-    1351,  1358,  1364,  1372,  1377,  1389,  1403,  1409,  1414,  1422,
-    1430,  1438,  1446,  1453,  1457,  1462,  1467,  1472,  1477,  1482,
-    1486,  1490,  1494,  1498,  1504,  1515,  1522,  1525,  1534,  1539,
-    1549,  1554,  1562,  1566,  1576,  1579,  1585,  1591,  1598,  1608,
-    1612,  1616,  1620,  1625,  1629,  1634,  1639,  1644,  1649,  1654,
-    1659,  1664,  1669,  1674,  1680,  1686,  1692,  1697,  1702,  1707,
-    1712,  1717,  1722,  1727,  1732,  1737,  1742,  1747,  1753,  1758,
-    1763,  1768,  1773,  1778,  1783,  1788,  1793,  1798,  1803,  1808,
-    1813,  1819,  1825,  1831,  1837,  1843,  1849,  1855,  1861,  1867,
-    1873,  1879,  1885,  1891,  1897,  1903,  1909,  1915,  1921,  1927,
-    1933,  1939,  1945,  1951,  1957,  1963,  1969,  1975,  1981,  1987,
-    1993,  1999,  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,  2209,  2215,  2221,  2227,
-    2233,  2239,  2245,  2251,  2257,  2263,  2269,  2275,  2281,  2287,
-    2293,  2299,  2305,  2311,  2317,  2321,  2326,  2332,  2337,  2342,
-    2347,  2352,  2358,  2363,  2368,  2374,  2379,  2384,  2389,  2395,
-    2401,  2407,  2413,  2419,  2425,  2431,  2437,  2443,  2449,  2455,
-    2461,  2467,  2473,  2479,  2484,  2489,  2495,  2501,  2506,  2512,
-    2518,  2523,  2528,  2534,  2540,  2545,  2551,  2556,  2561,  2567,
-    2573,  2578,  2583,  2588,  2594,  2599,  2604,  2609,  2615,  2620,
-    2625,  2630,  2636,  2641,  2646,  2651,  2656,  2661,  2667,  2672,
-    2678,  2683,  2689,  2694,  2700,  2705,  2711,  2716,  2722,  2727,
-    2733,  2738,  2743,  2748,  2753,  2758,  2763,  2768,  2773,  2778,
-    2783,  2788,  2793,  2798,  2803,  2808,  2814,  2819,  2824,  2829,
-    2835,  2840,  2845,  2850,  2856,  2861,  2866,  2871,  2877,  2882,
-    2887,  2892,  2898,  2903,  2908,  2913,  2919,  2924,  2929,  2934,
-    2940,  2945,  2950,  2955,  2961,  2966,  2971,  2976,  2982,  2987,
-    2992,  2997,  3003,  3008,  3013,  3018,  3024,  3029,  3034,  3039,
-    3045,  3050,  3055,  3060,  3066,  3071,  3076,  3081,  3087,  3092,
-    3097,  3102,  3108,  3113,  3118,  3124,  3130,  3136,  3142,  3149,
-    3156,  3162,  3168,  3174,  3180,  3186,  3192,  3199,  3204,  3220,
-    3225,  3230,  3238,  3238,  3249,  3249,  3259,  3262,  3275,  3297,
-    3324,  3328,  3334,  3339,  3350,  3354,  3360,  3371,  3374,  3381,
-    3385,  3386,  3392,  3393,  3394,  3395,  3396,  3397,  3398,  3400,
-    3406,  3415,  3416,  3420,  3416,  3432,  3433,  3437,  3437,  3444,
-    3444,  3458,  3461,  3469,  3477,  3488,  3489,  3493,  3497,  3504,
-    3511,  3515,  3523,  3527,  3540,  3544,  3551,  3551,  3571,  3574,
-    3580,  3592,  3604,  3608,  3615,  3615,  3630,  3630,  3646,  3646,
-    3667,  3670,  3676,  3679,  3685,  3689,  3696,  3701,  3706,  3713,
-    3716,  3725,  3729,  3738,  3741,  3745,  3754,  3754,  3777,  3783,
-    3786,  3791,  3794
+       0,   357,   357,   363,   366,   371,   374,   377,   381,   385,
+     388,   392,   396,   400,   404,   408,   412,   418,   426,   429,
+     432,   435,   438,   443,   451,   458,   465,   471,   475,   482,
+     485,   491,   498,   508,   516,   521,   549,   558,   564,   568,
+     572,   592,   593,   594,   595,   601,   602,   607,   612,   621,
+     622,   627,   635,   636,   642,   651,   652,   657,   662,   667,
+     675,   676,   685,   697,   698,   707,   708,   717,   718,   727,
+     728,   736,   737,   745,   746,   754,   755,   755,   773,   774,
+     790,   794,   798,   802,   807,   811,   815,   819,   823,   827,
+     831,   838,   841,   852,   859,   864,   869,   876,   880,   884,
+     888,   893,   898,   907,   907,   918,   922,   929,   936,   939,
+     946,   954,   974,   997,  1012,  1037,  1048,  1058,  1068,  1078,
+    1087,  1090,  1094,  1098,  1103,  1111,  1118,  1123,  1128,  1133,
+    1142,  1152,  1179,  1188,  1195,  1203,  1210,  1217,  1225,  1235,
+    1242,  1253,  1259,  1262,  1269,  1273,  1277,  1286,  1296,  1299,
+    1310,  1313,  1316,  1320,  1324,  1329,  1333,  1340,  1344,  1349,
+    1355,  1361,  1368,  1373,  1381,  1387,  1399,  1413,  1419,  1424,
+    1432,  1440,  1448,  1456,  1464,  1472,  1480,  1488,  1495,  1502,
+    1506,  1511,  1516,  1521,  1526,  1531,  1536,  1540,  1544,  1548,
+    1552,  1558,  1569,  1576,  1579,  1588,  1593,  1603,  1608,  1616,
+    1620,  1630,  1633,  1639,  1645,  1652,  1662,  1666,  1670,  1674,
+    1679,  1683,  1688,  1693,  1698,  1703,  1708,  1713,  1718,  1723,
+    1728,  1734,  1740,  1746,  1751,  1756,  1761,  1766,  1771,  1776,
+    1781,  1786,  1791,  1796,  1801,  1807,  1814,  1819,  1824,  1829,
+    1834,  1839,  1844,  1849,  1854,  1859,  1864,  1869,  1877,  1885,
+    1893,  1899,  1905,  1911,  1917,  1923,  1929,  1935,  1941,  1947,
+    1953,  1959,  1965,  1971,  1977,  1983,  1989,  1995,  2001,  2007,
+    2013,  2019,  2025,  2031,  2037,  2043,  2049,  2055,  2061,  2067,
+    2073,  2079,  2085,  2091,  2099,  2107,  2115,  2123,  2131,  2139,
+    2147,  2155,  2163,  2171,  2179,  2187,  2193,  2199,  2205,  2211,
+    2217,  2223,  2229,  2235,  2241,  2247,  2253,  2259,  2265,  2271,
+    2277,  2283,  2289,  2295,  2301,  2307,  2313,  2319,  2325,  2331,
+    2337,  2343,  2349,  2355,  2361,  2367,  2373,  2379,  2385,  2391,
+    2397,  2403,  2407,  2411,  2415,  2420,  2426,  2431,  2436,  2441,
+    2446,  2451,  2456,  2462,  2467,  2472,  2477,  2482,  2487,  2493,
+    2499,  2505,  2511,  2517,  2523,  2529,  2535,  2541,  2547,  2553,
+    2559,  2565,  2571,  2576,  2581,  2586,  2591,  2596,  2601,  2607,
+    2612,  2617,  2622,  2627,  2632,  2637,  2642,  2648,  2653,  2658,
+    2663,  2668,  2673,  2678,  2683,  2688,  2693,  2698,  2703,  2708,
+    2713,  2718,  2724,  2729,  2734,  2740,  2746,  2751,  2756,  2761,
+    2767,  2772,  2777,  2782,  2788,  2793,  2798,  2803,  2809,  2814,
+    2819,  2824,  2830,  2836,  2842,  2848,  2853,  2859,  2865,  2871,
+    2876,  2881,  2886,  2891,  2896,  2902,  2907,  2912,  2917,  2923,
+    2928,  2933,  2938,  2944,  2949,  2954,  2959,  2965,  2970,  2975,
+    2980,  2986,  2991,  2996,  3001,  3007,  3012,  3017,  3022,  3028,
+    3033,  3038,  3043,  3049,  3054,  3059,  3064,  3070,  3075,  3080,
+    3085,  3091,  3096,  3101,  3106,  3112,  3117,  3122,  3127,  3133,
+    3138,  3143,  3148,  3154,  3159,  3164,  3169,  3175,  3180,  3185,
+    3190,  3196,  3201,  3206,  3212,  3218,  3224,  3230,  3237,  3244,
+    3250,  3256,  3262,  3268,  3274,  3280,  3287,  3292,  3308,  3313,
+    3318,  3326,  3326,  3337,  3337,  3347,  3350,  3363,  3385,  3412,
+    3416,  3422,  3427,  3438,  3442,  3448,  3459,  3462,  3469,  3473,
+    3474,  3480,  3481,  3482,  3483,  3484,  3485,  3486,  3488,  3494,
+    3503,  3504,  3508,  3504,  3520,  3521,  3525,  3525,  3532,  3532,
+    3546,  3549,  3557,  3565,  3576,  3577,  3581,  3585,  3592,  3599,
+    3603,  3611,  3615,  3628,  3632,  3639,  3639,  3659,  3662,  3668,
+    3680,  3692,  3696,  3703,  3703,  3718,  3718,  3734,  3734,  3755,
+    3758,  3764,  3767,  3773,  3777,  3784,  3789,  3794,  3801,  3804,
+    3813,  3817,  3826,  3829,  3833,  3842,  3842,  3865,  3871,  3874,
+    3879,  3882
 };
 #endif
 
@@ -1018,9 +1029,11 @@
   "MAT4X4", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", "SAMPLER2DSHADOW",
   "SAMPLERCUBESHADOW", "SAMPLER2DARRAY", "SAMPLER2DARRAYSHADOW",
   "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE", "ISAMPLER2DARRAY",
-  "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER2DARRAY",
-  "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY",
-  "USAMPLERCUBEARRAY", "ATTRIBUTE", "VARYING", "FLOAT16_T", "FLOAT32_T",
+  "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER2DARRAY", "SAMPLER",
+  "SAMPLERSHADOW", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE",
+  "TEXTURE2DARRAY", "ITEXTURE2D", "ITEXTURE3D", "ITEXTURECUBE",
+  "ITEXTURE2DARRAY", "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE",
+  "UTEXTURE2DARRAY", "ATTRIBUTE", "VARYING", "FLOAT16_T", "FLOAT32_T",
   "DOUBLE", "FLOAT64_T", "INT64_T", "UINT64_T", "INT32_T", "UINT32_T",
   "INT16_T", "UINT16_T", "INT8_T", "UINT8_T", "I64VEC2", "I64VEC3",
   "I64VEC4", "U64VEC2", "U64VEC3", "U64VEC4", "I32VEC2", "I32VEC3",
@@ -1037,7 +1050,9 @@
   "F32MAT3X2", "F32MAT3X3", "F32MAT3X4", "F32MAT4X2", "F32MAT4X3",
   "F32MAT4X4", "F64MAT2X2", "F64MAT2X3", "F64MAT2X4", "F64MAT3X2",
   "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", "F64MAT4X3", "F64MAT4X4",
-  "ATOMIC_UINT", "ACCSTRUCTNV", "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV",
+  "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT", "RAYQUERYEXT",
+  "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", "SAMPLERCUBEARRAY",
+  "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY",
   "SAMPLER1D", "SAMPLER1DARRAY", "SAMPLER1DARRAYSHADOW", "ISAMPLER1D",
   "SAMPLER1DSHADOW", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW",
   "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER",
@@ -1061,45 +1076,44 @@
   "F16IMAGE1D", "F16IMAGE2D", "F16IMAGE3D", "F16IMAGE2DRECT",
   "F16IMAGECUBE", "F16IMAGE1DARRAY", "F16IMAGE2DARRAY",
   "F16IMAGECUBEARRAY", "F16IMAGEBUFFER", "F16IMAGE2DMS",
-  "F16IMAGE2DMSARRAY", "SAMPLER", "SAMPLERSHADOW", "TEXTURE1D",
-  "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE", "TEXTURE1DARRAY",
-  "TEXTURE2DARRAY", "ITEXTURE1D", "ITEXTURE2D", "ITEXTURE3D",
-  "ITEXTURECUBE", "ITEXTURE1DARRAY", "ITEXTURE2DARRAY", "UTEXTURE1D",
-  "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE", "UTEXTURE1DARRAY",
-  "UTEXTURE2DARRAY", "TEXTURE2DRECT", "ITEXTURE2DRECT", "UTEXTURE2DRECT",
-  "TEXTUREBUFFER", "ITEXTUREBUFFER", "UTEXTUREBUFFER", "TEXTURECUBEARRAY",
-  "ITEXTURECUBEARRAY", "UTEXTURECUBEARRAY", "TEXTURE2DMS", "ITEXTURE2DMS",
-  "UTEXTURE2DMS", "TEXTURE2DMSARRAY", "ITEXTURE2DMSARRAY",
-  "UTEXTURE2DMSARRAY", "F16TEXTURE1D", "F16TEXTURE2D", "F16TEXTURE3D",
-  "F16TEXTURE2DRECT", "F16TEXTURECUBE", "F16TEXTURE1DARRAY",
-  "F16TEXTURE2DARRAY", "F16TEXTURECUBEARRAY", "F16TEXTUREBUFFER",
-  "F16TEXTURE2DMS", "F16TEXTURE2DMSARRAY", "SUBPASSINPUT",
-  "SUBPASSINPUTMS", "ISUBPASSINPUT", "ISUBPASSINPUTMS", "USUBPASSINPUT",
-  "USUBPASSINPUTMS", "F16SUBPASSINPUT", "F16SUBPASSINPUTMS", "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", "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",
+  "F16IMAGE2DMSARRAY", "TEXTURECUBEARRAY", "ITEXTURECUBEARRAY",
+  "UTEXTURECUBEARRAY", "TEXTURE1D", "ITEXTURE1D", "UTEXTURE1D",
+  "TEXTURE1DARRAY", "ITEXTURE1DARRAY", "UTEXTURE1DARRAY", "TEXTURE2DRECT",
+  "ITEXTURE2DRECT", "UTEXTURE2DRECT", "TEXTUREBUFFER", "ITEXTUREBUFFER",
+  "UTEXTUREBUFFER", "TEXTURE2DMS", "ITEXTURE2DMS", "UTEXTURE2DMS",
+  "TEXTURE2DMSARRAY", "ITEXTURE2DMSARRAY", "UTEXTURE2DMSARRAY",
+  "F16TEXTURE1D", "F16TEXTURE2D", "F16TEXTURE3D", "F16TEXTURE2DRECT",
+  "F16TEXTURECUBE", "F16TEXTURE1DARRAY", "F16TEXTURE2DARRAY",
+  "F16TEXTURECUBEARRAY", "F16TEXTUREBUFFER", "F16TEXTURE2DMS",
+  "F16TEXTURE2DMSARRAY", "SUBPASSINPUT", "SUBPASSINPUTMS", "ISUBPASSINPUT",
+  "ISUBPASSINPUTMS", "USUBPASSINPUT", "USUBPASSINPUTMS", "F16SUBPASSINPUT",
+  "F16SUBPASSINPUTMS", "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", "UNIFORM", "SHARED",
-  "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT", "INT16CONSTANT",
+  "BUFFER", "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT", "INT16CONSTANT",
   "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT",
   "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE", "DEMOTE", "PAYLOADNV",
-  "PAYLOADINNV", "HITATTRNV", "CALLDATANV", "CALLDATAINNV", "PATCH",
-  "SAMPLE", "BUFFER", "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT",
-  "READONLY", "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT",
-  "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE", "NOPERSPECTIVE",
-  "EXPLICITINTERPAMD", "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV",
-  "PERTASKNV", "PRECISE", "$accept", "variable_identifier",
-  "primary_expression", "postfix_expression", "integer_expression",
-  "function_call", "function_call_or_method", "function_call_generic",
+  "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",
+  "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", "PERTASKNV", "PRECISE",
+  "$accept", "variable_identifier", "primary_expression",
+  "postfix_expression", "integer_expression", "function_call",
+  "function_call_or_method", "function_call_generic",
   "function_call_header_no_parameters",
   "function_call_header_with_parameters", "function_call_header",
   "function_identifier", "unary_expression", "unary_operator",
@@ -1185,16 +1199,16 @@
      635,   636,   637,   638,   639,   640,   641,   642,   643,   644,
      645,   646,   647,   648,   649,   650,   651,   652,   653,   654,
      655,   656,   657,   658,   659,   660,   661,   662,   663,   664,
-     665
+     665,   666,   667,   668,   669,   670,   671,   672,   673,   674
 };
 # endif
 
-#define YYPACT_NINF -367
+#define YYPACT_NINF -457
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-367)))
+  (!!((Yystate) == (-457)))
 
-#define YYTABLE_NINF -528
+#define YYTABLE_NINF -537
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -1203,79 +1217,80 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    3994,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,   -13,  -367,  -367,  -367,
-    -367,  -367,    13,  -367,  -367,  -367,  -367,  -367,    28,    40,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,    -2,    -1,    88,
-      98,  6034,   116,  -367,    74,  -367,  -367,  -367,  -367,  4402,
-    -367,  -367,  -367,  -367,   104,  -367,  -367,   730,  -367,  -367,
-      11,  -367,   136,   -25,   111,  -367,     8,  -367,   147,  -367,
-    6034,  -367,  -367,  -367,  6034,   139,   140,  -367,    61,  -367,
-      78,  -367,  -367,  8391,   155,  -367,  -367,  -367,   149,  6034,
-    -367,   152,  -367,  -309,  -367,  -367,    80,  6831,  -367,    27,
-    1138,  -367,  -367,  -367,  -367,   155,    53,  -367,  7221,    69,
-    -367,   141,  -367,   117,  8391,  8391,  8391,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,    77,  -367,  -367,  -367,
-     164,    89,  8781,   172,  -367,  8391,  -367,  -367,  -320,   176,
-    -367,  6034,   143,  4810,  -367,  6034,  8391,  -367,   -25,  -367,
-     145,  -367,  -367,   138,   144,  -231,    23,    65,   158,   153,
-     162,   196,   197,    16,   182,  7611,  -367,   185,   183,  -367,
-    -367,   189,   180,   181,  -367,   195,   198,   186,  8001,   200,
-    8391,   199,   187,   122,  -367,  -367,   123,  -367,    -1,   203,
-     204,  -367,  -367,  -367,  -367,  -367,  1546,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  -367,  -353,   176,  7221,    71,
-    7221,  -367,  -367,  7221,  6034,  -367,   169,  -367,  -367,  -367,
-      91,  -367,  -367,  8391,   170,  -367,  -367,  8391,   207,  -367,
-    -367,  -367,  8391,  -367,   143,   155,   125,  -367,  -367,  -367,
-    5218,  -367,  -367,  -367,  -367,  8391,  8391,  8391,  8391,  8391,
-    8391,  8391,  8391,  8391,  8391,  8391,  8391,  8391,  8391,  8391,
-    8391,  8391,  8391,  8391,  -367,  -367,  -367,   206,   177,  -367,
-    1954,  -367,  -367,  -367,  1954,  -367,  8391,  -367,  -367,   135,
-    8391,    60,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,  8391,  8391,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  7221,  -367,   129,  -367,  5626,  -367,
-    -367,   209,   208,  -367,  -367,  -367,   142,   176,   143,  -367,
-    -367,  -367,  -367,  -367,   138,   138,   144,   144,  -231,  -231,
-    -231,  -231,    23,    23,    65,   158,   153,   162,   196,   197,
-    8391,  -367,   214,  -314,  -367,  1954,  3586,   173,  3178,    93,
-    -367,    96,  -367,  -367,  -367,  -367,  -367,  6441,  -367,  -367,
-    -367,  -367,   121,  8391,   213,   177,   215,   208,   188,  6034,
-     217,   221,  -367,  -367,  3586,   218,  -367,  -367,  -367,  8391,
-     222,  -367,  -367,  -367,   216,  2362,  8391,  -367,   219,   226,
-     190,   224,  2770,  -367,   227,  -367,  -367,  7221,  -367,  -367,
-    -367,   100,  8391,  2362,   218,  -367,  -367,  1954,  -367,   220,
-     208,  -367,  -367,  1954,   228,  -367,  -367
+    4075,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,   132,  -457,
+    -457,  -457,  -457,  -457,    -1,  -457,  -457,  -457,  -457,  -457,
+    -457,  -301,  -298,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,    11,  -249,    17,    30,  6160,
+      20,  -457,    28,  -457,  -457,  -457,  -457,  4492,  -457,  -457,
+    -457,  -457,    50,  -457,  -457,   739,  -457,  -457,    16,  -457,
+      81,   -29,    69,  -457,  -313,  -457,   111,  -457,  6160,  -457,
+    -457,  -457,  6160,   103,   106,  -457,  -314,  -457,    72,  -457,
+    -457,  8566,   142,  -457,  -457,  -457,   136,  6160,  -457,   144,
+    -457,    53,  -457,  -457,    76,  6974,  -457,  -312,  1156,  -457,
+    -457,  -457,  -457,   142,  -309,  -457,  7372,  -308,  -457,   119,
+    -457,    65,  8566,  8566,  -457,  8566,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,    36,  -457,  -457,  -457,   171,
+      85,  8964,   173,  -457,  8566,  -457,  -457,  -323,   174,  -457,
+    6160,   139,  4909,  -457,  6160,  8566,  -457,   -29,  -457,   141,
+    -457,  -457,   145,    99,    35,    26,    71,   156,   159,   161,
+     196,   195,    23,   181,  7770,  -457,   183,   182,  -457,  -457,
+     186,   179,   180,  -457,   191,   192,   187,  8168,   193,  8566,
+     188,   189,   127,  -457,  -457,    96,  -457,  -249,   200,   201,
+    -457,  -457,  -457,  -457,  -457,  1573,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,   -24,   174,  7372,    13,  7372,
+    -457,  -457,  7372,  6160,  -457,   166,  -457,  -457,  -457,    86,
+    -457,  -457,  8566,   168,  -457,  -457,  8566,   205,  -457,  -457,
+    -457,  8566,  -457,   139,   142,   124,  -457,  -457,  -457,  5326,
+    -457,  -457,  -457,  -457,  8566,  8566,  8566,  8566,  8566,  8566,
+    8566,  8566,  8566,  8566,  8566,  8566,  8566,  8566,  8566,  8566,
+    8566,  8566,  8566,  -457,  -457,  -457,   206,   172,  -457,  1990,
+    -457,  -457,  -457,  1990,  -457,  8566,  -457,  -457,   130,  8566,
+     125,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  8566,  8566,  -457,  -457,  -457,  -457,
+    -457,  -457,  -457,  7372,  -457,    94,  -457,  5743,  -457,  -457,
+     207,   204,  -457,  -457,  -457,   131,   174,   139,  -457,  -457,
+    -457,  -457,  -457,   145,   145,    99,    99,    35,    35,    35,
+      35,    26,    26,    71,   156,   159,   161,   196,   195,  8566,
+    -457,   212,    60,  -457,  1990,  3658,   169,  3241,    87,  -457,
+      89,  -457,  -457,  -457,  -457,  -457,  6576,  -457,  -457,  -457,
+    -457,   143,  8566,   211,   172,   210,   204,   184,  6160,   217,
+     219,  -457,  -457,  3658,   218,  -457,  -457,  -457,  8566,   220,
+    -457,  -457,  -457,   214,  2407,  8566,  -457,   216,   223,   185,
+     224,  2824,  -457,   225,  -457,  -457,  7372,  -457,  -457,  -457,
+      97,  8566,  2407,   218,  -457,  -457,  1990,  -457,   222,   204,
+    -457,  -457,  1990,   229,  -457,  -457
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1283,113 +1298,114 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   156,   203,   201,   202,   200,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   204,   205,   206,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     327,   328,   329,   330,   331,   335,   336,   353,   354,   355,
-     357,   360,   361,   362,   364,   337,   338,   358,   365,   164,
-     165,   229,   230,   228,   231,   238,   239,   236,   237,   234,
-     235,   232,   233,   261,   262,   263,   273,   274,   275,   258,
-     259,   260,   270,   271,   272,   255,   256,   257,   267,   268,
-     269,   252,   253,   254,   264,   265,   266,   240,   241,   242,
-     276,   277,   278,   243,   244,   245,   288,   289,   290,   246,
-     247,   248,   300,   301,   302,   249,   250,   251,   312,   313,
-     314,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   325,   324,   484,
-     485,   486,   326,   333,   334,   352,   332,   366,   367,   370,
-     371,   372,   374,   375,   376,   378,   379,   380,   382,   383,
-     474,   475,   356,   359,   363,   339,   340,   341,   368,   342,
-     346,   347,   350,   373,   377,   381,   343,   344,   348,   349,
-     369,   345,   351,   430,   432,   433,   434,   436,   437,   438,
-     440,   441,   442,   444,   445,   446,   448,   449,   450,   452,
-     453,   454,   456,   457,   458,   460,   461,   462,   464,   465,
-     466,   468,   469,   470,   472,   473,   431,   435,   439,   443,
-     447,   455,   459,   463,   451,   467,   471,   384,   385,   386,
-     388,   390,   392,   394,   396,   400,   401,   402,   403,   404,
-     405,   407,   408,   409,   410,   411,   412,   414,   416,   417,
-     418,   420,   421,   398,   406,   413,   422,   424,   425,   426,
-     428,   429,   387,   389,   391,   415,   393,   395,   397,   399,
-     419,   423,   427,   476,   477,   480,   481,   482,   483,   478,
-     479,   575,   131,   489,   490,   491,     0,   488,   160,   158,
-     159,   157,     0,   199,   161,   162,   133,   132,     0,   183,
-     169,   170,   168,   171,   172,   166,   167,   163,   185,   173,
-     179,   180,   181,   182,   174,   175,   176,   177,   178,   134,
-     135,   136,   137,   138,   139,   146,   574,     0,   576,     0,
-     108,   107,     0,   119,   124,   153,   152,   150,   154,     0,
-     147,   149,   155,   129,   195,   151,   487,     0,   571,   573,
-       0,   494,     0,     0,     0,    96,     0,    93,     0,   106,
-       0,   115,   109,   117,     0,   118,     0,    94,   125,    99,
-       0,   148,   130,     0,   188,   194,     1,   572,     0,     0,
-     492,   143,   145,     0,   141,   186,     0,     0,    97,     0,
-       0,   577,   110,   114,   116,   112,   120,   111,     0,   126,
-     102,     0,   100,     0,     0,     0,     0,    42,    41,    43,
-      40,     5,     6,     7,     8,     2,    15,    13,    14,    16,
-       9,    10,    11,    12,     3,    17,    36,    19,    24,    25,
-       0,     0,    29,     0,   197,     0,    35,    33,     0,   189,
-      95,     0,     0,     0,   496,     0,     0,   140,     0,   184,
-       0,   190,    44,    48,    51,    54,    59,    62,    64,    66,
-      68,    70,    72,    74,     0,     0,    98,     0,   522,   531,
-     535,     0,     0,     0,   556,     0,     0,     0,     0,     0,
-       0,     0,     0,    44,    77,    90,     0,   509,     0,   155,
-     129,   512,   533,   511,   519,   510,     0,   513,   514,   537,
-     515,   544,   516,   517,   552,   518,     0,   113,     0,   121,
-       0,   504,   128,     0,     0,   104,     0,   101,    37,    38,
-       0,    21,    22,     0,     0,    27,    26,     0,   199,    30,
-      32,    39,     0,   196,     0,   502,     0,   500,   495,   497,
-       0,    92,   144,   142,   187,     0,     0,     0,     0,     0,
+       0,   157,   210,   208,   209,   207,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   211,   212,   213,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     336,   337,   338,   339,   340,   341,   342,   362,   363,   364,
+     365,   366,   367,   368,   377,   390,   391,   378,   379,   381,
+     380,   382,   383,   384,   385,   386,   387,   388,   389,   165,
+     166,   236,   237,   235,   238,   245,   246,   243,   244,   241,
+     242,   239,   240,   268,   269,   270,   280,   281,   282,   265,
+     266,   267,   277,   278,   279,   262,   263,   264,   274,   275,
+     276,   259,   260,   261,   271,   272,   273,   247,   248,   249,
+     283,   284,   285,   250,   251,   252,   295,   296,   297,   253,
+     254,   255,   307,   308,   309,   256,   257,   258,   319,   320,
+     321,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     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,   331,   332,
+     333,   493,   494,   495,   346,   347,   370,   373,   335,   344,
+     345,   361,   343,   392,   393,   396,   397,   398,   400,   401,
+     402,   404,   405,   406,   408,   409,   483,   484,   369,   371,
+     372,   348,   349,   350,   394,   351,   355,   356,   359,   399,
+     403,   407,   352,   353,   357,   358,   395,   354,   360,   439,
+     441,   442,   443,   445,   446,   447,   449,   450,   451,   453,
+     454,   455,   457,   458,   459,   461,   462,   463,   465,   466,
+     467,   469,   470,   471,   473,   474,   475,   477,   478,   479,
+     481,   482,   440,   444,   448,   452,   456,   464,   468,   472,
+     460,   476,   480,   374,   375,   376,   410,   419,   421,   415,
+     420,   422,   423,   425,   426,   427,   429,   430,   431,   433,
+     434,   435,   437,   438,   411,   412,   413,   424,   414,   416,
+     417,   418,   428,   432,   436,   485,   486,   489,   490,   491,
+     492,   487,   488,   584,   132,   498,   499,   500,     0,   497,
+     161,   159,   160,   158,     0,   206,   162,   163,   164,   134,
+     133,     0,   190,   171,   173,   169,   175,   177,   172,   174,
+     170,   176,   178,   167,   168,   192,   179,   186,   187,   188,
+     189,   180,   181,   182,   183,   184,   185,   135,   136,   137,
+     138,   139,   140,   147,   583,     0,   585,     0,   109,   108,
+       0,   120,   125,   154,   153,   151,   155,     0,   148,   150,
+     156,   130,   202,   152,   496,     0,   580,   582,     0,   503,
+       0,     0,     0,    97,     0,    94,     0,   107,     0,   116,
+     110,   118,     0,   119,     0,    95,   126,   100,     0,   149,
+     131,     0,   195,   201,     1,   581,     0,     0,   501,   144,
+     146,     0,   142,   193,     0,     0,    98,     0,     0,   586,
+     111,   115,   117,   113,   121,   112,     0,   127,   103,     0,
+     101,     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,   204,     0,    36,    34,     0,   196,    96,
+       0,     0,     0,   505,     0,     0,   141,     0,   191,     0,
+     197,    45,    49,    52,    55,    60,    63,    65,    67,    69,
+      71,    73,    75,     0,     0,    99,     0,   531,   540,   544,
+       0,     0,     0,   565,     0,     0,     0,     0,     0,     0,
+       0,     0,    45,    78,    91,     0,   518,     0,   156,   130,
+     521,   542,   520,   528,   519,     0,   522,   523,   546,   524,
+     553,   525,   526,   561,   527,     0,   114,     0,   122,     0,
+     513,   129,     0,     0,   105,     0,   102,    38,    39,     0,
+      22,    23,     0,     0,    28,    27,     0,   206,    31,    33,
+      40,     0,   203,     0,   511,     0,   509,   504,   506,     0,
+      93,   145,   143,   194,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    75,   191,   192,     0,     0,   521,
-       0,   554,   567,   566,     0,   558,     0,   570,   568,     0,
-       0,     0,   551,   520,    80,    81,    83,    82,    85,    86,
-      87,    88,    89,    84,    79,     0,     0,   536,   532,   534,
-     538,   545,   553,   123,     0,   507,     0,   127,     0,   105,
-       4,     0,    23,    20,    31,   198,     0,   503,     0,   498,
-     493,    45,    46,    47,    50,    49,    52,    53,    57,    58,
-      55,    56,    60,    61,    63,    65,    67,    69,    71,    73,
-       0,   193,   581,     0,   579,   523,     0,     0,     0,     0,
-     569,     0,   550,    78,    91,   122,   505,     0,   103,    18,
-     499,   501,     0,     0,     0,     0,     0,   542,     0,     0,
-       0,     0,   561,   560,   563,   529,   546,   506,   508,     0,
-       0,   578,   580,   524,     0,     0,     0,   562,     0,     0,
-     541,     0,     0,   539,     0,    76,   582,     0,   526,   555,
-     525,     0,   564,     0,   529,   528,   530,   548,   543,     0,
-     565,   559,   540,   549,     0,   557,   547
+       0,     0,     0,    76,   198,   199,     0,     0,   530,     0,
+     563,   576,   575,     0,   567,     0,   579,   577,     0,     0,
+       0,   560,   529,    81,    82,    84,    83,    86,    87,    88,
+      89,    90,    85,    80,     0,     0,   545,   541,   543,   547,
+     554,   562,   124,     0,   516,     0,   128,     0,   106,     4,
+       0,    24,    21,    32,   205,     0,   512,     0,   507,   502,
+      46,    47,    48,    51,    50,    53,    54,    58,    59,    56,
+      57,    61,    62,    64,    66,    68,    70,    72,    74,     0,
+     200,   590,     0,   588,   532,     0,     0,     0,     0,   578,
+       0,   559,    79,    92,   123,   514,     0,   104,    19,   508,
+     510,     0,     0,     0,     0,     0,   551,     0,     0,     0,
+       0,   570,   569,   572,   538,   555,   515,   517,     0,     0,
+     587,   589,   533,     0,     0,     0,   571,     0,     0,   550,
+       0,     0,   548,     0,    77,   591,     0,   535,   564,   534,
+       0,   573,     0,   538,   537,   539,   557,   552,     0,   574,
+     568,   549,   558,     0,   566,   556
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,  -367,
-    -367,  -367,  8696,  -367,   -81,   -78,  -225,   -82,   -20,   -18,
-     -21,   -17,   -19,   -16,  -367,   -85,  -367,   -98,  -367,  -110,
-    -118,     2,  -367,  -367,  -367,     4,  -367,  -367,  -367,   184,
-     191,   192,  -367,  -367,  -339,  -367,  -367,  -367,  -367,   102,
-    -367,   -37,   -44,  -367,     9,  -367,     0,   -71,  -367,  -367,
-    -367,  -367,   260,  -367,  -367,  -367,  -136,  -137,    18,   -65,
-    -209,  -367,   -94,  -198,  -366,  -367,  -134,  -367,  -367,  -148,
-    -146,  -367,  -367,   202,  -265,   -87,  -367,    56,  -367,  -111,
-    -367,    59,  -367,  -367,  -367,  -367,    62,  -367,  -367,  -367,
-    -367,  -367,  -367,  -367,  -367,   225,  -367,  -367,  -367,  -367,
-     -99
+    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
+    -457,  -457,  8868,  -457,   -87,   -84,  -127,   -93,   -33,   -31,
+     -27,   -25,   -28,   -26,  -457,   -86,  -457,  -103,  -457,  -111,
+    -125,     2,  -457,  -457,  -457,     4,  -457,  -457,  -457,   176,
+     194,   178,  -457,  -457,  -337,  -457,  -457,  -457,  -457,    95,
+    -457,   -37,   -46,  -457,     9,  -457,     0,   -63,  -457,  -457,
+    -457,  -457,   263,  -457,  -457,  -457,  -456,  -140,    10,   -73,
+    -211,  -457,  -102,  -198,  -321,  -457,  -144,  -457,  -457,  -155,
+    -154,  -457,  -457,   198,  -274,   -97,  -457,    46,  -457,  -118,
+    -457,    51,  -457,  -457,  -457,  -457,    52,  -457,  -457,  -457,
+    -457,  -457,  -457,  -457,  -457,   213,  -457,  -457,  -457,  -457,
+    -105
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   434,   435,   436,   621,   437,   438,   439,   440,   441,
-     442,   443,   493,   445,   463,   464,   465,   466,   467,   468,
-     469,   470,   471,   472,   473,   494,   650,   495,   605,   496,
-     552,   497,   337,   524,   413,   498,   339,   340,   341,   371,
-     372,   373,   342,   343,   344,   345,   346,   347,   393,   394,
-     348,   349,   350,   351,   446,   396,   447,   399,   384,   385,
-     448,   354,   355,   356,   455,   389,   453,   454,   546,   547,
-     522,   616,   501,   502,   503,   504,   505,   580,   676,   709,
-     700,   701,   702,   710,   506,   507,   508,   509,   703,   680,
-     510,   511,   704,   724,   512,   513,   514,   656,   584,   658,
-     684,   698,   699,   515,   357,   358,   359,   368,   516,   653,
-     654
+      -1,   443,   444,   445,   630,   446,   447,   448,   449,   450,
+     451,   452,   502,   454,   472,   473,   474,   475,   476,   477,
+     478,   479,   480,   481,   482,   503,   659,   504,   614,   505,
+     561,   506,   345,   533,   421,   507,   347,   348,   349,   379,
+     380,   381,   350,   351,   352,   353,   354,   355,   401,   402,
+     356,   357,   358,   359,   455,   404,   456,   407,   392,   393,
+     457,   362,   363,   364,   464,   397,   462,   463,   555,   556,
+     531,   625,   510,   511,   512,   513,   514,   589,   685,   718,
+     709,   710,   711,   719,   515,   516,   517,   518,   712,   689,
+     519,   520,   713,   733,   521,   522,   523,   665,   593,   667,
+     693,   707,   708,   524,   365,   366,   367,   376,   525,   662,
+     663
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1397,161 +1413,122 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     353,   542,   336,   674,   338,   481,   457,   675,   484,   352,
-     485,   486,   458,   543,   489,     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,   560,   561,    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,   374,   381,   530,   409,   609,   613,
-     521,   615,   474,   449,   617,   655,   549,   678,   573,   550,
-     562,   563,   365,   367,   397,   391,   293,   294,   295,   708,
-     381,   361,   398,   374,   517,   519,   716,   638,   639,   640,
-     641,   375,   363,   475,   539,   678,   392,   708,   366,   382,
-     352,   476,   451,   574,   364,   564,   565,   353,   352,   336,
-     388,   338,   297,   362,   566,   567,   352,   302,   303,   397,
-     375,   551,   531,   532,   375,   407,   518,   397,   589,   352,
-     591,   606,   662,   352,   408,   475,   657,   475,   618,   452,
-     577,   -34,   523,   533,   614,   459,   410,   534,   352,   411,
-     500,   460,   412,   369,   536,   665,   620,   381,   685,   499,
-     537,   686,   606,   549,   606,   719,   451,   606,   451,   370,
-     521,   606,   521,   622,   378,   521,   594,   595,   596,   597,
-     598,   599,   600,   601,   602,   603,   383,   376,   526,   624,
-     377,   527,   606,   689,   606,   604,   628,   607,   666,   629,
-     667,   544,   723,   452,   390,   452,   606,   609,   688,   660,
-     352,   395,   352,   628,   352,   400,   670,   555,   556,   557,
-     558,   397,   559,   450,   627,   456,   659,   634,   635,   535,
-     661,   549,   636,   637,   642,   643,   540,   451,   569,   405,
-     406,   525,   475,   545,   568,   554,   570,   571,   718,   575,
-     572,   578,   579,   581,   582,   583,   500,   663,   664,   585,
-     587,   593,   586,   451,   590,   499,   521,   -35,   -33,   619,
-     623,   592,   -28,   651,   452,   609,   669,   652,   673,   606,
-     691,   681,   695,   352,   693,   696,  -527,   706,   694,   707,
-     672,   713,   478,   712,   725,   717,   677,   726,   644,   646,
-     452,   645,   714,   648,   647,   690,   360,   649,   403,   352,
-     553,   402,   626,   671,   682,   721,   404,   715,   722,   521,
-     401,   683,   610,   697,   677,   611,   692,     0,   612,     0,
-     500,   451,   387,     0,   500,     0,   711,     0,   551,   499,
-       0,   705,     0,   499,     0,     0,     0,     0,     0,     0,
-       0,     0,   720,     0,     0,     0,     0,     0,     0,   521,
-       0,     0,     0,     0,     0,     0,     0,     0,   452,   679,
-       0,     0,     0,     0,     0,     0,     0,   352,     0,     0,
-       0,     0,     0,     0,     0,   381,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   679,     0,     0,
-       0,     0,     0,     0,     0,   500,   500,     0,   500,     0,
-       0,     0,     0,     0,   499,   499,     0,   499,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   382,
-       0,     0,     0,     0,   500,     0,     0,     0,   352,     0,
-       0,     0,     0,   499,     0,   500,     0,     0,     0,     0,
-       0,     0,   500,     0,   499,     0,     0,     0,     0,     0,
-       0,   499,     0,   500,     0,     0,     0,   500,     0,     0,
-       0,     0,   499,   500,     0,     0,   499,     0,     0,     0,
-     386,     0,   499,     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,     0,     0,     0,     0,     0,     0,     0,
+     361,   551,   344,   415,   346,   405,   405,   484,   559,   360,
+     405,   484,   416,   552,   406,   485,   371,   527,   532,   372,
+       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,   627,   375,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   389,   382,   530,   539,   664,   622,   618,   624,   483,
+     369,   626,   558,   417,   399,   571,   572,   582,   687,   458,
+     569,   570,   484,   540,   541,   377,   389,   490,   373,   623,
+     493,   382,   494,   495,   384,   400,   498,   385,   548,   383,
+     526,   528,   370,   -35,   378,   542,   687,   390,   360,   543,
+     460,   573,   574,   583,   374,   361,   360,   344,   396,   346,
+     299,   466,   575,   576,   360,   304,   305,   467,   383,   560,
+     683,   386,   383,   717,   684,   391,   598,   360,   600,   535,
+     725,   360,   536,   418,   468,   666,   419,   461,   586,   420,
+     469,   717,   398,   545,   629,   694,   360,   695,   509,   546,
+     615,   615,   674,   615,   389,   728,   675,   508,   676,   558,
+     615,   615,   403,   616,   530,   460,   530,   460,   567,   530,
+     568,   631,   408,   603,   604,   605,   606,   607,   608,   609,
+     610,   611,   612,   633,   647,   648,   649,   650,   637,   615,
+     671,   638,   732,   613,   615,   637,   413,   669,   679,   414,
+     553,   405,   461,   459,   461,   697,   618,   615,   698,   360,
+     465,   360,   534,   360,   295,   296,   297,   564,   565,   566,
+     643,   644,   651,   652,   668,   645,   646,   558,   670,   544,
+     549,   636,   554,   484,   563,   577,   460,   578,   579,   580,
+     581,   584,   587,   590,   588,   727,   591,   592,   594,   595,
+     599,   672,   673,   601,   596,   509,   602,   -36,   -34,   628,
+     530,   632,   460,   -29,   508,   661,   660,   678,   615,   682,
+     690,   700,   702,   461,   618,   704,   705,   703,   715,  -536,
+     716,   722,   360,   721,   653,   487,   726,   654,   681,   734,
+     723,   735,   655,   657,   686,   656,   658,   699,   411,   461,
+     412,   368,   562,   635,   680,   691,   724,   730,   360,   731,
+     692,   619,   410,   530,   409,   706,   620,   621,   395,   701,
+       0,     0,   686,     0,     0,     0,     0,     0,     0,   509,
+     460,     0,     0,   509,   720,   714,   560,     0,   508,     0,
+       0,     0,   508,     0,     0,     0,     0,     0,     0,     0,
+     729,     0,     0,   530,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   461,   688,     0,
+       0,     0,     0,     0,     0,     0,   360,     0,     0,     0,
+       0,     0,   389,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   688,     0,     0,     0,
+       0,     0,     0,     0,   509,   509,     0,   509,     0,     0,
+       0,     0,     0,   508,   508,     0,   508,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   390,     0,
+       0,     0,     0,   509,     0,     0,     0,   360,     0,     0,
+       0,     0,   508,     0,   509,     0,     0,     0,     0,     0,
+       0,   509,     0,   508,     0,     0,     0,     0,     0,     0,
+     508,     0,   509,     0,     0,     0,   509,     0,     0,     0,
+       0,   508,   509,     0,     0,   508,     0,     0,     0,   394,
+       0,   508,     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,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   291,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   292,   293,
-     294,   295,   296,     0,     0,     0,     0,     0,     0,     0,
-       0,   297,   298,   299,   300,   301,   302,   303,     0,     0,
+       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     304,   305,   306,   307,   308,     0,     0,     0,     0,     0,
-       0,     0,     0,   309,     0,   310,   311,   312,   313,   314,
+     294,   295,   296,   297,   298,     0,     0,     0,     0,     0,
+       0,     0,     0,   299,   300,   301,   302,   303,   304,   305,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   306,   307,   308,   309,   310,   311,     0,     0,
+       0,     0,     0,     0,     0,     0,   312,     0,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,     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,     0,     0,   414,   415,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   416,     0,   477,     0,   478,   479,     0,     0,
-       0,     0,   480,   417,   418,   419,   420,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   292,   293,   294,   295,
-     296,     0,     0,     0,   421,   422,   423,   424,   425,   297,
-     298,   299,   300,   301,   302,   303,   481,   482,   483,   484,
-       0,   485,   486,   487,   488,   489,   490,   491,   304,   305,
-     306,   307,   308,   426,   427,   428,   429,   430,   431,   432,
-     433,   309,   492,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,   329,   330,   331,   332,   333,   334,   335,     1,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,     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,
@@ -1580,19 +1557,145 @@
      252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
      262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
      272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,     0,
-       0,   414,   415,     0,     0,     0,     0,     0,     0,     0,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,     0,     0,   422,   423,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     416,     0,   477,     0,   478,   608,     0,     0,     0,     0,
-     480,   417,   418,   419,   420,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   292,   293,   294,   295,   296,     0,
-       0,     0,   421,   422,   423,   424,   425,   297,   298,   299,
-     300,   301,   302,   303,   481,   482,   483,   484,     0,   485,
-     486,   487,   488,   489,   490,   491,   304,   305,   306,   307,
-     308,   426,   427,   428,   429,   430,   431,   432,   433,   309,
-     492,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,     1,     2,     3,
+       0,     0,   424,   425,     0,   486,     0,   487,   488,     0,
+       0,     0,     0,   489,   426,   427,   428,   429,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   294,   295,   296,
+     297,   298,     0,     0,     0,   430,   431,   432,   433,   434,
+     299,   300,   301,   302,   303,   304,   305,   490,   491,   492,
+     493,     0,   494,   495,   496,   497,   498,   499,   500,   306,
+     307,   308,   309,   310,   311,   435,   436,   437,   438,   439,
+     440,   441,   442,   312,   501,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,   333,   334,   335,   336,   337,
+     338,   339,   340,   341,   342,   343,     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,     0,     0,
+     422,   423,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   424,
+     425,     0,   486,     0,   487,   617,     0,     0,     0,     0,
+     489,   426,   427,   428,   429,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   294,   295,   296,   297,   298,     0,
+       0,     0,   430,   431,   432,   433,   434,   299,   300,   301,
+     302,   303,   304,   305,   490,   491,   492,   493,     0,   494,
+     495,   496,   497,   498,   499,   500,   306,   307,   308,   309,
+     310,   311,   435,   436,   437,   438,   439,   440,   441,   442,
+     312,   501,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
+     341,   342,   343,     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,     0,     0,   422,   423,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   424,   425,     0,   486,
+       0,   487,     0,     0,     0,     0,     0,   489,   426,   427,
+     428,   429,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   294,   295,   296,   297,   298,     0,     0,     0,   430,
+     431,   432,   433,   434,   299,   300,   301,   302,   303,   304,
+     305,   490,   491,   492,   493,     0,   494,   495,   496,   497,
+     498,   499,   500,   306,   307,   308,   309,   310,   311,   435,
+     436,   437,   438,   439,   440,   441,   442,   312,   501,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,   336,   337,   338,   339,   340,   341,   342,   343,
+       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,     0,     0,   422,   423,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   424,   425,     0,   486,     0,   408,     0,
+       0,     0,     0,     0,   489,   426,   427,   428,   429,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   294,   295,
+     296,   297,   298,     0,     0,     0,   430,   431,   432,   433,
+     434,   299,   300,   301,   302,   303,   304,   305,   490,   491,
+     492,   493,     0,   494,   495,   496,   497,   498,   499,   500,
+     306,   307,   308,   309,   310,   311,   435,   436,   437,   438,
+     439,   440,   441,   442,   312,   501,   313,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
+     337,   338,   339,   340,   341,   342,   343,     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,
@@ -1621,19 +1724,145 @@
      254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
      264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
      274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,     0,     0,   414,
-     415,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   416,     0,
-     477,     0,   478,     0,     0,     0,     0,     0,   480,   417,
-     418,   419,   420,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   292,   293,   294,   295,   296,     0,     0,     0,
-     421,   422,   423,   424,   425,   297,   298,   299,   300,   301,
-     302,   303,   481,   482,   483,   484,     0,   485,   486,   487,
-     488,   489,   490,   491,   304,   305,   306,   307,   308,   426,
-     427,   428,   429,   430,   431,   432,   433,   309,   492,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   334,   335,     1,     2,     3,     4,     5,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,     0,
+       0,   422,   423,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     424,   425,     0,   486,     0,     0,     0,     0,     0,     0,
+       0,   489,   426,   427,   428,   429,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   294,   295,   296,   297,   298,
+       0,     0,     0,   430,   431,   432,   433,   434,   299,   300,
+     301,   302,   303,   304,   305,   490,   491,   492,   493,     0,
+     494,   495,   496,   497,   498,   499,   500,   306,   307,   308,
+     309,   310,   311,   435,   436,   437,   438,   439,   440,   441,
+     442,   312,   501,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
+     330,   331,   332,   333,   334,   335,   336,   337,   338,   339,
+     340,   341,   342,   343,     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,     0,     0,   422,   423,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   424,   425,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   489,   426,
+     427,   428,   429,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   294,   295,   296,   297,   298,     0,     0,     0,
+     430,   431,   432,   433,   434,   299,   300,   301,   302,   303,
+     304,   305,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   306,   307,   308,   309,   310,   311,
+     435,   436,   437,   438,   439,   440,   441,   442,   312,     0,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   335,   336,   337,   338,   339,   340,   341,   342,
+     343,     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,     0,     0,   422,   423,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   424,   425,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   426,   427,   428,   429,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
+     295,   296,   297,     0,     0,     0,     0,   430,   431,   432,
+     433,   434,   299,   300,   301,   302,   303,   304,   305,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   306,   307,   308,   309,   310,   311,   435,   436,   437,
+     438,   439,   440,   441,   442,   312,     0,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     326,   327,   328,   329,   330,   331,   332,   333,   334,   335,
+     336,   337,   338,   339,   340,   341,   342,   343,     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,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   293,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   294,   295,   296,   297,
+     298,     0,     0,     0,     0,     0,     0,     0,     0,   299,
+     300,   301,   302,   303,   304,   305,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   306,   307,
+     308,   309,   310,   311,     0,     0,     0,     0,     0,     0,
+       0,     0,   312,     0,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,   336,   337,   338,
+     339,   340,   341,   342,   343,     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,
@@ -1662,100 +1891,61 @@
      256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
      266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
      276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,     0,     0,   414,   415,     0,
+     286,   287,   288,   289,   290,   291,   292,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   416,     0,   477,     0,
-     400,     0,     0,     0,     0,     0,   480,   417,   418,   419,
-     420,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     292,   293,   294,   295,   296,     0,     0,     0,   421,   422,
-     423,   424,   425,   297,   298,   299,   300,   301,   302,   303,
-     481,   482,   483,   484,     0,   485,   486,   487,   488,   489,
-     490,   491,   304,   305,   306,   307,   308,   426,   427,   428,
-     429,   430,   431,   432,   433,   309,   492,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,     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,     0,     0,   414,   415,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   416,     0,   477,     0,     0,     0,
-       0,     0,     0,     0,   480,   417,   418,   419,   420,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   292,   293,
-     294,   295,   296,     0,     0,     0,   421,   422,   423,   424,
-     425,   297,   298,   299,   300,   301,   302,   303,   481,   482,
-     483,   484,     0,   485,   486,   487,   488,   489,   490,   491,
-     304,   305,   306,   307,   308,   426,   427,   428,   429,   430,
-     431,   432,   433,   309,   492,   310,   311,   312,   313,   314,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   387,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   294,   295,   296,   297,     0,     0,     0,
+       0,     0,     0,     0,     0,   388,   299,   300,   301,   302,
+     303,   304,   305,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   306,   307,   308,   309,   310,
+     311,     0,     0,     0,     0,     0,     0,     0,     0,   312,
+       0,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     332,   333,   334,   335,   336,   337,   338,   339,   340,   341,
+     342,   343,     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,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   557,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     294,   295,   296,   297,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   299,   300,   301,   302,   303,   304,   305,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   306,   307,   308,   309,   310,   311,     0,     0,
+       0,     0,     0,     0,     0,     0,   312,     0,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,     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,     0,     0,   414,   415,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   416,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   480,   417,   418,   419,   420,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   292,   293,   294,   295,
-     296,     0,     0,     0,   421,   422,   423,   424,   425,   297,
-     298,   299,   300,   301,   302,   303,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   304,   305,
-     306,   307,   308,   426,   427,   428,   429,   430,   431,   432,
-     433,   309,     0,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,   329,   330,   331,   332,   333,   334,   335,     1,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,     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,
@@ -1784,25 +1974,149 @@
      252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
      262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
      272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,     0,
-       0,   414,   415,     0,     0,     0,     0,     0,     0,     0,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     416,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   417,   418,   419,   420,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   292,   293,   294,   295,     0,     0,
-       0,     0,   421,   422,   423,   424,   425,   297,   298,   299,
-     300,   301,   302,   303,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   304,   305,   306,   307,
-     308,   426,   427,   428,   429,   430,   431,   432,   433,   309,
-       0,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,     1,     2,     3,
+       0,     0,     0,     0,     0,     0,     0,     0,   639,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   294,   295,   296,
+     297,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     299,   300,   301,   302,   303,   304,   305,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   306,
+     307,   308,   309,   310,   311,     0,     0,     0,     0,     0,
+       0,     0,     0,   312,     0,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,   333,   334,   335,   336,   337,
+     338,   339,   340,   341,   342,   343,     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,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   677,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   294,   295,   296,   297,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   299,   300,   301,
+     302,   303,   304,   305,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   306,   307,   308,   309,
+     310,   311,     0,     0,     0,     0,     0,     0,     0,     0,
+     312,     0,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
+     341,   342,   343,     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,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   294,   295,   296,   297,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   299,   300,   301,   302,   303,   304,
+     305,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   306,   307,   308,   309,   310,   311,     0,
+       0,     0,     0,     0,     0,     0,     0,   312,     0,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,   336,   337,   338,   339,   340,   341,   342,   343,
+       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,     0,     0,   422,   423,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   424,   425,     0,     0,     0,   529,   696,     0,
+       0,     0,     0,     0,   426,   427,   428,   429,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   430,   431,   432,   433,   434,
+     299,     0,     0,     0,     0,   304,   305,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   435,   436,   437,   438,   439,
+     440,   441,   442,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   325,     2,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      54,    55,    56,    57,    58,     0,     0,    61,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
       84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
@@ -1825,25 +2139,24 @@
      254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
      264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
      274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,     0,     0,     0,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,     0,
+       0,   422,   423,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     424,   425,     0,     0,   470,     0,     0,     0,     0,     0,
+       0,     0,   426,   427,   428,   429,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   291,     0,
+       0,     0,     0,   430,   431,   432,   433,   434,   299,     0,
+       0,     0,     0,   304,   305,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   292,   293,   294,   295,   296,     0,     0,     0,
-       0,     0,     0,     0,     0,   297,   298,   299,   300,   301,
-     302,   303,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   304,   305,   306,   307,   308,     0,
-       0,     0,     0,     0,     0,     0,     0,   309,     0,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   334,   335,     1,     2,     3,     4,     5,
+       0,     0,     0,   435,   436,   437,   438,   439,   440,   441,
+     442,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   325,     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,
+      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,
@@ -1866,25 +2179,24 @@
      256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
      266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
      276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,     0,     0,     0,     0,     0,
+     286,   287,   288,   289,   290,   291,   292,     0,     0,   422,
+     423,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   424,   425,
+       0,     0,     0,   529,     0,     0,     0,     0,     0,     0,
+     426,   427,   428,   429,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   430,   431,   432,   433,   434,   299,     0,     0,     0,
+       0,   304,   305,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   379,     0,     0,     0,
+       0,   435,   436,   437,   438,   439,   440,   441,   442,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     292,   293,   294,   295,     0,     0,     0,     0,     0,     0,
-       0,     0,   380,   297,   298,   299,   300,   301,   302,   303,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   304,   305,   306,   307,   308,     0,     0,     0,
-       0,     0,     0,     0,     0,   309,     0,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
-     333,   334,   335,     1,     2,     3,     4,     5,     6,     7,
+       0,     0,     0,   325,     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,
+      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,
@@ -1907,25 +2219,24 @@
      258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
      268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
      278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,     0,     0,     0,     0,     0,     0,     0,
+     288,   289,   290,   291,   292,     0,     0,   422,   423,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   548,
+       0,     0,     0,     0,     0,     0,   424,   425,     0,     0,
+     585,     0,     0,     0,     0,     0,     0,     0,   426,   427,
+     428,   429,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   430,
+     431,   432,   433,   434,   299,     0,     0,     0,     0,   304,
+     305,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   435,
+     436,   437,   438,   439,   440,   441,   442,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   292,   293,
-     294,   295,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   297,   298,   299,   300,   301,   302,   303,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     304,   305,   306,   307,   308,     0,     0,     0,     0,     0,
-       0,     0,     0,   309,     0,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+       0,   325,     2,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,     0,
+       0,    61,    62,    63,    64,    65,    66,    67,    68,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
       90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
@@ -1948,24 +2259,23 @@
      260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
      270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
      280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     290,   291,   292,     0,     0,   422,   423,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   630,     0,     0,
+       0,     0,     0,     0,   424,   425,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   597,   426,   427,   428,   429,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   292,   293,   294,   295,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   297,
-     298,   299,   300,   301,   302,   303,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   304,   305,
-     306,   307,   308,     0,     0,     0,     0,     0,     0,     0,
-       0,   309,     0,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,   329,   330,   331,   332,   333,   334,   335,     1,
+       0,     0,     0,     0,     0,     0,     0,   430,   431,   432,
+     433,   434,   299,     0,     0,     0,     0,   304,   305,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   435,   436,   437,
+     438,   439,   440,   441,   442,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   325,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      52,    53,    54,    55,    56,    57,    58,     0,     0,    61,
       62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
@@ -1988,25 +2298,24 @@
      252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
      262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
      272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,     0,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,     0,     0,   422,   423,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   424,   425,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   426,   427,   428,   429,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   668,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   430,   431,   432,   433,   434,
+     299,     0,     0,     0,     0,   304,   305,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   292,   293,   294,   295,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   297,   298,   299,
-     300,   301,   302,   303,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   304,   305,   306,   307,
-     308,     0,     0,     0,     0,     0,     0,     0,     0,   309,
-       0,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,     1,     2,     3,
+       0,     0,     0,     0,     0,   435,   436,   437,   438,   439,
+     440,   441,   442,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   325,     2,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      54,    55,    56,    57,    58,     0,     0,    61,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
       84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
@@ -2029,301 +2338,27 @@
      254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
      264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
      274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,     0,     0,     0,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   453,
+       0,   422,   423,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   471,     0,     0,     0,     0,     0,     0,
+     424,   425,     0,     0,     0,     0,     0,     0,     0,     0,
+     537,   538,   426,   427,   428,   429,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   430,   431,   432,   433,   434,   299,     0,
+       0,     0,   550,   304,   547,     0,     0,     0,     0,     0,
+       0,     0,     0,   471,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   435,   436,   437,   438,   439,   440,   441,
+     442,     0,   471,     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,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   292,   293,   294,   295,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   297,   298,   299,   300,   301,
-     302,   303,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   304,   305,   306,   307,   308,     0,
-       0,     0,     0,     0,     0,     0,     0,   309,     0,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   334,   335,     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,     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,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,     0,     0,   414,   415,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   634,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   416,     0,     0,     0,   520,
-     687,     0,     0,     0,     0,     0,   417,   418,   419,   420,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   421,   422,   423,
-     424,   425,   297,     0,     0,     0,     0,   302,   303,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   426,   427,   428,   429,
-     430,   431,   432,   433,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   318,     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,     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,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,     0,     0,   414,   415,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   416,     0,     0,   461,     0,
-       0,     0,     0,     0,     0,     0,   417,   418,   419,   420,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   421,   422,   423,
-     424,   425,   297,     0,     0,     0,     0,   302,   303,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   426,   427,   428,   429,
-     430,   431,   432,   433,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   318,     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,     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,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,     0,     0,   414,   415,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   416,     0,     0,     0,   520,
-       0,     0,     0,     0,     0,     0,   417,   418,   419,   420,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   421,   422,   423,
-     424,   425,   297,     0,     0,     0,     0,   302,   303,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   426,   427,   428,   429,
-     430,   431,   432,   433,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   318,     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,     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,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,     0,     0,   414,   415,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   416,     0,     0,   576,     0,
-       0,     0,     0,     0,     0,     0,   417,   418,   419,   420,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   421,   422,   423,
-     424,   425,   297,     0,     0,     0,     0,   302,   303,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   426,   427,   428,   429,
-     430,   431,   432,   433,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   318,     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,     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,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,     0,     0,   414,   415,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   416,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   588,   417,   418,   419,   420,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   421,   422,   423,
-     424,   425,   297,     0,     0,     0,     0,   302,   303,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   426,   427,   428,   429,
-     430,   431,   432,   433,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   318,     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,     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,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,     0,     0,   414,   415,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   416,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   417,   418,   419,   420,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   421,   422,   423,
-     424,   425,   297,     0,     0,     0,     0,   302,   303,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   426,   427,   428,   429,
-     430,   431,   432,   433,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   318,     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,     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,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,     0,     0,   414,   415,     0,   444,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   462,     0,   416,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   417,   418,   419,   420,
-     528,   529,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   421,   422,   423,
-     424,   425,   297,     0,     0,     0,     0,   302,   538,     0,
-       0,   541,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   462,     0,     0,     0,   426,   427,   428,   429,
-     430,   431,   432,   433,     0,     0,     0,     0,     0,     0,
-       0,   462,     0,     0,   318,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   625,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   631,   632,   633,   462,   462,   462,   462,   462,   462,
-     462,   462,   462,   462,   462,   462,   462,   462,   462,   462,
+       0,     0,   640,   641,   642,   471,   471,   471,   471,   471,
+     471,   471,   471,   471,   471,   471,   471,   471,   471,   471,
+     471,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -2333,166 +2368,127 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   462
+     471
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   321,     0,   317,     0,   358,   315,   321,   361,     0,
-     363,   364,   321,   333,   367,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,   293,   294,    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,   341,   349,   416,   378,   506,   518,
-     408,   520,   397,   384,   523,   580,   453,   656,   302,   455,
-     297,   298,   324,   324,   316,   350,   339,   340,   341,   695,
-     374,   318,   324,   370,   405,   406,   702,   562,   563,   564,
-     565,   341,   314,   316,   442,   684,   371,   713,   350,   349,
-     341,   324,   389,   337,   314,   332,   333,   357,   349,   357,
-     360,   357,   351,   350,   299,   300,   357,   356,   357,   316,
-     370,   456,   295,   296,   374,   314,   323,   316,   488,   370,
-     490,   321,   322,   374,   323,   316,   584,   316,   524,   389,
-     475,   314,   323,   316,   323,   315,   318,   320,   389,   321,
-     400,   321,   324,   315,   315,   614,   315,   451,   315,   400,
-     321,   315,   321,   550,   321,   315,   453,   321,   455,   321,
-     518,   321,   520,   533,   350,   523,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   332,   321,   321,   537,
-     324,   324,   321,   322,   321,   323,   321,   324,   319,   324,
-     321,   451,   717,   453,   318,   455,   321,   655,   667,   324,
-     451,   350,   453,   321,   455,   318,   324,   329,   330,   331,
-     326,   316,   328,   324,   545,   323,   586,   558,   559,   315,
-     590,   618,   560,   561,   566,   567,   314,   524,   335,   350,
-     350,   350,   316,   350,   336,   350,   334,   301,   707,   317,
-     303,   316,   319,   314,   324,   324,   506,   605,   606,   314,
-     324,   324,   314,   550,   314,   506,   614,   314,   314,   350,
-     350,   322,   315,   317,   524,   723,   317,   350,   314,   321,
-     317,   358,   315,   524,   319,   314,   318,   315,   350,   323,
-     650,   315,   318,   324,   324,   318,   656,   319,   568,   570,
-     550,   569,   362,   572,   571,   673,   296,   573,   374,   550,
-     458,   370,   544,   628,   658,   713,   374,   701,   714,   667,
-     368,   658,   516,   684,   684,   516,   675,    -1,   516,    -1,
-     580,   618,   357,    -1,   584,    -1,   696,    -1,   673,   580,
-      -1,   689,    -1,   584,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   712,    -1,    -1,    -1,    -1,    -1,    -1,   707,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   618,   656,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   618,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   679,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   684,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   655,   656,    -1,   658,    -1,
-      -1,    -1,    -1,    -1,   655,   656,    -1,   658,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   679,
-      -1,    -1,    -1,    -1,   684,    -1,    -1,    -1,   679,    -1,
-      -1,    -1,    -1,   684,    -1,   695,    -1,    -1,    -1,    -1,
-      -1,    -1,   702,    -1,   695,    -1,    -1,    -1,    -1,    -1,
-      -1,   702,    -1,   713,    -1,    -1,    -1,   717,    -1,    -1,
-      -1,    -1,   713,   723,    -1,    -1,   717,    -1,    -1,    -1,
-       0,    -1,   723,     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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       0,   324,     0,   317,     0,   319,   319,   319,   464,     0,
+     319,   319,   326,   336,   327,   327,   317,   326,   326,   317,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,   533,   327,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   357,   349,   416,   425,   589,   527,   515,   529,   405,
+     321,   532,   462,   386,   353,   299,   300,   304,   665,   392,
+     295,   296,   319,   297,   298,   318,   382,   361,   327,   326,
+     364,   378,   366,   367,   324,   374,   370,   327,   451,   349,
+     413,   414,   353,   317,   324,   319,   693,   357,   349,   323,
+     397,   335,   336,   340,   353,   365,   357,   365,   368,   365,
+     354,   318,   301,   302,   365,   359,   360,   324,   378,   465,
+     320,   353,   382,   704,   324,   335,   497,   378,   499,   324,
+     711,   382,   327,   321,   318,   593,   324,   397,   484,   327,
+     324,   722,   321,   318,   318,   318,   397,   318,   408,   324,
+     324,   324,   623,   324,   460,   318,   322,   408,   324,   559,
+     324,   324,   353,   327,   527,   462,   529,   464,   329,   532,
+     331,   542,   321,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   546,   571,   572,   573,   574,   324,   324,
+     325,   327,   726,   326,   324,   324,   353,   327,   327,   353,
+     460,   319,   462,   327,   464,   676,   664,   324,   325,   460,
+     326,   462,   353,   464,   342,   343,   344,   332,   333,   334,
+     567,   568,   575,   576,   595,   569,   570,   627,   599,   318,
+     317,   554,   353,   319,   353,   339,   533,   338,   337,   303,
+     305,   320,   319,   317,   322,   716,   327,   327,   317,   317,
+     317,   614,   615,   325,   327,   515,   327,   317,   317,   353,
+     623,   353,   559,   318,   515,   353,   320,   320,   324,   317,
+     361,   320,   322,   533,   732,   318,   317,   353,   318,   321,
+     326,   318,   533,   327,   577,   321,   321,   578,   659,   327,
+     365,   322,   579,   581,   665,   580,   582,   682,   382,   559,
+     382,   298,   467,   553,   637,   667,   710,   722,   559,   723,
+     667,   525,   378,   676,   376,   693,   525,   525,   365,   684,
+      -1,    -1,   693,    -1,    -1,    -1,    -1,    -1,    -1,   589,
+     627,    -1,    -1,   593,   705,   698,   682,    -1,   589,    -1,
+      -1,    -1,   593,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     721,    -1,    -1,   716,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   627,   665,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   627,    -1,    -1,    -1,
+      -1,    -1,   688,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   693,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   664,   665,    -1,   667,    -1,    -1,
+      -1,    -1,    -1,   664,   665,    -1,   667,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   688,    -1,
+      -1,    -1,    -1,   693,    -1,    -1,    -1,   688,    -1,    -1,
+      -1,    -1,   693,    -1,   704,    -1,    -1,    -1,    -1,    -1,
+      -1,   711,    -1,   704,    -1,    -1,    -1,    -1,    -1,    -1,
+     711,    -1,   722,    -1,    -1,    -1,   726,    -1,    -1,    -1,
+      -1,   722,   732,    -1,    -1,   726,    -1,    -1,    -1,     0,
+      -1,   732,     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,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   324,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,   339,
-     340,   341,   342,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   351,   352,   353,   354,   355,   356,   357,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   327,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     370,   371,   372,   373,   374,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   383,    -1,   385,   386,   387,   388,   389,
-     390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
-     410,     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,    -1,    -1,   295,   296,    -1,    -1,    -1,    -1,    -1,
+     341,   342,   343,   344,   345,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   354,   355,   356,   357,   358,   359,   360,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   314,    -1,   316,    -1,   318,   319,    -1,    -1,
-      -1,    -1,   324,   325,   326,   327,   328,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   338,   339,   340,   341,
-     342,    -1,    -1,    -1,   346,   347,   348,   349,   350,   351,
-     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
-      -1,   363,   364,   365,   366,   367,   368,   369,   370,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,   384,   385,   386,   387,   388,   389,   390,   391,
-     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,   404,   405,   406,   407,   408,   409,   410,     3,
+      -1,    -1,   373,   374,   375,   376,   377,   378,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   387,    -1,   389,   390,
+     391,   392,   393,   394,   395,   396,   397,   398,   399,   400,
+     401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
+     411,   412,   413,   414,   415,   416,   417,   418,   419,     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,
@@ -2521,101 +2517,62 @@
      254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
      264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
      274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,    -1,
-      -1,   295,   296,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,    -1,    -1,   297,   298,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     314,    -1,   316,    -1,   318,   319,    -1,    -1,    -1,    -1,
-     324,   325,   326,   327,   328,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   338,   339,   340,   341,   342,    -1,
-      -1,    -1,   346,   347,   348,   349,   350,   351,   352,   353,
-     354,   355,   356,   357,   358,   359,   360,   361,    -1,   363,
-     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
+      -1,    -1,   316,   317,    -1,   319,    -1,   321,   322,    -1,
+      -1,    -1,    -1,   327,   328,   329,   330,   331,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,   342,   343,
+     344,   345,    -1,    -1,    -1,   349,   350,   351,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
+     364,    -1,   366,   367,   368,   369,   370,   371,   372,   373,
      374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
      384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
      394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     404,   405,   406,   407,   408,   409,   410,     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,    -1,    -1,   295,
-     296,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   314,    -1,
-     316,    -1,   318,    -1,    -1,    -1,    -1,    -1,   324,   325,
-     326,   327,   328,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   338,   339,   340,   341,   342,    -1,    -1,    -1,
-     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
-     356,   357,   358,   359,   360,   361,    -1,   363,   364,   365,
-     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
-     376,   377,   378,   379,   380,   381,   382,   383,   384,   385,
-     386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
-     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
-     406,   407,   408,   409,   410,     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,    -1,    -1,   295,   296,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   314,    -1,   316,    -1,
-     318,    -1,    -1,    -1,    -1,    -1,   324,   325,   326,   327,
-     328,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     338,   339,   340,   341,   342,    -1,    -1,    -1,   346,   347,
-     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
-     358,   359,   360,   361,    -1,   363,   364,   365,   366,   367,
-     368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
-     388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,   403,   404,   405,   406,   407,
-     408,   409,   410,     3,     4,     5,     6,     7,     8,     9,
+     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
+     414,   415,   416,   417,   418,   419,     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,    -1,    -1,
+     297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   316,
+     317,    -1,   319,    -1,   321,   322,    -1,    -1,    -1,    -1,
+     327,   328,   329,   330,   331,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   341,   342,   343,   344,   345,    -1,
+      -1,    -1,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,    -1,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
+     387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+     397,   398,   399,   400,   401,   402,   403,   404,   405,   406,
+     407,   408,   409,   410,   411,   412,   413,   414,   415,   416,
+     417,   418,   419,     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,
@@ -2644,100 +2601,61 @@
      260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
      270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
      280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,    -1,    -1,   295,   296,    -1,    -1,    -1,
+     290,   291,   292,   293,   294,    -1,    -1,   297,   298,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   314,    -1,   316,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   324,   325,   326,   327,   328,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,   339,
-     340,   341,   342,    -1,    -1,    -1,   346,   347,   348,   349,
+      -1,    -1,    -1,    -1,    -1,    -1,   316,   317,    -1,   319,
+      -1,   321,    -1,    -1,    -1,    -1,    -1,   327,   328,   329,
+     330,   331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   341,   342,   343,   344,   345,    -1,    -1,    -1,   349,
      350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
-     360,   361,    -1,   363,   364,   365,   366,   367,   368,   369,
+     360,   361,   362,   363,   364,    -1,   366,   367,   368,   369,
      370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
      380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
      400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
-     410,     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,    -1,    -1,   295,   296,    -1,    -1,    -1,    -1,    -1,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+       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,    -1,    -1,   297,   298,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   314,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   324,   325,   326,   327,   328,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   338,   339,   340,   341,
-     342,    -1,    -1,    -1,   346,   347,   348,   349,   350,   351,
-     352,   353,   354,   355,   356,   357,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   370,   371,
-     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
-     382,   383,    -1,   385,   386,   387,   388,   389,   390,   391,
-     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,   404,   405,   406,   407,   408,   409,   410,     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,    -1,
-      -1,   295,   296,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     314,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   325,   326,   327,   328,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   338,   339,   340,   341,    -1,    -1,
-      -1,    -1,   346,   347,   348,   349,   350,   351,   352,   353,
-     354,   355,   356,   357,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   370,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-      -1,   385,   386,   387,   388,   389,   390,   391,   392,   393,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     404,   405,   406,   407,   408,   409,   410,     3,     4,     5,
+      -1,    -1,    -1,   316,   317,    -1,   319,    -1,   321,    -1,
+      -1,    -1,    -1,    -1,   327,   328,   329,   330,   331,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,   342,
+     343,   344,   345,    -1,    -1,    -1,   349,   350,   351,   352,
+     353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
+     363,   364,    -1,   366,   367,   368,   369,   370,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,   385,   386,   387,   388,   389,   390,   391,   392,
+     393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+     403,   404,   405,   406,   407,   408,   409,   410,   411,   412,
+     413,   414,   415,   416,   417,   418,   419,     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,
@@ -2766,19 +2684,145 @@
      256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
      266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
      276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,    -1,    -1,    -1,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,    -1,
+      -1,   297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   324,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   338,   339,   340,   341,   342,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   351,   352,   353,   354,   355,
-     356,   357,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   370,   371,   372,   373,   374,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   383,    -1,   385,
+     316,   317,    -1,   319,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   327,   328,   329,   330,   331,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   341,   342,   343,   344,   345,
+      -1,    -1,    -1,   349,   350,   351,   352,   353,   354,   355,
+     356,   357,   358,   359,   360,   361,   362,   363,   364,    -1,
+     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
+     376,   377,   378,   379,   380,   381,   382,   383,   384,   385,
      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
      396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
-     406,   407,   408,   409,   410,     3,     4,     5,     6,     7,
+     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   417,   418,   419,     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,    -1,    -1,   297,   298,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   316,   317,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   327,   328,
+     329,   330,   331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   341,   342,   343,   344,   345,    -1,    -1,    -1,
+     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
+     359,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,   385,   386,   387,    -1,
+     389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+     399,   400,   401,   402,   403,   404,   405,   406,   407,   408,
+     409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
+     419,     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,    -1,    -1,   297,   298,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   316,   317,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   328,   329,   330,   331,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,
+     342,   343,   344,    -1,    -1,    -1,    -1,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   373,   374,   375,   376,   377,   378,   379,   380,   381,
+     382,   383,   384,   385,   386,   387,    -1,   389,   390,   391,
+     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
+     402,   403,   404,   405,   406,   407,   408,   409,   410,   411,
+     412,   413,   414,   415,   416,   417,   418,   419,     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,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   327,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   341,   342,   343,   344,
+     345,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,
+     355,   356,   357,   358,   359,   360,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,   377,   378,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   387,    -1,   389,   390,   391,   392,   393,   394,
+     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
+     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419,     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,
@@ -2807,100 +2851,61 @@
      258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
      268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
      278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,    -1,    -1,    -1,    -1,    -1,
+     288,   289,   290,   291,   292,   293,   294,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   324,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   327,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     338,   339,   340,   341,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   350,   351,   352,   353,   354,   355,   356,   357,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   370,   371,   372,   373,   374,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   383,    -1,   385,   386,   387,
-     388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+      -1,    -1,    -1,   341,   342,   343,   344,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   353,   354,   355,   356,   357,
+     358,   359,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,
+     378,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   387,
+      -1,   389,   390,   391,   392,   393,   394,   395,   396,   397,
      398,   399,   400,   401,   402,   403,   404,   405,   406,   407,
-     408,   409,   410,     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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
+     418,   419,     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,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   319,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   338,   339,
-     340,   341,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   351,   352,   353,   354,   355,   356,   357,    -1,    -1,
+      -1,   322,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     370,   371,   372,   373,   374,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   383,    -1,   385,   386,   387,   388,   389,
-     390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
-     410,     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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     341,   342,   343,   344,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   354,   355,   356,   357,   358,   359,   360,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   319,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   338,   339,   340,   341,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   351,
-     352,   353,   354,   355,   356,   357,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   370,   371,
-     372,   373,   374,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   383,    -1,   385,   386,   387,   388,   389,   390,   391,
-     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,   404,   405,   406,   407,   408,   409,   410,     3,
+      -1,    -1,   373,   374,   375,   376,   377,   378,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   387,    -1,   389,   390,
+     391,   392,   393,   394,   395,   396,   397,   398,   399,   400,
+     401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
+     411,   412,   413,   414,   415,   416,   417,   418,   419,     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,
@@ -2929,25 +2934,149 @@
      254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
      264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
      274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,    -1,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   322,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   319,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   338,   339,   340,   341,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   351,   352,   353,
-     354,   355,   356,   357,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   370,   371,   372,   373,
-     374,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   383,
-      -1,   385,   386,   387,   388,   389,   390,   391,   392,   393,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   341,   342,   343,
+     344,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     354,   355,   356,   357,   358,   359,   360,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
+     374,   375,   376,   377,   378,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   387,    -1,   389,   390,   391,   392,   393,
      394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-     404,   405,   406,   407,   408,   409,   410,     3,     4,     5,
+     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
+     414,   415,   416,   417,   418,   419,     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,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   322,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   341,   342,   343,   344,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,   356,
+     357,   358,   359,   360,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,
+     377,   378,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     387,    -1,   389,   390,   391,   392,   393,   394,   395,   396,
+     397,   398,   399,   400,   401,   402,   403,   404,   405,   406,
+     407,   408,   409,   410,   411,   412,   413,   414,   415,   416,
+     417,   418,   419,     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,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   341,   342,   343,   344,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   354,   355,   356,   357,   358,   359,
+     360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,   377,   378,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   387,    -1,   389,
+     390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    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,    -1,    -1,   297,   298,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   316,   317,    -1,    -1,    -1,   321,   322,    -1,
+      -1,    -1,    -1,    -1,   328,   329,   330,   331,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   349,   350,   351,   352,   353,
+     354,    -1,    -1,    -1,    -1,   359,   360,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   379,   380,   381,   382,   383,
+     384,   385,   386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   401,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
       66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
       76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
       86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
@@ -2970,301 +3099,226 @@
      256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
      266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
      276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,    -1,    -1,    -1,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,    -1,
+      -1,   297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     316,   317,    -1,    -1,   320,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   328,   329,   330,   331,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   349,   350,   351,   352,   353,   354,    -1,
+      -1,    -1,    -1,   359,   360,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   379,   380,   381,   382,   383,   384,   385,
+     386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   401,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    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,    -1,    -1,   297,
+     298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   316,   317,
+      -1,    -1,    -1,   321,    -1,    -1,    -1,    -1,    -1,    -1,
+     328,   329,   330,   331,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   349,   350,   351,   352,   353,   354,    -1,    -1,    -1,
+      -1,   359,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   379,   380,   381,   382,   383,   384,   385,   386,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   401,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    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,    -1,    -1,   297,   298,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   316,   317,    -1,    -1,
+     320,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   328,   329,
+     330,   331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   349,
+     350,   351,   352,   353,   354,    -1,    -1,    -1,    -1,   359,
+     360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,
+     380,   381,   382,   383,   384,   385,   386,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   401,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    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,    -1,    -1,   297,   298,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   316,   317,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   327,   328,   329,   330,   331,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   349,   350,   351,
+     352,   353,   354,    -1,    -1,    -1,    -1,   359,   360,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,   380,   381,
+     382,   383,   384,   385,   386,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   401,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    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,    -1,    -1,   297,   298,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   316,   317,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   328,   329,   330,   331,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   349,   350,   351,   352,   353,
+     354,    -1,    -1,    -1,    -1,   359,   360,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   379,   380,   381,   382,   383,
+     384,   385,   386,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   401,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    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,   391,
+      -1,   297,   298,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   405,    -1,    -1,    -1,    -1,    -1,    -1,
+     316,   317,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     422,   423,   328,   329,   330,   331,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   349,   350,   351,   352,   353,   354,    -1,
+      -1,    -1,   454,   359,   360,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   465,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   379,   380,   381,   382,   383,   384,   385,
+     386,    -1,   484,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   401,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   338,   339,   340,   341,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   351,   352,   353,   354,   355,
-     356,   357,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   370,   371,   372,   373,   374,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   383,    -1,   385,
-     386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
-     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
-     406,   407,   408,   409,   410,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    -1,    -1,    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,    -1,    -1,   295,   296,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   551,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   314,    -1,    -1,    -1,   318,
-     319,    -1,    -1,    -1,    -1,    -1,   325,   326,   327,   328,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   346,   347,   348,
-     349,   350,   351,    -1,    -1,    -1,    -1,   356,   357,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   375,   376,   377,   378,
-     379,   380,   381,   382,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   393,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    -1,    -1,    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,    -1,    -1,   295,   296,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   314,    -1,    -1,   317,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   325,   326,   327,   328,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   346,   347,   348,
-     349,   350,   351,    -1,    -1,    -1,    -1,   356,   357,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   375,   376,   377,   378,
-     379,   380,   381,   382,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   393,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    -1,    -1,    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,    -1,    -1,   295,   296,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   314,    -1,    -1,    -1,   318,
-      -1,    -1,    -1,    -1,    -1,    -1,   325,   326,   327,   328,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   346,   347,   348,
-     349,   350,   351,    -1,    -1,    -1,    -1,   356,   357,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   375,   376,   377,   378,
-     379,   380,   381,   382,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   393,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    -1,    -1,    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,    -1,    -1,   295,   296,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   314,    -1,    -1,   317,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   325,   326,   327,   328,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   346,   347,   348,
-     349,   350,   351,    -1,    -1,    -1,    -1,   356,   357,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   375,   376,   377,   378,
-     379,   380,   381,   382,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   393,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    -1,    -1,    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,    -1,    -1,   295,   296,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   314,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   324,   325,   326,   327,   328,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   346,   347,   348,
-     349,   350,   351,    -1,    -1,    -1,    -1,   356,   357,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   375,   376,   377,   378,
-     379,   380,   381,   382,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   393,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    -1,    -1,    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,    -1,    -1,   295,   296,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   314,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   325,   326,   327,   328,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   346,   347,   348,
-     349,   350,   351,    -1,    -1,    -1,    -1,   356,   357,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   375,   376,   377,   378,
-     379,   380,   381,   382,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   393,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    -1,    -1,    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,    -1,    -1,   295,   296,    -1,   383,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   397,    -1,   314,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   325,   326,   327,   328,
-     414,   415,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   346,   347,   348,
-     349,   350,   351,    -1,    -1,    -1,    -1,   356,   357,    -1,
-      -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   456,    -1,    -1,    -1,   375,   376,   377,   378,
-     379,   380,   381,   382,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   475,    -1,    -1,   393,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   542,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   555,   556,   557,   558,   559,   560,   561,   562,   563,
-     564,   565,   566,   567,   568,   569,   570,   571,   572,   573,
+      -1,    -1,   564,   565,   566,   567,   568,   569,   570,   571,
+     572,   573,   574,   575,   576,   577,   578,   579,   580,   581,
+     582,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -3274,7 +3328,7 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   673
+     682
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -3310,139 +3364,142 @@
      262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
      272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
      282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   324,   338,   339,   340,   341,   342,   351,   352,   353,
-     354,   355,   356,   357,   370,   371,   372,   373,   374,   383,
-     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
-     405,   406,   407,   408,   409,   410,   442,   443,   446,   447,
-     448,   449,   453,   454,   455,   456,   457,   458,   461,   462,
-     463,   464,   465,   467,   472,   473,   474,   515,   516,   517,
-     473,   318,   350,   314,   314,   324,   350,   324,   518,   315,
-     321,   450,   451,   452,   462,   467,   321,   324,   350,   324,
-     350,   463,   467,   332,   469,   470,     0,   516,   467,   476,
-     318,   350,   371,   459,   460,   350,   466,   316,   324,   468,
-     318,   494,   451,   450,   452,   350,   350,   314,   323,   468,
-     318,   321,   324,   445,   295,   296,   314,   325,   326,   327,
-     328,   346,   347,   348,   349,   350,   375,   376,   377,   378,
-     379,   380,   381,   382,   412,   413,   414,   416,   417,   418,
-     419,   420,   421,   422,   423,   424,   465,   467,   471,   468,
-     324,   462,   467,   477,   478,   475,   323,   315,   321,   315,
-     321,   317,   423,   425,   426,   427,   428,   429,   430,   431,
-     432,   433,   434,   435,   436,   316,   324,   316,   318,   319,
-     324,   358,   359,   360,   361,   363,   364,   365,   366,   367,
-     368,   369,   384,   423,   436,   438,   440,   442,   446,   465,
-     467,   483,   484,   485,   486,   487,   495,   496,   497,   498,
-     501,   502,   505,   506,   507,   514,   519,   468,   323,   468,
-     318,   438,   481,   323,   444,   350,   321,   324,   423,   423,
-     440,   295,   296,   316,   320,   315,   315,   321,   357,   438,
-     314,   423,   321,   333,   467,   350,   479,   480,   319,   478,
-     477,   436,   441,   460,   350,   329,   330,   331,   326,   328,
-     293,   294,   297,   298,   332,   333,   299,   300,   336,   335,
-     334,   301,   303,   302,   337,   317,   317,   436,   316,   319,
-     488,   314,   324,   324,   509,   314,   314,   324,   324,   440,
-     314,   440,   322,   324,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   323,   439,   321,   324,   319,   484,
-     498,   502,   507,   481,   323,   481,   482,   481,   477,   350,
-     315,   415,   440,   350,   438,   423,   479,   468,   321,   324,
-     319,   423,   423,   423,   425,   425,   426,   426,   427,   427,
-     427,   427,   428,   428,   429,   430,   431,   432,   433,   434,
-     437,   317,   350,   520,   521,   495,   508,   484,   510,   440,
-     324,   440,   322,   438,   438,   481,   319,   321,   319,   317,
-     324,   480,   440,   314,   317,   321,   489,   440,   455,   462,
-     500,   358,   483,   496,   511,   315,   315,   319,   481,   322,
-     441,   317,   521,   319,   350,   315,   314,   500,   512,   513,
-     491,   492,   493,   499,   503,   438,   315,   323,   485,   490,
-     494,   440,   324,   315,   362,   487,   485,   318,   481,   315,
-     440,   490,   491,   495,   504,   324,   319
+     292,   293,   294,   327,   341,   342,   343,   344,   345,   354,
+     355,   356,   357,   358,   359,   360,   373,   374,   375,   376,
+     377,   378,   387,   389,   390,   391,   392,   393,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
+     416,   417,   418,   419,   451,   452,   455,   456,   457,   458,
+     462,   463,   464,   465,   466,   467,   470,   471,   472,   473,
+     474,   476,   481,   482,   483,   524,   525,   526,   482,   321,
+     353,   317,   317,   327,   353,   327,   527,   318,   324,   459,
+     460,   461,   471,   476,   324,   327,   353,   327,   353,   472,
+     476,   335,   478,   479,     0,   525,   476,   485,   321,   353,
+     374,   468,   469,   353,   475,   319,   327,   477,   321,   503,
+     460,   459,   461,   353,   353,   317,   326,   477,   321,   324,
+     327,   454,   297,   298,   316,   317,   328,   329,   330,   331,
+     349,   350,   351,   352,   353,   379,   380,   381,   382,   383,
+     384,   385,   386,   421,   422,   423,   425,   426,   427,   428,
+     429,   430,   431,   432,   433,   474,   476,   480,   477,   327,
+     471,   476,   486,   487,   484,   326,   318,   324,   318,   324,
+     320,   432,   434,   435,   436,   437,   438,   439,   440,   441,
+     442,   443,   444,   445,   319,   327,   319,   321,   322,   327,
+     361,   362,   363,   364,   366,   367,   368,   369,   370,   371,
+     372,   388,   432,   445,   447,   449,   451,   455,   474,   476,
+     492,   493,   494,   495,   496,   504,   505,   506,   507,   510,
+     511,   514,   515,   516,   523,   528,   477,   326,   477,   321,
+     447,   490,   326,   453,   353,   324,   327,   432,   432,   449,
+     297,   298,   319,   323,   318,   318,   324,   360,   447,   317,
+     432,   324,   336,   476,   353,   488,   489,   322,   487,   486,
+     445,   450,   469,   353,   332,   333,   334,   329,   331,   295,
+     296,   299,   300,   335,   336,   301,   302,   339,   338,   337,
+     303,   305,   304,   340,   320,   320,   445,   319,   322,   497,
+     317,   327,   327,   518,   317,   317,   327,   327,   449,   317,
+     449,   325,   327,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   326,   448,   324,   327,   322,   493,   507,
+     511,   516,   490,   326,   490,   491,   490,   486,   353,   318,
+     424,   449,   353,   447,   432,   488,   477,   324,   327,   322,
+     432,   432,   432,   434,   434,   435,   435,   436,   436,   436,
+     436,   437,   437,   438,   439,   440,   441,   442,   443,   446,
+     320,   353,   529,   530,   504,   517,   493,   519,   449,   327,
+     449,   325,   447,   447,   490,   322,   324,   322,   320,   327,
+     489,   449,   317,   320,   324,   498,   449,   464,   471,   509,
+     361,   492,   505,   520,   318,   318,   322,   490,   325,   450,
+     320,   530,   322,   353,   318,   317,   509,   521,   522,   500,
+     501,   502,   508,   512,   447,   318,   326,   494,   499,   503,
+     449,   327,   318,   365,   496,   494,   321,   490,   318,   449,
+     499,   500,   504,   513,   327,   322
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   411,   412,   413,   413,   413,   413,   413,   413,   413,
-     413,   413,   413,   413,   413,   413,   413,   414,   414,   414,
-     414,   414,   414,   415,   416,   417,   418,   418,   419,   419,
-     420,   420,   421,   422,   422,   422,   423,   423,   423,   423,
-     424,   424,   424,   424,   425,   425,   425,   425,   426,   426,
-     426,   427,   427,   427,   428,   428,   428,   428,   428,   429,
-     429,   429,   430,   430,   431,   431,   432,   432,   433,   433,
-     434,   434,   435,   435,   436,   437,   436,   438,   438,   439,
-     439,   439,   439,   439,   439,   439,   439,   439,   439,   439,
-     440,   440,   441,   442,   442,   442,   442,   442,   442,   442,
-     442,   442,   444,   443,   445,   445,   446,   447,   447,   448,
-     448,   449,   450,   450,   451,   451,   451,   451,   452,   453,
-     453,   453,   453,   453,   454,   454,   454,   454,   454,   455,
-     455,   456,   457,   457,   457,   457,   457,   457,   457,   457,
-     458,   459,   459,   460,   460,   460,   461,   462,   462,   463,
-     463,   463,   463,   463,   463,   463,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   464,   464,   464,   464,   464,
-     464,   464,   464,   464,   464,   465,   466,   466,   467,   467,
-     468,   468,   468,   468,   469,   469,   470,   471,   471,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   472,
-     472,   472,   472,   472,   472,   472,   472,   472,   472,   473,
-     473,   473,   475,   474,   476,   474,   477,   477,   478,   478,
-     479,   479,   480,   480,   481,   481,   481,   482,   482,   483,
-     484,   484,   485,   485,   485,   485,   485,   485,   485,   485,
-     486,   487,   488,   489,   487,   490,   490,   492,   491,   493,
-     491,   494,   494,   495,   495,   496,   496,   497,   497,   498,
-     499,   499,   500,   500,   501,   501,   503,   502,   504,   504,
-     505,   505,   506,   506,   508,   507,   509,   507,   510,   507,
-     511,   511,   512,   512,   513,   513,   514,   514,   514,   514,
-     514,   515,   515,   516,   516,   516,   518,   517,   519,   520,
-     520,   521,   521
+       0,   420,   421,   422,   422,   422,   422,   422,   422,   422,
+     422,   422,   422,   422,   422,   422,   422,   422,   423,   423,
+     423,   423,   423,   423,   424,   425,   426,   427,   427,   428,
+     428,   429,   429,   430,   431,   431,   431,   432,   432,   432,
+     432,   433,   433,   433,   433,   434,   434,   434,   434,   435,
+     435,   435,   436,   436,   436,   437,   437,   437,   437,   437,
+     438,   438,   438,   439,   439,   440,   440,   441,   441,   442,
+     442,   443,   443,   444,   444,   445,   446,   445,   447,   447,
+     448,   448,   448,   448,   448,   448,   448,   448,   448,   448,
+     448,   449,   449,   450,   451,   451,   451,   451,   451,   451,
+     451,   451,   451,   453,   452,   454,   454,   455,   456,   456,
+     457,   457,   458,   459,   459,   460,   460,   460,   460,   461,
+     462,   462,   462,   462,   462,   463,   463,   463,   463,   463,
+     464,   464,   465,   466,   466,   466,   466,   466,   466,   466,
+     466,   467,   468,   468,   469,   469,   469,   470,   471,   471,
+     472,   472,   472,   472,   472,   472,   472,   473,   473,   473,
+     473,   473,   473,   473,   473,   473,   473,   473,   473,   473,
+     473,   473,   473,   473,   473,   473,   473,   473,   473,   473,
+     473,   473,   473,   473,   473,   473,   473,   473,   473,   473,
+     473,   473,   474,   475,   475,   476,   476,   477,   477,   477,
+     477,   478,   478,   479,   480,   480,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   481,   481,
+     481,   481,   481,   481,   481,   481,   481,   481,   482,   482,
+     482,   484,   483,   485,   483,   486,   486,   487,   487,   488,
+     488,   489,   489,   490,   490,   490,   491,   491,   492,   493,
+     493,   494,   494,   494,   494,   494,   494,   494,   494,   495,
+     496,   497,   498,   496,   499,   499,   501,   500,   502,   500,
+     503,   503,   504,   504,   505,   505,   506,   506,   507,   508,
+     508,   509,   509,   510,   510,   512,   511,   513,   513,   514,
+     514,   515,   515,   517,   516,   518,   516,   519,   516,   520,
+     520,   521,   521,   522,   522,   523,   523,   523,   523,   523,
+     524,   524,   525,   525,   525,   527,   526,   528,   529,   529,
+     530,   530
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
        0,     2,     1,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     4,     1,
-       3,     2,     2,     1,     1,     1,     2,     2,     2,     1,
-       2,     3,     2,     1,     1,     1,     1,     2,     2,     2,
-       1,     1,     1,     1,     1,     3,     3,     3,     1,     3,
-       3,     1,     3,     3,     1,     3,     3,     3,     3,     1,
-       3,     3,     1,     3,     1,     3,     1,     3,     1,     3,
-       1,     3,     1,     3,     1,     0,     6,     1,     3,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     4,
+       1,     3,     2,     2,     1,     1,     1,     2,     2,     2,
+       1,     2,     3,     2,     1,     1,     1,     1,     2,     2,
+       2,     1,     1,     1,     1,     1,     3,     3,     3,     1,
+       3,     3,     1,     3,     3,     1,     3,     3,     3,     3,
+       1,     3,     3,     1,     3,     1,     3,     1,     3,     1,
+       3,     1,     3,     1,     3,     1,     0,     6,     1,     3,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     3,     1,     2,     2,     4,     2,     3,     4,     2,
-       3,     4,     0,     6,     2,     3,     2,     1,     1,     2,
-       3,     3,     2,     3,     2,     1,     2,     1,     1,     1,
-       3,     4,     6,     5,     1,     2,     3,     5,     4,     1,
-       2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       4,     1,     3,     1,     3,     1,     1,     1,     2,     1,
+       1,     1,     3,     1,     2,     2,     4,     2,     3,     4,
+       2,     3,     4,     0,     6,     2,     3,     2,     1,     1,
+       2,     3,     3,     2,     3,     2,     1,     2,     1,     1,
+       1,     3,     4,     6,     5,     1,     2,     3,     5,     4,
+       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     4,     1,     3,     1,     3,     1,     1,     1,     2,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     4,     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,     4,     1,     1,     3,     2,     3,     2,     3,     3,
+       4,     1,     0,     3,     1,     3,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -3472,16 +3529,16 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     6,     0,     5,     1,     2,     3,     4,
-       1,     3,     1,     2,     1,     3,     4,     1,     3,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     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,     1,     2,     1,     1,     1,     0,     3,     5,     1,
-       3,     1,     4
+       1,     0,     6,     0,     5,     1,     2,     3,     4,     1,
+       3,     1,     2,     1,     3,     4,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     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,
+       1,     2,     1,     1,     1,     0,     3,     5,     1,     3,
+       1,     4
 };
 
 
@@ -4164,250 +4221,260 @@
   switch (yyn)
     {
         case 2:
-#line 352 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 357 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 4172 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4229 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 363 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4237 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 4:
-#line 361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 366 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 4190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4247 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 371 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 4198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4255 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 6:
-#line 369 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 374 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4263 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 7:
-#line 372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 377 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4215 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4272 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 8:
-#line 376 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 381 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 4223 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4280 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 9:
-#line 380 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 385 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
+    }
+#line 4288 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 10:
+#line 388 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4297 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 10:
-#line 384 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 11:
+#line 392 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4306 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 11:
-#line 388 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 12:
+#line 396 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
     }
-#line 4250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4315 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 12:
-#line 392 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 13:
+#line 400 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
     }
-#line 4259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4324 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 13:
-#line 396 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 14:
+#line 404 "glslang.y" /* yacc.c:1646  */
     {
         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 4268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4333 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 14:
-#line 400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 15:
+#line 408 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 15:
-#line 404 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
-    }
-#line 4286 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4342 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 16:
-#line 408 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 412 "glslang.y" /* yacc.c:1646  */
+    {
+        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 4353 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 17:
+#line 418 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
     }
-#line 4295 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 17:
-#line 416 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 4303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4362 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 419 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
-    }
-#line 4311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 19:
-#line 422 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 426 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4319 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4370 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 19:
+#line 429 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
+    }
+#line 4378 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 425 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 432 "glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4327 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4386 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 428 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 435 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
+    }
+#line 4394 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 22:
+#line 438 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4404 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 22:
-#line 433 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 23:
+#line 443 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4414 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 23:
-#line 441 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 24:
+#line 451 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4423 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 24:
-#line 448 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 25:
+#line 458 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 4365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 25:
-#line 455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[0].interm);
-    }
-#line 4373 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4432 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-    }
-#line 4382 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 27:
-#line 465 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-        (yyval.interm).loc = (yyvsp[0].lex).loc;
-    }
-#line 4391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 28:
-#line 472 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-    }
-#line 4399 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 29:
-#line 475 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 465 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4407 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4440 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 27:
+#line 471 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[-1].interm);
+        (yyval.interm).loc = (yyvsp[0].lex).loc;
+    }
+#line 4449 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 28:
+#line 475 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[-1].interm);
+        (yyval.interm).loc = (yyvsp[0].lex).loc;
+    }
+#line 4458 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 29:
+#line 482 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[-1].interm);
+    }
+#line 4466 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 30:
-#line 481 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 485 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[0].interm);
+    }
+#line 4474 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 31:
+#line 491 "glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -4415,11 +4482,11 @@
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4486 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 31:
-#line 488 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 32:
+#line 498 "glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -4427,29 +4494,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 4431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 32:
-#line 498 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[-1].interm);
-    }
-#line 4439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4498 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 508 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[-1].interm);
+    }
+#line 4506 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 34:
+#line 516 "glslang.y" /* yacc.c:1646  */
     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4516 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 34:
-#line 511 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 35:
+#line 521 "glslang.y" /* yacc.c:1646  */
     {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -4477,50 +4544,50 @@
             (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 4481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4548 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 35:
-#line 539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 36:
+#line 549 "glslang.y" /* yacc.c:1646  */
     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4558 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 36:
-#line 548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 37:
+#line 558 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 4502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4569 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 37:
-#line 554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 38:
+#line 564 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4578 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 38:
-#line 558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 39:
+#line 568 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4587 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 39:
-#line 562 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 40:
+#line 572 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
@@ -4537,179 +4604,179 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 4541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 40:
-#line 582 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 4547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4608 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 583 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 4553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 592 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
+#line 4614 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 584 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 4559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 593 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
+#line 4620 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 43:
-#line 585 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
-              parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 4566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 594 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
+#line 4626 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 595 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
+              parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
+#line 4633 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 45:
-#line 592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 601 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4639 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 46:
+#line 602 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4649 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 46:
-#line 597 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 47:
+#line 607 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4659 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 47:
-#line 602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 48:
+#line 612 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 48:
-#line 611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4670 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 49:
-#line 612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 621 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4676 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 50:
+#line 622 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4686 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 50:
-#line 617 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 51:
+#line 627 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 51:
-#line 625 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4635 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4696 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 52:
-#line 626 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 635 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4702 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 53:
+#line 636 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4713 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 53:
-#line 632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 54:
+#line 642 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 54:
-#line 641 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4724 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 55:
-#line 642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 651 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4730 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 56:
+#line 652 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4673 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4740 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 56:
-#line 647 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 57:
+#line 657 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4750 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 57:
-#line 652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 58:
+#line 662 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4693 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4760 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 58:
-#line 657 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 59:
+#line 667 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 59:
-#line 665 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4770 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 60:
-#line 666 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 675 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4776 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 61:
+#line 676 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
@@ -4719,11 +4786,11 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4790 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 61:
-#line 675 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 62:
+#line 685 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
@@ -4733,124 +4800,124 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 62:
-#line 687 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4743 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4804 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 63:
-#line 688 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 697 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4810 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 64:
+#line 698 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 64:
-#line 697 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4821 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 65:
-#line 698 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 707 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4827 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 66:
+#line 708 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 66:
-#line 707 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4838 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 67:
-#line 708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 717 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4844 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 68:
+#line 718 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 68:
-#line 717 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4855 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 69:
-#line 718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 727 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4861 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 70:
+#line 728 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 70:
-#line 726 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4871 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 71:
-#line 727 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 736 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4877 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 72:
+#line 737 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 72:
-#line 735 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4887 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 73:
-#line 736 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 745 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4893 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 74:
+#line 746 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 74:
-#line 744 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4903 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 75:
-#line 745 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        ++parseContext.controlFlowNestingLevel;
-    }
-#line 4850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 754 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4909 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 76:
-#line 748 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 755 "glslang.y" /* yacc.c:1646  */
+    {
+        ++parseContext.controlFlowNestingLevel;
+    }
+#line 4917 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 77:
+#line 758 "glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
@@ -4863,17 +4930,17 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 77:
-#line 763 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4873 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4934 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 78:
-#line 764 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 773 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4940 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 79:
+#line 774 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
         parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
@@ -4887,119 +4954,119 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 4891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4958 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 79:
-#line 780 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 80:
+#line 790 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 4900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4967 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 80:
-#line 784 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 81:
+#line 794 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 4909 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4976 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 81:
-#line 788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 82:
+#line 798 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 4918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4985 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 82:
-#line 792 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 83:
+#line 802 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 4928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4995 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 83:
-#line 797 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 84:
+#line 807 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 4937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5004 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 84:
-#line 801 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 85:
+#line 811 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 4946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5013 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 85:
-#line 805 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 86:
+#line 815 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 4955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5022 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 86:
-#line 809 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 87:
+#line 819 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 4964 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5031 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 87:
-#line 813 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 88:
+#line 823 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 4973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5040 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 88:
-#line 817 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 89:
+#line 827 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 4982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5049 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 89:
-#line 821 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 90:
+#line 831 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 4991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 90:
-#line 828 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 4999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5058 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 91:
-#line 831 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 838 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+    }
+#line 5066 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 92:
+#line 841 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
@@ -5008,40 +5075,40 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 5012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5079 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 92:
-#line 842 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 93:
+#line 852 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5088 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 93:
-#line 849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 94:
+#line 859 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 5031 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5098 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 94:
-#line 854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 95:
+#line 864 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
             (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
     }
-#line 5041 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5108 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 95:
-#line 859 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 96:
+#line 869 "glslang.y" /* yacc.c:1646  */
     {
         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
@@ -5049,75 +5116,75 @@
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 5053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5120 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 96:
-#line 866 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 97:
+#line 876 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 5062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5129 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 97:
-#line 870 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 98:
+#line 880 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 5071 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5138 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 98:
-#line 874 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 99:
+#line 884 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 5080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5147 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 99:
-#line 878 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 100:
+#line 888 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 5090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5157 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 100:
-#line 883 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 101:
+#line 893 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
         parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 5100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5167 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 101:
-#line 888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 102:
+#line 898 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
         (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
         parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
         (yyval.interm.intermNode) = 0;
     }
-#line 5111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 102:
-#line 897 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 5117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5178 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 103:
-#line 897 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 907 "glslang.y" /* yacc.c:1646  */
+    { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
+#line 5184 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 104:
+#line 907 "glslang.y" /* yacc.c:1646  */
     {
         --parseContext.structNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
@@ -5127,54 +5194,54 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 5131 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5198 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 104:
-#line 908 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 105:
+#line 918 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 5140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5207 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 105:
-#line 912 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 106:
+#line 922 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 5149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5216 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 106:
-#line 919 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 107:
+#line 929 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 107:
-#line 926 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
-    }
-#line 5166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5225 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 108:
-#line 929 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 936 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 5174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5233 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 936 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 939 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.function) = (yyvsp[0].interm.function);
+    }
+#line 5241 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 110:
+#line 946 "glslang.y" /* yacc.c:1646  */
     {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
@@ -5183,11 +5250,11 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 5187 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5254 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 110:
-#line 944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 111:
+#line 954 "glslang.y" /* yacc.c:1646  */
     {
         //
         // Only first parameter of one-parameter functions can be void
@@ -5205,11 +5272,11 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 5209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5276 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 111:
-#line 964 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 112:
+#line 974 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
             parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
@@ -5229,11 +5296,11 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 5233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5300 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 112:
-#line 987 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 113:
+#line 997 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -5249,11 +5316,11 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5320 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 113:
-#line 1002 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 114:
+#line 1012 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -5273,11 +5340,11 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5344 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 114:
-#line 1027 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 115:
+#line 1037 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5289,11 +5356,11 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 5293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5360 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 115:
-#line 1038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 116:
+#line 1048 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -5301,11 +5368,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 5305 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5372 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 116:
-#line 1048 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 117:
+#line 1058 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5316,11 +5383,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 5320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5387 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 117:
-#line 1058 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 118:
+#line 1068 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -5328,68 +5395,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 5332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5399 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 118:
-#line 1068 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 119:
+#line 1078 "glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
         (yyval.interm).param = param;
         if ((yyvsp[0].interm.type).arraySizes)
             parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
     }
-#line 5343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 119:
-#line 1077 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[0].interm);
-    }
-#line 5351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5410 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 120:
-#line 1080 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1087 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[0].interm);
+    }
+#line 5418 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 121:
+#line 1090 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 5360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5427 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 121:
-#line 1084 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 122:
+#line 1094 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 5369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5436 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 122:
-#line 1088 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 123:
+#line 1098 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-5].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5446 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 123:
-#line 1093 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 124:
+#line 1103 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5389 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5456 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 124:
-#line 1101 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 125:
+#line 1111 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[0].interm.type);
         (yyval.interm).intermNode = 0;
@@ -5397,51 +5464,51 @@
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
 
     }
-#line 5401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5468 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 125:
-#line 1108 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 126:
+#line 1118 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-1].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
     }
-#line 5411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5478 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 126:
-#line 1113 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 127:
+#line 1123 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-2].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
     }
-#line 5421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5488 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 127:
-#line 1118 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 128:
+#line 1128 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5498 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 128:
-#line 1123 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 129:
+#line 1133 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-3].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5508 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 129:
-#line 1132 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 130:
+#line 1142 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -5452,11 +5519,11 @@
         }
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 5456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5523 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 130:
-#line 1142 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 131:
+#line 1152 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
@@ -5481,22 +5548,22 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5552 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 131:
-#line 1169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 132:
+#line 1179 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
         parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.invariant = true;
     }
-#line 5496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5563 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 132:
-#line 1178 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 133:
+#line 1188 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -5504,11 +5571,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5575 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 133:
-#line 1185 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 134:
+#line 1195 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -5516,11 +5583,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 5520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5587 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 134:
-#line 1193 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 135:
+#line 1203 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
@@ -5528,11 +5595,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 5532 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5599 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 135:
-#line 1200 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 136:
+#line 1210 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
@@ -5540,11 +5607,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.explicitInterp = true;
     }
-#line 5544 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5611 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 136:
-#line 1207 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 137:
+#line 1217 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
@@ -5553,11 +5620,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.pervertexNV = true;
     }
-#line 5557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5624 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 137:
-#line 1215 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 138:
+#line 1225 "glslang.y" /* yacc.c:1646  */
     {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
@@ -5568,11 +5635,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perPrimitiveNV = true;
     }
-#line 5572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5639 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 138:
-#line 1225 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 139:
+#line 1235 "glslang.y" /* yacc.c:1646  */
     {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
@@ -5580,11 +5647,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perViewNV = true;
     }
-#line 5584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5651 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 139:
-#line 1232 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 140:
+#line 1242 "glslang.y" /* yacc.c:1646  */
     {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
@@ -5592,84 +5659,84 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perTaskNV = true;
     }
-#line 5596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 140:
-#line 1243 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
-    }
-#line 5604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5663 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 1249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1253 "glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 5612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5671 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 142:
-#line 1252 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1259 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5679 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 143:
+#line 1262 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-2].interm.type);
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5622 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5689 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 143:
-#line 1259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 144:
+#line 1269 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 5631 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5698 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 144:
-#line 1263 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 145:
+#line 1273 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[-2].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5707 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 145:
-#line 1267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 146:
+#line 1277 "glslang.y" /* yacc.c:1646  */
     { // because "shared" is both an identifier and a keyword
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         TString strShared("shared");
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
     }
-#line 5650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5717 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 146:
-#line 1276 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 147:
+#line 1286 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.noContraction = true;
     }
-#line 5661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 147:
-#line 1286 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5728 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1296 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5736 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 149:
+#line 1299 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -5678,112 +5745,112 @@
         (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 5682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 149:
-#line 1300 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5749 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 150:
-#line 1303 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1310 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5757 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 151:
-#line 1306 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1313 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5765 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 152:
+#line 1316 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 152:
-#line 1310 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5774 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 153:
-#line 1314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1320 "glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5725 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5783 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 154:
-#line 1319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1324 "glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5792 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 155:
-#line 1323 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1329 "glslang.y" /* yacc.c:1646  */
     {
+        // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5801 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 1330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1333 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5809 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 157:
+#line 1340 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
     }
-#line 5751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5818 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 1334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 158:
+#line 1344 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 5761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5828 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 1339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 159:
+#line 1349 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "in");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqIn;
     }
-#line 5772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5839 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 1345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 160:
+#line 1355 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "out");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqOut;
     }
-#line 5783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5850 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 1351 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 161:
+#line 1361 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
@@ -5791,21 +5858,21 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 5795 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5862 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 1358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 162:
+#line 1368 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 5805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5872 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 1364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 163:
+#line 1373 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
@@ -5814,21 +5881,21 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 5818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5885 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 163:
-#line 1372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 164:
+#line 1381 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 5828 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5895 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 1377 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 165:
+#line 1387 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -5841,11 +5908,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5845 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5912 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 165:
-#line 1389 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 166:
+#line 1399 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -5860,250 +5927,324 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5931 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 1403 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 167:
+#line 1413 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.patch = true;
     }
-#line 5875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5942 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 1409 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 168:
+#line 1419 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 5885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 168:
-#line 1414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectNVMask | EShLangClosestHitNVMask
-            | EShLangAnyHitNVMask), "hitAttributeNV");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
-        (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqHitAttrNV;
-    }
-#line 5898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5952 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 169:
-#line 1422 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1424 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenNVMask | EShLangClosestHitNVMask |
-            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadNV");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
+        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
+            | EShLangAnyHitMask), "hitAttributeNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqPayloadNV;
+        (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 5911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5965 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 170:
-#line 1430 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1432 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitNVMask |
-            EShLangAnyHitNVMask | EShLangMissNVMask), "rayPayloadInNV");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
+        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
+            | EShLangAnyHitMask), "hitAttributeEXT");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "hitAttributeNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqPayloadInNV;
+        (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 5924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5978 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 171:
-#line 1438 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1440 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenNVMask |
-            EShLangClosestHitNVMask | EShLangMissNVMask | EShLangCallableNVMask), "callableDataNV");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
+        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqCallableDataNV;
+        (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 5937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5991 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 172:
-#line 1446 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1448 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableNVMask), "callableDataInNV");
-        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
+        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadEXT");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
-        (yyval.interm.type).qualifier.storage = EvqCallableDataInNV;
+        (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 5949 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6004 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 173:
-#line 1453 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1456 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqPayloadIn;
+    }
+#line 6017 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 174:
+#line 1464 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
+            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadInEXT");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqPayloadIn;
+    }
+#line 6030 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 175:
+#line 1472 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
+            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqCallableData;
+    }
+#line 6043 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 176:
+#line 1480 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
+            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataEXT");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqCallableData;
+    }
+#line 6056 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 177:
+#line 1488 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
+    }
+#line 6068 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 178:
+#line 1495 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataInEXT");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
+    }
+#line 6080 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 179:
+#line 1502 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 5958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6089 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 1457 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 180:
+#line 1506 "glslang.y" /* yacc.c:1646  */
     {
         (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 5968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6099 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 1462 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 181:
+#line 1511 "glslang.y" /* yacc.c:1646  */
     {
         (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 5978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6109 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 1467 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 182:
+#line 1516 "glslang.y" /* yacc.c:1646  */
     {
         (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 5988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6119 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 1472 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 183:
+#line 1521 "glslang.y" /* yacc.c:1646  */
     {
         (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 5998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6129 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 1477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 184:
+#line 1526 "glslang.y" /* yacc.c:1646  */
     {
         (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 6008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6139 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 1482 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 185:
+#line 1531 "glslang.y" /* yacc.c:1646  */
+    {
+        (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 6149 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 186:
+#line 1536 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 6017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6158 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 1486 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 187:
+#line 1540 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 6026 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6167 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 1490 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 188:
+#line 1544 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 6035 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6176 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 1494 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 189:
+#line 1548 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 6044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6185 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 1498 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 190:
+#line 1552 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
     }
-#line 6055 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6196 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 184:
-#line 1504 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 191:
+#line 1558 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
     }
-#line 6066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6207 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 185:
-#line 1515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 192:
+#line 1569 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nonUniform = true;
     }
-#line 6075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6216 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 186:
-#line 1522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 193:
+#line 1576 "glslang.y" /* yacc.c:1646  */
     {
         // TODO
     }
-#line 6083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6224 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 187:
-#line 1525 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 194:
+#line 1579 "glslang.y" /* yacc.c:1646  */
     {
         // TODO: 4.0 semantics: subroutines
         // 1) make sure each identifier is a type declared earlier with SUBROUTINE
         // 2) save all of the identifiers for future comparison with the declared function
     }
-#line 6093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6234 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 188:
-#line 1534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 195:
+#line 1588 "glslang.y" /* yacc.c:1646  */
     {
         (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 6103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6244 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 189:
-#line 1539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 196:
+#line 1593 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
         (yyval.interm.type) = (yyvsp[-2].interm.type);
@@ -6111,21 +6252,21 @@
         (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters);
         (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
     }
-#line 6115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6256 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 190:
-#line 1549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 197:
+#line 1603 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 6125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6266 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 191:
-#line 1554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 198:
+#line 1608 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -6134,20 +6275,20 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 6138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6279 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 192:
-#line 1562 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 199:
+#line 1616 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 6147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6288 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 193:
-#line 1566 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 200:
+#line 1620 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -6155,35 +6296,35 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 6159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6300 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 194:
-#line 1576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 201:
+#line 1630 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
     }
-#line 6167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6308 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 195:
-#line 1579 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 202:
+#line 1633 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeParameters) = 0;
     }
-#line 6175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6316 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 196:
-#line 1585 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 203:
+#line 1639 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
     }
-#line 6183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6324 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 197:
-#line 1591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 204:
+#line 1645 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeParameters) = new TArraySizes;
 
@@ -6191,11 +6332,11 @@
         parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
         (yyval.interm.typeParameters)->addInnerSize(size);
     }
-#line 6195 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6336 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 198:
-#line 1598 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 205:
+#line 1652 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters);
 
@@ -6203,2927 +6344,2977 @@
         parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
         (yyval.interm.typeParameters)->addInnerSize(size);
     }
-#line 6207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6348 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 199:
-#line 1608 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 206:
+#line 1662 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 6216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6357 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 200:
-#line 1612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 207:
+#line 1666 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 6225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6366 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 201:
-#line 1616 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 208:
+#line 1670 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 6234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6375 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 202:
-#line 1620 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 209:
+#line 1674 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 6244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 203:
-#line 1625 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-    }
-#line 6253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 204:
-#line 1629 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 205:
-#line 1634 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6273 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 206:
-#line 1639 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 207:
-#line 1644 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 208:
-#line 1649 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 209:
-#line 1654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6385 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 210:
-#line 1659 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1679 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(2);
+        (yyval.interm.type).basicType = EbtBool;
     }
-#line 6323 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6394 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 211:
-#line 1664 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1683 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6404 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 212:
+#line 1688 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6414 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 213:
+#line 1693 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6424 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 214:
+#line 1698 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6434 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 215:
+#line 1703 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6444 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 216:
+#line 1708 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6454 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 217:
+#line 1713 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6464 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 218:
+#line 1718 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 6333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6474 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 212:
-#line 1669 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 219:
+#line 1723 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 6343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6484 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 213:
-#line 1674 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 220:
+#line 1728 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 6354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6495 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 214:
-#line 1680 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 221:
+#line 1734 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 6365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6506 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 215:
-#line 1686 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 222:
+#line 1740 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 6376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6517 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 216:
-#line 1692 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 223:
+#line 1746 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6527 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 217:
-#line 1697 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 224:
+#line 1751 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6396 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6537 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 218:
-#line 1702 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 225:
+#line 1756 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6547 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 219:
-#line 1707 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 226:
+#line 1761 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6557 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 220:
-#line 1712 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 227:
+#line 1766 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6567 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 221:
-#line 1717 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 228:
+#line 1771 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6577 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 222:
-#line 1722 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 229:
+#line 1776 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6587 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 223:
-#line 1727 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 230:
+#line 1781 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6597 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 224:
-#line 1732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 231:
+#line 1786 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6607 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 225:
-#line 1737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 232:
+#line 1791 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6476 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6617 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 226:
-#line 1742 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 233:
+#line 1796 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6627 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 227:
-#line 1747 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 234:
+#line 1801 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6637 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 228:
-#line 1753 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 235:
+#line 1807 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 6506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6649 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 229:
-#line 1758 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 236:
+#line 1814 "glslang.y" /* yacc.c:1646  */
     {
         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 6516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6659 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 230:
-#line 1763 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 237:
+#line 1819 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 6526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6669 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 231:
-#line 1768 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 238:
+#line 1824 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 6536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6679 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 232:
-#line 1773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 239:
+#line 1829 "glslang.y" /* yacc.c:1646  */
     {
         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 6546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6689 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 233:
-#line 1778 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 240:
+#line 1834 "glslang.y" /* yacc.c:1646  */
     {
         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 6556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6699 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 234:
-#line 1783 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 241:
+#line 1839 "glslang.y" /* yacc.c:1646  */
     {
         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 6566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6709 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 235:
-#line 1788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 242:
+#line 1844 "glslang.y" /* yacc.c:1646  */
     {
         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 6576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6719 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 236:
-#line 1793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 243:
+#line 1849 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 6586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6729 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 237:
-#line 1798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 244:
+#line 1854 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 6596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6739 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 238:
-#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 245:
+#line 1859 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
     }
-#line 6606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6749 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 239:
-#line 1808 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 246:
+#line 1864 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
     }
-#line 6616 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 240:
-#line 1813 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 241:
-#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 242:
-#line 1825 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 243:
-#line 1831 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 244:
-#line 1837 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 245:
-#line 1843 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 246:
-#line 1849 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6693 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6759 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 247:
-#line 1855 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1869 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat;
-        (yyval.interm.type).setVector(3);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(2);
     }
-#line 6704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6772 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 248:
-#line 1861 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1877 "glslang.y" /* yacc.c:1646  */
+    {
+        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 6785 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 249:
+#line 1885 "glslang.y" /* yacc.c:1646  */
+    {
+        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 6798 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 250:
+#line 1893 "glslang.y" /* yacc.c:1646  */
+    {
+        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 6809 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 251:
+#line 1899 "glslang.y" /* yacc.c:1646  */
+    {
+        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 6820 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 252:
+#line 1905 "glslang.y" /* yacc.c:1646  */
+    {
+        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 6831 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 253:
+#line 1911 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6842 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 254:
+#line 1917 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6853 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 255:
+#line 1923 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 6715 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 249:
-#line 1867 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 250:
-#line 1873 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 251:
-#line 1879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 252:
-#line 1885 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 253:
-#line 1891 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 254:
-#line 1897 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6781 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 255:
-#line 1903 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6864 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 256:
-#line 1909 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1929 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtInt16;
-        (yyval.interm.type).setVector(3);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(2);
     }
-#line 6803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6875 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 257:
-#line 1915 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1935 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6886 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 258:
+#line 1941 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6897 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 259:
+#line 1947 "glslang.y" /* yacc.c:1646  */
+    {
+        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 6908 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 260:
+#line 1953 "glslang.y" /* yacc.c:1646  */
+    {
+        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 6919 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 261:
+#line 1959 "glslang.y" /* yacc.c:1646  */
+    {
+        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 6930 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 262:
+#line 1965 "glslang.y" /* yacc.c:1646  */
+    {
+        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 6941 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 263:
+#line 1971 "glslang.y" /* yacc.c:1646  */
+    {
+        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 6952 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 264:
+#line 1977 "glslang.y" /* yacc.c:1646  */
     {
         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 6814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 258:
-#line 1921 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6825 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 259:
-#line 1927 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 260:
-#line 1933 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 261:
-#line 1939 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 262:
-#line 1945 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 263:
-#line 1951 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 264:
-#line 1957 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6963 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 265:
-#line 1963 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1983 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtUint8;
-        (yyval.interm.type).setVector(3);
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(2);
     }
-#line 6902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6974 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 266:
-#line 1969 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1989 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6985 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 267:
+#line 1995 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6996 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 268:
+#line 2001 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(2);
+    }
+#line 7007 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 269:
+#line 2007 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(3);
+    }
+#line 7018 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 270:
+#line 2013 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(4);
+    }
+#line 7029 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 271:
+#line 2019 "glslang.y" /* yacc.c:1646  */
+    {
+        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 7040 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 272:
+#line 2025 "glslang.y" /* yacc.c:1646  */
+    {
+        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 7051 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 273:
+#line 2031 "glslang.y" /* yacc.c:1646  */
     {
         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 6913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 267:
-#line 1975 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 268:
-#line 1981 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 269:
-#line 1987 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        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 6946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 270:
-#line 1993 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 271:
-#line 1999 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 272:
-#line 2005 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 273:
-#line 2011 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint64;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7062 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 274:
-#line 2017 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2037 "glslang.y" /* yacc.c:1646  */
+    {
+        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 7073 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 275:
+#line 2043 "glslang.y" /* yacc.c:1646  */
+    {
+        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 7084 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 276:
+#line 2049 "glslang.y" /* yacc.c:1646  */
+    {
+        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 7095 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 277:
+#line 2055 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(2);
+    }
+#line 7106 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 278:
+#line 2061 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(3);
+    }
+#line 7117 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 279:
+#line 2067 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(4);
+    }
+#line 7128 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 280:
+#line 2073 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(2);
+    }
+#line 7139 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 281:
+#line 2079 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(3);
     }
-#line 7001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7150 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 2023 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 282:
+#line 2085 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(4);
     }
-#line 7012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 276:
-#line 2029 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 7023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 277:
-#line 2035 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 7034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 278:
-#line 2041 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 7045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 279:
-#line 2047 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 7056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 280:
-#line 2053 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 3);
-    }
-#line 7067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 281:
-#line 2059 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 4);
-    }
-#line 7078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 282:
-#line 2065 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(3, 2);
-    }
-#line 7089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7161 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 283:
-#line 2071 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2091 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        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);
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7174 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 284:
-#line 2077 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2099 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        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, 4);
+        (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7187 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 285:
-#line 2083 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2107 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        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);
+        (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7200 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 286:
-#line 2089 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2115 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        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);
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7213 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 287:
-#line 2095 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2123 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        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);
+        (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7226 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 288:
-#line 2101 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2131 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat16;
-        (yyval.interm.type).setMatrix(2, 2);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7239 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 289:
-#line 2107 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2139 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 3);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7252 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 290:
-#line 2113 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2147 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 4);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7265 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 291:
-#line 2119 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2155 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat16;
-        (yyval.interm.type).setMatrix(2, 2);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7278 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 292:
-#line 2125 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2163 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat16;
-        (yyval.interm.type).setMatrix(2, 3);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7291 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 293:
-#line 2131 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2171 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat16;
-        (yyval.interm.type).setMatrix(2, 4);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7304 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 294:
-#line 2137 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2179 "glslang.y" /* yacc.c:1646  */
     {
-        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        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 = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 2);
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7317 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 295:
-#line 2143 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2187 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 3);
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7328 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 296:
-#line 2149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2193 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(3, 4);
+        (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7339 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 297:
-#line 2155 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2199 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 2);
+        (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7350 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 298:
-#line 2161 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2205 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
-        (yyval.interm.type).setMatrix(4, 3);
+        (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7361 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 299:
-#line 2167 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2211 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 7372 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 300:
+#line 2217 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 7383 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 301:
+#line 2223 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 7394 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 302:
+#line 2229 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 7405 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 303:
+#line 2235 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+#line 7416 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 304:
+#line 2241 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 2);
+    }
+#line 7427 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 305:
+#line 2247 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 3);
+    }
+#line 7438 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 306:
+#line 2253 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 300:
-#line 2173 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 7287 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 301:
-#line 2179 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 7298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 302:
-#line 2185 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 7309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 303:
-#line 2191 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 7320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 304:
-#line 2197 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 3);
-    }
-#line 7331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 305:
-#line 2203 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 4);
-    }
-#line 7342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 306:
-#line 2209 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 2);
-    }
-#line 7353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7449 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 307:
-#line 2215 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2259 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 7460 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 308:
+#line 2265 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7471 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 2221 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 309:
+#line 2271 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 7482 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 310:
+#line 2277 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 7493 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 311:
+#line 2283 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 7504 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 312:
+#line 2289 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 7515 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 313:
+#line 2295 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 7526 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 314:
+#line 2301 "glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 7537 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 315:
+#line 2307 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7548 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 2227 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 316:
+#line 2313 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7559 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 2233 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 317:
+#line 2319 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7570 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 2239 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 318:
+#line 2325 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7581 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 2245 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 319:
+#line 2331 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7592 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 2251 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 320:
+#line 2337 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7603 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 2257 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 321:
+#line 2343 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7614 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 2263 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 322:
+#line 2349 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7452 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7625 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 2269 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 323:
+#line 2355 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7636 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 2275 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 324:
+#line 2361 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7647 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 2281 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 325:
+#line 2367 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7658 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 2287 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 326:
+#line 2373 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7669 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 2293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 327:
+#line 2379 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7680 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 2299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 328:
+#line 2385 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7691 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 2305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 329:
+#line 2391 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7702 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 2311 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 330:
+#line 2397 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7713 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 2317 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 331:
+#line 2403 "glslang.y" /* yacc.c:1646  */
     {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-       (yyval.interm.type).basicType = EbtAccStructNV;
+       (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 7549 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7722 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 2321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 332:
+#line 2407 "glslang.y" /* yacc.c:1646  */
+    {
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtAccStruct;
+    }
+#line 7731 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 333:
+#line 2411 "glslang.y" /* yacc.c:1646  */
+    {
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtRayQuery;
+    }
+#line 7740 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 334:
+#line 2415 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtAtomicUint;
     }
-#line 7559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7750 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 2326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 335:
+#line 2420 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
     }
-#line 7569 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7760 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 2332 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 336:
+#line 2426 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 7579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7770 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 2337 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 337:
+#line 2431 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 7589 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7780 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 2342 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 338:
+#line 2436 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 7599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7790 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 2347 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 339:
+#line 2441 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
     }
-#line 7609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7800 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 2352 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 340:
+#line 2446 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
     }
-#line 7619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7810 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 2358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
-    }
-#line 7629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 333:
-#line 2363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
-    }
-#line 7639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 334:
-#line 2368 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
-    }
-#line 7649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 335:
-#line 2374 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 341:
+#line 2451 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
     }
-#line 7659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7820 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 342:
+#line 2456 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
     }
-#line 7669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7830 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 2384 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 343:
+#line 2462 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
+    }
+#line 7840 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 344:
+#line 2467 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
+    }
+#line 7850 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 345:
+#line 2472 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
+    }
+#line 7860 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 346:
+#line 2477 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
     }
-#line 7679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7870 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 2389 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 347:
+#line 2482 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
     }
-#line 7689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7880 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 2395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 348:
+#line 2487 "glslang.y" /* yacc.c:1646  */
     {
         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 7700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7891 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 340:
-#line 2401 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 349:
+#line 2493 "glslang.y" /* yacc.c:1646  */
     {
         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 7711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7902 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 341:
-#line 2407 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 350:
+#line 2499 "glslang.y" /* yacc.c:1646  */
     {
         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 7722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7913 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 342:
-#line 2413 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 351:
+#line 2505 "glslang.y" /* yacc.c:1646  */
     {
         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 7733 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7924 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 343:
-#line 2419 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 352:
+#line 2511 "glslang.y" /* yacc.c:1646  */
     {
         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 7744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7935 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 344:
-#line 2425 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 353:
+#line 2517 "glslang.y" /* yacc.c:1646  */
     {
         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 7755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7946 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 345:
-#line 2431 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 354:
+#line 2523 "glslang.y" /* yacc.c:1646  */
     {
         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 7766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7957 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 346:
-#line 2437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 355:
+#line 2529 "glslang.y" /* yacc.c:1646  */
     {
         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 7777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7968 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 347:
-#line 2443 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 356:
+#line 2535 "glslang.y" /* yacc.c:1646  */
     {
         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 7788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7979 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 348:
-#line 2449 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 357:
+#line 2541 "glslang.y" /* yacc.c:1646  */
     {
         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 7799 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7990 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 349:
-#line 2455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 358:
+#line 2547 "glslang.y" /* yacc.c:1646  */
     {
         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 7810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8001 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 350:
-#line 2461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 359:
+#line 2553 "glslang.y" /* yacc.c:1646  */
     {
         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 7821 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8012 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 351:
-#line 2467 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 360:
+#line 2559 "glslang.y" /* yacc.c:1646  */
     {
         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 7832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8023 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 352:
-#line 2473 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 361:
+#line 2565 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 7842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8033 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 353:
-#line 2479 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 362:
+#line 2571 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 7852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8043 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 354:
-#line 2484 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 363:
+#line 2576 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 7862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8053 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 355:
-#line 2489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 364:
+#line 2581 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 7872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8063 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 356:
-#line 2495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
-    }
-#line 7882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 357:
-#line 2501 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 365:
+#line 2586 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
     }
-#line 7892 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8073 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 358:
-#line 2506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
-    }
-#line 7902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 359:
-#line 2512 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, Esd1D);
-    }
-#line 7912 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 360:
-#line 2518 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 366:
+#line 2591 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 7922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8083 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 361:
-#line 2523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 367:
+#line 2596 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 7932 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8093 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 362:
-#line 2528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 368:
+#line 2601 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 7942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8103 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 363:
-#line 2534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 369:
+#line 2607 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
+    }
+#line 8113 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 370:
+#line 2612 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
+    }
+#line 8123 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 371:
+#line 2617 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtUint, Esd1D);
+    }
+#line 8133 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 372:
+#line 2622 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
     }
-#line 7952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8143 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 364:
-#line 2540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
-    }
-#line 7962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 365:
-#line 2545 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 373:
+#line 2627 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
     }
-#line 7972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8153 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 366:
-#line 2551 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 374:
+#line 2632 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
+    }
+#line 8163 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 375:
+#line 2637 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
+    }
+#line 8173 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 376:
+#line 2642 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
+    }
+#line 8183 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 377:
+#line 2648 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
+    }
+#line 8193 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 378:
+#line 2653 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
+    }
+#line 8203 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 379:
+#line 2658 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
+    }
+#line 8213 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 380:
+#line 2663 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
+    }
+#line 8223 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 381:
+#line 2668 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
+    }
+#line 8233 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 382:
+#line 2673 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
+    }
+#line 8243 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 383:
+#line 2678 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
+    }
+#line 8253 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 384:
+#line 2683 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
+    }
+#line 8263 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 385:
+#line 2688 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
+    }
+#line 8273 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 386:
+#line 2693 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
+    }
+#line 8283 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 387:
+#line 2698 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
+    }
+#line 8293 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 388:
+#line 2703 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
+    }
+#line 8303 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 389:
+#line 2708 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
+    }
+#line 8313 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 390:
+#line 2713 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setPureSampler(false);
+    }
+#line 8323 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 391:
+#line 2718 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setPureSampler(true);
+    }
+#line 8333 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 392:
+#line 2724 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
     }
-#line 7982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8343 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 367:
-#line 2556 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 393:
+#line 2729 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
     }
-#line 7992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8353 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 368:
-#line 2561 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 394:
+#line 2734 "glslang.y" /* yacc.c:1646  */
     {
         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 8003 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8364 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 369:
-#line 2567 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 395:
+#line 2740 "glslang.y" /* yacc.c:1646  */
     {
         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 8014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8375 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 370:
-#line 2573 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 396:
+#line 2746 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdRect);
     }
-#line 8024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8385 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 371:
-#line 2578 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 397:
+#line 2751 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdRect);
     }
-#line 8034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8395 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 372:
-#line 2583 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 398:
+#line 2756 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
     }
-#line 8044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8405 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 373:
-#line 2588 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 399:
+#line 2761 "glslang.y" /* yacc.c:1646  */
     {
         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 8055 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8416 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 374:
-#line 2594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 400:
+#line 2767 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
     }
-#line 8065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8426 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 375:
-#line 2599 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 401:
+#line 2772 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
     }
-#line 8075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8436 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 376:
-#line 2604 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 402:
+#line 2777 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
     }
-#line 8085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8446 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 377:
-#line 2609 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 403:
+#line 2782 "glslang.y" /* yacc.c:1646  */
     {
         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 8096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8457 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 378:
-#line 2615 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 404:
+#line 2788 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
     }
-#line 8106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8467 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 379:
-#line 2620 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 405:
+#line 2793 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
     }
-#line 8116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8477 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 380:
-#line 2625 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 406:
+#line 2798 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
     }
-#line 8126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8487 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 381:
-#line 2630 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 407:
+#line 2803 "glslang.y" /* yacc.c:1646  */
     {
         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 8137 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8498 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 382:
-#line 2636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 408:
+#line 2809 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
     }
-#line 8147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8508 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 383:
-#line 2641 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 409:
+#line 2814 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
     }
-#line 8157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8518 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 384:
-#line 2646 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setPureSampler(false);
-    }
-#line 8167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 385:
-#line 2651 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setPureSampler(true);
-    }
-#line 8177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 386:
-#line 2656 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 410:
+#line 2819 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
     }
-#line 8187 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8528 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 387:
-#line 2661 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 411:
+#line 2824 "glslang.y" /* yacc.c:1646  */
     {
         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 8198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8539 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 388:
-#line 2667 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
-    }
-#line 8208 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 389:
-#line 2672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 412:
+#line 2830 "glslang.y" /* yacc.c:1646  */
     {
         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 8219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8550 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 390:
-#line 2678 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
-    }
-#line 8229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 391:
-#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 413:
+#line 2836 "glslang.y" /* yacc.c:1646  */
     {
         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 8240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8561 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 392:
-#line 2689 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
-    }
-#line 8250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 393:
-#line 2694 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 414:
+#line 2842 "glslang.y" /* yacc.c:1646  */
     {
         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 8261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8572 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 394:
-#line 2700 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 415:
+#line 2848 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
     }
-#line 8271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8582 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 395:
-#line 2705 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 416:
+#line 2853 "glslang.y" /* yacc.c:1646  */
     {
         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 8282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8593 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 396:
-#line 2711 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
-    }
-#line 8292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 397:
-#line 2716 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 417:
+#line 2859 "glslang.y" /* yacc.c:1646  */
     {
         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 8303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8604 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 398:
-#line 2722 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
-    }
-#line 8313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 399:
-#line 2727 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 418:
+#line 2865 "glslang.y" /* yacc.c:1646  */
     {
         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 8324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8615 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 400:
-#line 2733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 419:
+#line 2871 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
     }
-#line 8334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8625 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 401:
-#line 2738 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
-    }
-#line 8344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 402:
-#line 2743 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
-    }
-#line 8354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 403:
-#line 2748 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
-    }
-#line 8364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 404:
-#line 2753 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 420:
+#line 2876 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
     }
-#line 8374 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8635 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 405:
-#line 2758 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
-    }
-#line 8384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 406:
-#line 2763 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
-    }
-#line 8394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 407:
-#line 2768 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 421:
+#line 2881 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
     }
-#line 8404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8645 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 408:
-#line 2773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
-    }
-#line 8414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 409:
-#line 2778 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
-    }
-#line 8424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 410:
-#line 2783 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
-    }
-#line 8434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 411:
-#line 2788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 422:
+#line 2886 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
     }
-#line 8444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8655 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 412:
-#line 2793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
-    }
-#line 8454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 413:
-#line 2798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
-    }
-#line 8464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 414:
-#line 2803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 423:
+#line 2891 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
     }
-#line 8474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8665 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 415:
-#line 2808 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 424:
+#line 2896 "glslang.y" /* yacc.c:1646  */
     {
         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 8485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8676 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 416:
-#line 2814 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 425:
+#line 2902 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
     }
-#line 8495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8686 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 417:
-#line 2819 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 426:
+#line 2907 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
     }
-#line 8505 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8696 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 418:
-#line 2824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 427:
+#line 2912 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
     }
-#line 8515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8706 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 419:
-#line 2829 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 428:
+#line 2917 "glslang.y" /* yacc.c:1646  */
     {
         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 8526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8717 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 420:
-#line 2835 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 429:
+#line 2923 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
     }
-#line 8536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8727 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 421:
-#line 2840 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 430:
+#line 2928 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
     }
-#line 8546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8737 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 422:
-#line 2845 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 431:
+#line 2933 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
-#line 8556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8747 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 423:
-#line 2850 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 432:
+#line 2938 "glslang.y" /* yacc.c:1646  */
     {
         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 8567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8758 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 424:
-#line 2856 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 433:
+#line 2944 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
     }
-#line 8577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8768 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 425:
-#line 2861 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 434:
+#line 2949 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
     }
-#line 8587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8778 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 426:
-#line 2866 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 435:
+#line 2954 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
-#line 8597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8788 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 427:
-#line 2871 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 436:
+#line 2959 "glslang.y" /* yacc.c:1646  */
     {
         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 8608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8799 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 428:
-#line 2877 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 437:
+#line 2965 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
     }
-#line 8618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8809 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 429:
-#line 2882 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 438:
+#line 2970 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
     }
-#line 8628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8819 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 430:
-#line 2887 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 439:
+#line 2975 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
     }
-#line 8638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8829 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 431:
-#line 2892 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 440:
+#line 2980 "glslang.y" /* yacc.c:1646  */
     {
         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 8649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8840 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 432:
-#line 2898 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 441:
+#line 2986 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
     }
-#line 8659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8850 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 433:
-#line 2903 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 442:
+#line 2991 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
     }
-#line 8669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8860 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 434:
-#line 2908 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 443:
+#line 2996 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
     }
-#line 8679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8870 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 435:
-#line 2913 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 444:
+#line 3001 "glslang.y" /* yacc.c:1646  */
     {
         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 8690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8881 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 436:
-#line 2919 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 445:
+#line 3007 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
     }
-#line 8700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8891 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 437:
-#line 2924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 446:
+#line 3012 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
     }
-#line 8710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8901 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 438:
-#line 2929 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 447:
+#line 3017 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
     }
-#line 8720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8911 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 439:
-#line 2934 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 448:
+#line 3022 "glslang.y" /* yacc.c:1646  */
     {
         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 8731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8922 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 440:
-#line 2940 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 449:
+#line 3028 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
     }
-#line 8741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8932 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 441:
-#line 2945 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 450:
+#line 3033 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
     }
-#line 8751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8942 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 442:
-#line 2950 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 451:
+#line 3038 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
     }
-#line 8761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8952 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 443:
-#line 2955 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 452:
+#line 3043 "glslang.y" /* yacc.c:1646  */
     {
         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 8772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8963 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 444:
-#line 2961 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 453:
+#line 3049 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
     }
-#line 8782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8973 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 445:
-#line 2966 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 454:
+#line 3054 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
     }
-#line 8792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8983 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 446:
-#line 2971 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 455:
+#line 3059 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
     }
-#line 8802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 8993 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 447:
-#line 2976 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 456:
+#line 3064 "glslang.y" /* yacc.c:1646  */
     {
         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 8813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9004 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 448:
-#line 2982 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 457:
+#line 3070 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
     }
-#line 8823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9014 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 449:
-#line 2987 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 458:
+#line 3075 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
     }
-#line 8833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9024 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 450:
-#line 2992 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 459:
+#line 3080 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
     }
-#line 8843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9034 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 451:
-#line 2997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 460:
+#line 3085 "glslang.y" /* yacc.c:1646  */
     {
         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 8854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9045 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 452:
-#line 3003 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 461:
+#line 3091 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
     }
-#line 8864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9055 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 453:
-#line 3008 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 462:
+#line 3096 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
     }
-#line 8874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9065 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 454:
-#line 3013 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 463:
+#line 3101 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
     }
-#line 8884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9075 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 455:
-#line 3018 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 464:
+#line 3106 "glslang.y" /* yacc.c:1646  */
     {
         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 8895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9086 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 456:
-#line 3024 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 465:
+#line 3112 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
     }
-#line 8905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9096 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 457:
-#line 3029 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 466:
+#line 3117 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
     }
-#line 8915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9106 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 458:
-#line 3034 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 467:
+#line 3122 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
     }
-#line 8925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9116 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 459:
-#line 3039 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 468:
+#line 3127 "glslang.y" /* yacc.c:1646  */
     {
         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 8936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9127 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 460:
-#line 3045 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 469:
+#line 3133 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
     }
-#line 8946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9137 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 461:
-#line 3050 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 470:
+#line 3138 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
     }
-#line 8956 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9147 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 462:
-#line 3055 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 471:
+#line 3143 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
     }
-#line 8966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9157 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 463:
-#line 3060 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 472:
+#line 3148 "glslang.y" /* yacc.c:1646  */
     {
         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 8977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9168 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 464:
-#line 3066 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 473:
+#line 3154 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
     }
-#line 8987 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9178 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 465:
-#line 3071 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 474:
+#line 3159 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
     }
-#line 8997 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9188 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 466:
-#line 3076 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 475:
+#line 3164 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
-#line 9007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9198 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 467:
-#line 3081 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 476:
+#line 3169 "glslang.y" /* yacc.c:1646  */
     {
         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 9018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9209 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 468:
-#line 3087 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 477:
+#line 3175 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
     }
-#line 9028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9219 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 469:
-#line 3092 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 478:
+#line 3180 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
     }
-#line 9038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9229 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 470:
-#line 3097 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 479:
+#line 3185 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
-#line 9048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9239 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 471:
-#line 3102 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 480:
+#line 3190 "glslang.y" /* yacc.c:1646  */
     {
         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 9059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9250 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 472:
-#line 3108 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 481:
+#line 3196 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
     }
-#line 9069 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9260 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 473:
-#line 3113 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 482:
+#line 3201 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
-#line 9079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9270 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 474:
-#line 3118 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 483:
+#line 3206 "glslang.y" /* yacc.c:1646  */
     {  // GL_OES_EGL_image_external
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
         (yyval.interm.type).sampler.external = true;
     }
-#line 9090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9281 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 475:
-#line 3124 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 484:
+#line 3212 "glslang.y" /* yacc.c:1646  */
     { // 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 9101 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9292 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 476:
-#line 3130 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 485:
+#line 3218 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat);
     }
-#line 9112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9303 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 477:
-#line 3136 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 486:
+#line 3224 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
     }
-#line 9123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9314 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 478:
-#line 3142 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 487:
+#line 3230 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
@@ -9131,11 +9322,11 @@
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16);
     }
-#line 9135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9326 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 479:
-#line 3149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 488:
+#line 3237 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
@@ -9143,98 +9334,98 @@
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
     }
-#line 9147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9338 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 480:
-#line 3156 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 489:
+#line 3244 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt);
     }
-#line 9158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9349 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 481:
-#line 3162 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 490:
+#line 3250 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt, true);
     }
-#line 9169 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9360 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 482:
-#line 3168 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 491:
+#line 3256 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint);
     }
-#line 9180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9371 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 483:
-#line 3174 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 492:
+#line 3262 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint, true);
     }
-#line 9191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9382 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 484:
-#line 3180 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 493:
+#line 3268 "glslang.y" /* yacc.c:1646  */
     {
         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 9202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9393 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 485:
-#line 3186 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 494:
+#line 3274 "glslang.y" /* yacc.c:1646  */
     {
         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 9213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9404 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 486:
-#line 3192 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 495:
+#line 3280 "glslang.y" /* yacc.c:1646  */
     {
         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 9224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9415 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 487:
-#line 3199 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 496:
+#line 3287 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
     }
-#line 9234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9425 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 488:
-#line 3204 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 497:
+#line 3292 "glslang.y" /* yacc.c:1646  */
     {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -9248,47 +9439,47 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 9252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9443 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 489:
-#line 3220 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 498:
+#line 3308 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
     }
-#line 9262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9453 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 490:
-#line 3225 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 499:
+#line 3313 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
     }
-#line 9272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9463 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 491:
-#line 3230 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 500:
+#line 3318 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
     }
-#line 9282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9473 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 492:
-#line 3238 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 501:
+#line 3326 "glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 9288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9479 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 493:
-#line 3238 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 502:
+#line 3326 "glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
         parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
@@ -9300,17 +9491,17 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 9304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9495 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 494:
-#line 3249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 503:
+#line 3337 "glslang.y" /* yacc.c:1646  */
     { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 9310 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9501 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 495:
-#line 3249 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 504:
+#line 3337 "glslang.y" /* yacc.c:1646  */
     {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -9318,19 +9509,19 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 9322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9513 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 496:
-#line 3259 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 505:
+#line 3347 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 9330 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9521 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 497:
-#line 3262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 506:
+#line 3350 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
         for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
@@ -9341,11 +9532,11 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 9345 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9536 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 498:
-#line 3275 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 507:
+#line 3363 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -9368,11 +9559,11 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9563 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 499:
-#line 3297 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 508:
+#line 3385 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -9397,38 +9588,38 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 9401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9592 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 500:
-#line 3324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 509:
+#line 3412 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9601 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 501:
-#line 3328 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 510:
+#line 3416 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 9418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9609 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 502:
-#line 3334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 511:
+#line 3422 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.typeLine).type = new TType(EbtVoid);
         (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
     }
-#line 9428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9619 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 503:
-#line 3339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 512:
+#line 3427 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
@@ -9437,235 +9628,235 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 9441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9632 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 504:
-#line 3350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 513:
+#line 3438 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9640 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 505:
-#line 3354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 514:
+#line 3442 "glslang.y" /* yacc.c:1646  */
     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
     }
-#line 9460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9651 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 506:
-#line 3360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 515:
+#line 3448 "glslang.y" /* yacc.c:1646  */
     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 9471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 507:
-#line 3371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
-    }
-#line 9479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 508:
-#line 3374 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
-    }
-#line 9487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 509:
-#line 3381 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 510:
-#line 3385 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9499 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 511:
-#line 3386 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9505 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 512:
-#line 3392 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 513:
-#line 3393 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 514:
-#line 3394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 515:
-#line 3395 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9662 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 516:
-#line 3396 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3459 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
+    }
+#line 9670 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 517:
-#line 3397 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 3462 "glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
+    }
+#line 9678 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 518:
-#line 3398 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3469 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9684 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 519:
-#line 3400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3473 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9690 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 520:
-#line 3406 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 3474 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9696 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 521:
+#line 3480 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9702 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 522:
+#line 3481 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9708 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 523:
+#line 3482 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9714 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 524:
+#line 3483 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9720 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 525:
+#line 3484 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9726 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 526:
+#line 3485 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9732 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 527:
+#line 3486 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9738 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 528:
+#line 3488 "glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+#line 9744 "glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 529:
+#line 3494 "glslang.y" /* yacc.c:1646  */
     {
         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 9563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9754 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 521:
-#line 3415 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 530:
+#line 3503 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 9569 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9760 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 522:
-#line 3416 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 531:
+#line 3504 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 9578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9769 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 523:
-#line 3420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 532:
+#line 3508 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 9587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9778 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 524:
-#line 3424 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 533:
+#line 3512 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
             (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
     }
-#line 9597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9788 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 525:
-#line 3432 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 534:
+#line 3520 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9794 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 526:
-#line 3433 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 535:
+#line 3521 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 9609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9800 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 527:
-#line 3437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 536:
+#line 3525 "glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9808 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 528:
-#line 3440 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 537:
+#line 3528 "glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9817 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 529:
-#line 3444 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 538:
+#line 3532 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9827 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 530:
-#line 3449 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 539:
+#line 3537 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9838 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 531:
-#line 3458 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 540:
+#line 3546 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 9655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9846 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 532:
-#line 3461 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 541:
+#line 3549 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
             (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
     }
-#line 9665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9856 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 533:
-#line 3469 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 542:
+#line 3557 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
@@ -9674,11 +9865,11 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 9678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9869 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 534:
-#line 3477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 543:
+#line 3565 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
                                             (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
@@ -9687,76 +9878,76 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 9691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9882 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 535:
-#line 3488 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 544:
+#line 3576 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = 0; }
-#line 9697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9888 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 536:
-#line 3489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 545:
+#line 3577 "glslang.y" /* yacc.c:1646  */
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 9703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9894 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 537:
-#line 3493 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 546:
+#line 3581 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9902 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 538:
-#line 3497 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 547:
+#line 3585 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9911 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 539:
-#line 3504 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 548:
+#line 3592 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
         (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
     }
-#line 9729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9920 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 540:
-#line 3511 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 549:
+#line 3599 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 9738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9929 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 541:
-#line 3515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 550:
+#line 3603 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 9747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9938 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 542:
-#line 3523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 551:
+#line 3611 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 9756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9947 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 543:
-#line 3527 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 552:
+#line 3615 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -9767,28 +9958,28 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 9771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9962 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 544:
-#line 3540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 553:
+#line 3628 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9970 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 545:
-#line 3544 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 554:
+#line 3632 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9979 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 546:
-#line 3551 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 555:
+#line 3639 "glslang.y" /* yacc.c:1646  */
     {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -9797,11 +9988,11 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 9801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 9992 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 547:
-#line 3559 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 556:
+#line 3647 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
         delete parseContext.switchSequenceStack.back();
@@ -9811,27 +10002,27 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10006 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 548:
-#line 3571 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 557:
+#line 3659 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
     }
-#line 9823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10014 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 549:
-#line 3574 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 558:
+#line 3662 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10022 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 550:
-#line 3580 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 559:
+#line 3668 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -9844,11 +10035,11 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 9848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10039 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 551:
-#line 3592 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 560:
+#line 3680 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -9858,28 +10049,28 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 9862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10053 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 552:
-#line 3604 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 561:
+#line 3692 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10061 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 553:
-#line 3608 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 562:
+#line 3696 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9879 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10070 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 554:
-#line 3615 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 563:
+#line 3703 "glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -9888,11 +10079,11 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9892 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10083 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 555:
-#line 3623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 564:
+#line 3711 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
@@ -9900,21 +10091,21 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10095 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 556:
-#line 3630 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 565:
+#line 3718 "glslang.y" /* yacc.c:1646  */
     {
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10105 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 557:
-#line 3635 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 566:
+#line 3723 "glslang.y" /* yacc.c:1646  */
     {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -9926,22 +10117,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10121 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 558:
-#line 3646 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 567:
+#line 3734 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 9941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10132 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 559:
-#line 3652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 568:
+#line 3740 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -9954,81 +10145,81 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 9958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10149 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 560:
-#line 3667 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 569:
+#line 3755 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10157 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 561:
-#line 3670 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 570:
+#line 3758 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 9974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10165 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 562:
-#line 3676 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 571:
+#line 3764 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 9982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10173 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 563:
-#line 3679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 572:
+#line 3767 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 9990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10181 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 564:
-#line 3685 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 573:
+#line 3773 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 9999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10190 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 565:
-#line 3689 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 574:
+#line 3777 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 10008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10199 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 566:
-#line 3696 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 575:
+#line 3784 "glslang.y" /* yacc.c:1646  */
     {
         if (parseContext.loopNestingLevel <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
     }
-#line 10018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10209 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 567:
-#line 3701 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 576:
+#line 3789 "glslang.y" /* yacc.c:1646  */
     {
         if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
     }
-#line 10028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10219 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 568:
-#line 3706 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 577:
+#line 3794 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -10036,83 +10227,83 @@
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 10040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10231 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 569:
-#line 3713 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 578:
+#line 3801 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 10048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10239 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 570:
-#line 3716 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 579:
+#line 3804 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 10057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10248 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 571:
-#line 3725 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 580:
+#line 3813 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 10066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10257 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 572:
-#line 3729 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 581:
+#line 3817 "glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[0].interm.intermNode) != nullptr) {
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
             parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
         }
     }
-#line 10077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10268 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 573:
-#line 3738 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 582:
+#line 3826 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10276 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 574:
-#line 3741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 583:
+#line 3829 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 10093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10284 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 575:
-#line 3745 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 584:
+#line 3833 "glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
         parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
         (yyval.interm.intermNode) = nullptr;
     }
-#line 10103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10294 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 576:
-#line 3754 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 585:
+#line 3842 "glslang.y" /* yacc.c:1646  */
     {
         (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
         (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
     }
-#line 10112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10303 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 577:
-#line 3758 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 586:
+#line 3846 "glslang.y" /* yacc.c:1646  */
     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -10128,52 +10319,52 @@
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 10132 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10323 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 578:
-#line 3777 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 587:
+#line 3865 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
         parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute");
     }
-#line 10141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10332 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 579:
-#line 3783 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 588:
+#line 3871 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 10149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10340 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 580:
-#line 3786 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 589:
+#line 3874 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 10157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10348 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 581:
-#line 3791 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 590:
+#line 3879 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 10165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10356 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 582:
-#line 3794 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 591:
+#line 3882 "glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 10173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10364 "glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 10177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 10368 "glslang_tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -10401,5 +10592,6 @@
 #endif
   return yyresult;
 }
-#line 3799 "MachineIndependent/glslang.y" /* yacc.c:1906  */
+#line 3887 "glslang.y" /* yacc.c:1906  */
+
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index f3f0251..31c8f90 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -30,8 +30,8 @@
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
-#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
-# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
+#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
+# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
@@ -89,370 +89,379 @@
     USAMPLER3D = 299,
     USAMPLERCUBE = 300,
     USAMPLER2DARRAY = 301,
-    SAMPLERCUBEARRAY = 302,
-    SAMPLERCUBEARRAYSHADOW = 303,
-    ISAMPLERCUBEARRAY = 304,
-    USAMPLERCUBEARRAY = 305,
-    ATTRIBUTE = 306,
-    VARYING = 307,
-    FLOAT16_T = 308,
-    FLOAT32_T = 309,
-    DOUBLE = 310,
-    FLOAT64_T = 311,
-    INT64_T = 312,
-    UINT64_T = 313,
-    INT32_T = 314,
-    UINT32_T = 315,
-    INT16_T = 316,
-    UINT16_T = 317,
-    INT8_T = 318,
-    UINT8_T = 319,
-    I64VEC2 = 320,
-    I64VEC3 = 321,
-    I64VEC4 = 322,
-    U64VEC2 = 323,
-    U64VEC3 = 324,
-    U64VEC4 = 325,
-    I32VEC2 = 326,
-    I32VEC3 = 327,
-    I32VEC4 = 328,
-    U32VEC2 = 329,
-    U32VEC3 = 330,
-    U32VEC4 = 331,
-    I16VEC2 = 332,
-    I16VEC3 = 333,
-    I16VEC4 = 334,
-    U16VEC2 = 335,
-    U16VEC3 = 336,
-    U16VEC4 = 337,
-    I8VEC2 = 338,
-    I8VEC3 = 339,
-    I8VEC4 = 340,
-    U8VEC2 = 341,
-    U8VEC3 = 342,
-    U8VEC4 = 343,
-    DVEC2 = 344,
-    DVEC3 = 345,
-    DVEC4 = 346,
-    DMAT2 = 347,
-    DMAT3 = 348,
-    DMAT4 = 349,
-    F16VEC2 = 350,
-    F16VEC3 = 351,
-    F16VEC4 = 352,
-    F16MAT2 = 353,
-    F16MAT3 = 354,
-    F16MAT4 = 355,
-    F32VEC2 = 356,
-    F32VEC3 = 357,
-    F32VEC4 = 358,
-    F32MAT2 = 359,
-    F32MAT3 = 360,
-    F32MAT4 = 361,
-    F64VEC2 = 362,
-    F64VEC3 = 363,
-    F64VEC4 = 364,
-    F64MAT2 = 365,
-    F64MAT3 = 366,
-    F64MAT4 = 367,
-    DMAT2X2 = 368,
-    DMAT2X3 = 369,
-    DMAT2X4 = 370,
-    DMAT3X2 = 371,
-    DMAT3X3 = 372,
-    DMAT3X4 = 373,
-    DMAT4X2 = 374,
-    DMAT4X3 = 375,
-    DMAT4X4 = 376,
-    F16MAT2X2 = 377,
-    F16MAT2X3 = 378,
-    F16MAT2X4 = 379,
-    F16MAT3X2 = 380,
-    F16MAT3X3 = 381,
-    F16MAT3X4 = 382,
-    F16MAT4X2 = 383,
-    F16MAT4X3 = 384,
-    F16MAT4X4 = 385,
-    F32MAT2X2 = 386,
-    F32MAT2X3 = 387,
-    F32MAT2X4 = 388,
-    F32MAT3X2 = 389,
-    F32MAT3X3 = 390,
-    F32MAT3X4 = 391,
-    F32MAT4X2 = 392,
-    F32MAT4X3 = 393,
-    F32MAT4X4 = 394,
-    F64MAT2X2 = 395,
-    F64MAT2X3 = 396,
-    F64MAT2X4 = 397,
-    F64MAT3X2 = 398,
-    F64MAT3X3 = 399,
-    F64MAT3X4 = 400,
-    F64MAT4X2 = 401,
-    F64MAT4X3 = 402,
-    F64MAT4X4 = 403,
-    ATOMIC_UINT = 404,
-    ACCSTRUCTNV = 405,
-    FCOOPMATNV = 406,
-    ICOOPMATNV = 407,
-    UCOOPMATNV = 408,
-    SAMPLER1D = 409,
-    SAMPLER1DARRAY = 410,
-    SAMPLER1DARRAYSHADOW = 411,
-    ISAMPLER1D = 412,
-    SAMPLER1DSHADOW = 413,
-    SAMPLER2DRECT = 414,
-    SAMPLER2DRECTSHADOW = 415,
-    ISAMPLER2DRECT = 416,
-    USAMPLER2DRECT = 417,
-    SAMPLERBUFFER = 418,
-    ISAMPLERBUFFER = 419,
-    USAMPLERBUFFER = 420,
-    SAMPLER2DMS = 421,
-    ISAMPLER2DMS = 422,
-    USAMPLER2DMS = 423,
-    SAMPLER2DMSARRAY = 424,
-    ISAMPLER2DMSARRAY = 425,
-    USAMPLER2DMSARRAY = 426,
-    SAMPLEREXTERNALOES = 427,
-    SAMPLEREXTERNAL2DY2YEXT = 428,
-    ISAMPLER1DARRAY = 429,
-    USAMPLER1D = 430,
-    USAMPLER1DARRAY = 431,
-    F16SAMPLER1D = 432,
-    F16SAMPLER2D = 433,
-    F16SAMPLER3D = 434,
-    F16SAMPLER2DRECT = 435,
-    F16SAMPLERCUBE = 436,
-    F16SAMPLER1DARRAY = 437,
-    F16SAMPLER2DARRAY = 438,
-    F16SAMPLERCUBEARRAY = 439,
-    F16SAMPLERBUFFER = 440,
-    F16SAMPLER2DMS = 441,
-    F16SAMPLER2DMSARRAY = 442,
-    F16SAMPLER1DSHADOW = 443,
-    F16SAMPLER2DSHADOW = 444,
-    F16SAMPLER1DARRAYSHADOW = 445,
-    F16SAMPLER2DARRAYSHADOW = 446,
-    F16SAMPLER2DRECTSHADOW = 447,
-    F16SAMPLERCUBESHADOW = 448,
-    F16SAMPLERCUBEARRAYSHADOW = 449,
-    IMAGE1D = 450,
-    IIMAGE1D = 451,
-    UIMAGE1D = 452,
-    IMAGE2D = 453,
-    IIMAGE2D = 454,
-    UIMAGE2D = 455,
-    IMAGE3D = 456,
-    IIMAGE3D = 457,
-    UIMAGE3D = 458,
-    IMAGE2DRECT = 459,
-    IIMAGE2DRECT = 460,
-    UIMAGE2DRECT = 461,
-    IMAGECUBE = 462,
-    IIMAGECUBE = 463,
-    UIMAGECUBE = 464,
-    IMAGEBUFFER = 465,
-    IIMAGEBUFFER = 466,
-    UIMAGEBUFFER = 467,
-    IMAGE1DARRAY = 468,
-    IIMAGE1DARRAY = 469,
-    UIMAGE1DARRAY = 470,
-    IMAGE2DARRAY = 471,
-    IIMAGE2DARRAY = 472,
-    UIMAGE2DARRAY = 473,
-    IMAGECUBEARRAY = 474,
-    IIMAGECUBEARRAY = 475,
-    UIMAGECUBEARRAY = 476,
-    IMAGE2DMS = 477,
-    IIMAGE2DMS = 478,
-    UIMAGE2DMS = 479,
-    IMAGE2DMSARRAY = 480,
-    IIMAGE2DMSARRAY = 481,
-    UIMAGE2DMSARRAY = 482,
-    F16IMAGE1D = 483,
-    F16IMAGE2D = 484,
-    F16IMAGE3D = 485,
-    F16IMAGE2DRECT = 486,
-    F16IMAGECUBE = 487,
-    F16IMAGE1DARRAY = 488,
-    F16IMAGE2DARRAY = 489,
-    F16IMAGECUBEARRAY = 490,
-    F16IMAGEBUFFER = 491,
-    F16IMAGE2DMS = 492,
-    F16IMAGE2DMSARRAY = 493,
-    SAMPLER = 494,
-    SAMPLERSHADOW = 495,
-    TEXTURE1D = 496,
-    TEXTURE2D = 497,
-    TEXTURE3D = 498,
-    TEXTURECUBE = 499,
-    TEXTURE1DARRAY = 500,
-    TEXTURE2DARRAY = 501,
-    ITEXTURE1D = 502,
-    ITEXTURE2D = 503,
-    ITEXTURE3D = 504,
-    ITEXTURECUBE = 505,
-    ITEXTURE1DARRAY = 506,
-    ITEXTURE2DARRAY = 507,
-    UTEXTURE1D = 508,
-    UTEXTURE2D = 509,
-    UTEXTURE3D = 510,
-    UTEXTURECUBE = 511,
-    UTEXTURE1DARRAY = 512,
-    UTEXTURE2DARRAY = 513,
-    TEXTURE2DRECT = 514,
-    ITEXTURE2DRECT = 515,
-    UTEXTURE2DRECT = 516,
-    TEXTUREBUFFER = 517,
-    ITEXTUREBUFFER = 518,
-    UTEXTUREBUFFER = 519,
-    TEXTURECUBEARRAY = 520,
-    ITEXTURECUBEARRAY = 521,
-    UTEXTURECUBEARRAY = 522,
-    TEXTURE2DMS = 523,
-    ITEXTURE2DMS = 524,
-    UTEXTURE2DMS = 525,
-    TEXTURE2DMSARRAY = 526,
-    ITEXTURE2DMSARRAY = 527,
-    UTEXTURE2DMSARRAY = 528,
-    F16TEXTURE1D = 529,
-    F16TEXTURE2D = 530,
-    F16TEXTURE3D = 531,
-    F16TEXTURE2DRECT = 532,
-    F16TEXTURECUBE = 533,
-    F16TEXTURE1DARRAY = 534,
-    F16TEXTURE2DARRAY = 535,
-    F16TEXTURECUBEARRAY = 536,
-    F16TEXTUREBUFFER = 537,
-    F16TEXTURE2DMS = 538,
-    F16TEXTURE2DMSARRAY = 539,
-    SUBPASSINPUT = 540,
-    SUBPASSINPUTMS = 541,
-    ISUBPASSINPUT = 542,
-    ISUBPASSINPUTMS = 543,
-    USUBPASSINPUT = 544,
-    USUBPASSINPUTMS = 545,
-    F16SUBPASSINPUT = 546,
-    F16SUBPASSINPUTMS = 547,
-    LEFT_OP = 548,
-    RIGHT_OP = 549,
-    INC_OP = 550,
-    DEC_OP = 551,
-    LE_OP = 552,
-    GE_OP = 553,
-    EQ_OP = 554,
-    NE_OP = 555,
-    AND_OP = 556,
-    OR_OP = 557,
-    XOR_OP = 558,
-    MUL_ASSIGN = 559,
-    DIV_ASSIGN = 560,
-    ADD_ASSIGN = 561,
-    MOD_ASSIGN = 562,
-    LEFT_ASSIGN = 563,
-    RIGHT_ASSIGN = 564,
-    AND_ASSIGN = 565,
-    XOR_ASSIGN = 566,
-    OR_ASSIGN = 567,
-    SUB_ASSIGN = 568,
-    LEFT_PAREN = 569,
-    RIGHT_PAREN = 570,
-    LEFT_BRACKET = 571,
-    RIGHT_BRACKET = 572,
-    LEFT_BRACE = 573,
-    RIGHT_BRACE = 574,
-    DOT = 575,
-    COMMA = 576,
-    COLON = 577,
-    EQUAL = 578,
-    SEMICOLON = 579,
-    BANG = 580,
-    DASH = 581,
-    TILDE = 582,
-    PLUS = 583,
-    STAR = 584,
-    SLASH = 585,
-    PERCENT = 586,
-    LEFT_ANGLE = 587,
-    RIGHT_ANGLE = 588,
-    VERTICAL_BAR = 589,
-    CARET = 590,
-    AMPERSAND = 591,
-    QUESTION = 592,
-    INVARIANT = 593,
-    HIGH_PRECISION = 594,
-    MEDIUM_PRECISION = 595,
-    LOW_PRECISION = 596,
-    PRECISION = 597,
-    PACKED = 598,
-    RESOURCE = 599,
-    SUPERP = 600,
-    FLOATCONSTANT = 601,
-    INTCONSTANT = 602,
-    UINTCONSTANT = 603,
-    BOOLCONSTANT = 604,
-    IDENTIFIER = 605,
-    TYPE_NAME = 606,
-    CENTROID = 607,
-    IN = 608,
-    OUT = 609,
-    INOUT = 610,
-    STRUCT = 611,
-    VOID = 612,
-    WHILE = 613,
-    BREAK = 614,
-    CONTINUE = 615,
-    DO = 616,
-    ELSE = 617,
-    FOR = 618,
-    IF = 619,
-    DISCARD = 620,
-    RETURN = 621,
-    SWITCH = 622,
-    CASE = 623,
-    DEFAULT = 624,
-    UNIFORM = 625,
-    SHARED = 626,
-    FLAT = 627,
-    SMOOTH = 628,
-    LAYOUT = 629,
-    DOUBLECONSTANT = 630,
-    INT16CONSTANT = 631,
-    UINT16CONSTANT = 632,
-    FLOAT16CONSTANT = 633,
-    INT32CONSTANT = 634,
-    UINT32CONSTANT = 635,
-    INT64CONSTANT = 636,
-    UINT64CONSTANT = 637,
-    SUBROUTINE = 638,
-    DEMOTE = 639,
-    PAYLOADNV = 640,
-    PAYLOADINNV = 641,
-    HITATTRNV = 642,
-    CALLDATANV = 643,
-    CALLDATAINNV = 644,
-    PATCH = 645,
-    SAMPLE = 646,
-    BUFFER = 647,
-    NONUNIFORM = 648,
-    COHERENT = 649,
-    VOLATILE = 650,
-    RESTRICT = 651,
-    READONLY = 652,
-    WRITEONLY = 653,
-    DEVICECOHERENT = 654,
-    QUEUEFAMILYCOHERENT = 655,
-    WORKGROUPCOHERENT = 656,
-    SUBGROUPCOHERENT = 657,
-    NONPRIVATE = 658,
-    NOPERSPECTIVE = 659,
-    EXPLICITINTERPAMD = 660,
-    PERVERTEXNV = 661,
-    PERPRIMITIVENV = 662,
-    PERVIEWNV = 663,
-    PERTASKNV = 664,
-    PRECISE = 665
+    SAMPLER = 302,
+    SAMPLERSHADOW = 303,
+    TEXTURE2D = 304,
+    TEXTURE3D = 305,
+    TEXTURECUBE = 306,
+    TEXTURE2DARRAY = 307,
+    ITEXTURE2D = 308,
+    ITEXTURE3D = 309,
+    ITEXTURECUBE = 310,
+    ITEXTURE2DARRAY = 311,
+    UTEXTURE2D = 312,
+    UTEXTURE3D = 313,
+    UTEXTURECUBE = 314,
+    UTEXTURE2DARRAY = 315,
+    ATTRIBUTE = 316,
+    VARYING = 317,
+    FLOAT16_T = 318,
+    FLOAT32_T = 319,
+    DOUBLE = 320,
+    FLOAT64_T = 321,
+    INT64_T = 322,
+    UINT64_T = 323,
+    INT32_T = 324,
+    UINT32_T = 325,
+    INT16_T = 326,
+    UINT16_T = 327,
+    INT8_T = 328,
+    UINT8_T = 329,
+    I64VEC2 = 330,
+    I64VEC3 = 331,
+    I64VEC4 = 332,
+    U64VEC2 = 333,
+    U64VEC3 = 334,
+    U64VEC4 = 335,
+    I32VEC2 = 336,
+    I32VEC3 = 337,
+    I32VEC4 = 338,
+    U32VEC2 = 339,
+    U32VEC3 = 340,
+    U32VEC4 = 341,
+    I16VEC2 = 342,
+    I16VEC3 = 343,
+    I16VEC4 = 344,
+    U16VEC2 = 345,
+    U16VEC3 = 346,
+    U16VEC4 = 347,
+    I8VEC2 = 348,
+    I8VEC3 = 349,
+    I8VEC4 = 350,
+    U8VEC2 = 351,
+    U8VEC3 = 352,
+    U8VEC4 = 353,
+    DVEC2 = 354,
+    DVEC3 = 355,
+    DVEC4 = 356,
+    DMAT2 = 357,
+    DMAT3 = 358,
+    DMAT4 = 359,
+    F16VEC2 = 360,
+    F16VEC3 = 361,
+    F16VEC4 = 362,
+    F16MAT2 = 363,
+    F16MAT3 = 364,
+    F16MAT4 = 365,
+    F32VEC2 = 366,
+    F32VEC3 = 367,
+    F32VEC4 = 368,
+    F32MAT2 = 369,
+    F32MAT3 = 370,
+    F32MAT4 = 371,
+    F64VEC2 = 372,
+    F64VEC3 = 373,
+    F64VEC4 = 374,
+    F64MAT2 = 375,
+    F64MAT3 = 376,
+    F64MAT4 = 377,
+    DMAT2X2 = 378,
+    DMAT2X3 = 379,
+    DMAT2X4 = 380,
+    DMAT3X2 = 381,
+    DMAT3X3 = 382,
+    DMAT3X4 = 383,
+    DMAT4X2 = 384,
+    DMAT4X3 = 385,
+    DMAT4X4 = 386,
+    F16MAT2X2 = 387,
+    F16MAT2X3 = 388,
+    F16MAT2X4 = 389,
+    F16MAT3X2 = 390,
+    F16MAT3X3 = 391,
+    F16MAT3X4 = 392,
+    F16MAT4X2 = 393,
+    F16MAT4X3 = 394,
+    F16MAT4X4 = 395,
+    F32MAT2X2 = 396,
+    F32MAT2X3 = 397,
+    F32MAT2X4 = 398,
+    F32MAT3X2 = 399,
+    F32MAT3X3 = 400,
+    F32MAT3X4 = 401,
+    F32MAT4X2 = 402,
+    F32MAT4X3 = 403,
+    F32MAT4X4 = 404,
+    F64MAT2X2 = 405,
+    F64MAT2X3 = 406,
+    F64MAT2X4 = 407,
+    F64MAT3X2 = 408,
+    F64MAT3X3 = 409,
+    F64MAT3X4 = 410,
+    F64MAT4X2 = 411,
+    F64MAT4X3 = 412,
+    F64MAT4X4 = 413,
+    ATOMIC_UINT = 414,
+    ACCSTRUCTNV = 415,
+    ACCSTRUCTEXT = 416,
+    RAYQUERYEXT = 417,
+    FCOOPMATNV = 418,
+    ICOOPMATNV = 419,
+    UCOOPMATNV = 420,
+    SAMPLERCUBEARRAY = 421,
+    SAMPLERCUBEARRAYSHADOW = 422,
+    ISAMPLERCUBEARRAY = 423,
+    USAMPLERCUBEARRAY = 424,
+    SAMPLER1D = 425,
+    SAMPLER1DARRAY = 426,
+    SAMPLER1DARRAYSHADOW = 427,
+    ISAMPLER1D = 428,
+    SAMPLER1DSHADOW = 429,
+    SAMPLER2DRECT = 430,
+    SAMPLER2DRECTSHADOW = 431,
+    ISAMPLER2DRECT = 432,
+    USAMPLER2DRECT = 433,
+    SAMPLERBUFFER = 434,
+    ISAMPLERBUFFER = 435,
+    USAMPLERBUFFER = 436,
+    SAMPLER2DMS = 437,
+    ISAMPLER2DMS = 438,
+    USAMPLER2DMS = 439,
+    SAMPLER2DMSARRAY = 440,
+    ISAMPLER2DMSARRAY = 441,
+    USAMPLER2DMSARRAY = 442,
+    SAMPLEREXTERNALOES = 443,
+    SAMPLEREXTERNAL2DY2YEXT = 444,
+    ISAMPLER1DARRAY = 445,
+    USAMPLER1D = 446,
+    USAMPLER1DARRAY = 447,
+    F16SAMPLER1D = 448,
+    F16SAMPLER2D = 449,
+    F16SAMPLER3D = 450,
+    F16SAMPLER2DRECT = 451,
+    F16SAMPLERCUBE = 452,
+    F16SAMPLER1DARRAY = 453,
+    F16SAMPLER2DARRAY = 454,
+    F16SAMPLERCUBEARRAY = 455,
+    F16SAMPLERBUFFER = 456,
+    F16SAMPLER2DMS = 457,
+    F16SAMPLER2DMSARRAY = 458,
+    F16SAMPLER1DSHADOW = 459,
+    F16SAMPLER2DSHADOW = 460,
+    F16SAMPLER1DARRAYSHADOW = 461,
+    F16SAMPLER2DARRAYSHADOW = 462,
+    F16SAMPLER2DRECTSHADOW = 463,
+    F16SAMPLERCUBESHADOW = 464,
+    F16SAMPLERCUBEARRAYSHADOW = 465,
+    IMAGE1D = 466,
+    IIMAGE1D = 467,
+    UIMAGE1D = 468,
+    IMAGE2D = 469,
+    IIMAGE2D = 470,
+    UIMAGE2D = 471,
+    IMAGE3D = 472,
+    IIMAGE3D = 473,
+    UIMAGE3D = 474,
+    IMAGE2DRECT = 475,
+    IIMAGE2DRECT = 476,
+    UIMAGE2DRECT = 477,
+    IMAGECUBE = 478,
+    IIMAGECUBE = 479,
+    UIMAGECUBE = 480,
+    IMAGEBUFFER = 481,
+    IIMAGEBUFFER = 482,
+    UIMAGEBUFFER = 483,
+    IMAGE1DARRAY = 484,
+    IIMAGE1DARRAY = 485,
+    UIMAGE1DARRAY = 486,
+    IMAGE2DARRAY = 487,
+    IIMAGE2DARRAY = 488,
+    UIMAGE2DARRAY = 489,
+    IMAGECUBEARRAY = 490,
+    IIMAGECUBEARRAY = 491,
+    UIMAGECUBEARRAY = 492,
+    IMAGE2DMS = 493,
+    IIMAGE2DMS = 494,
+    UIMAGE2DMS = 495,
+    IMAGE2DMSARRAY = 496,
+    IIMAGE2DMSARRAY = 497,
+    UIMAGE2DMSARRAY = 498,
+    F16IMAGE1D = 499,
+    F16IMAGE2D = 500,
+    F16IMAGE3D = 501,
+    F16IMAGE2DRECT = 502,
+    F16IMAGECUBE = 503,
+    F16IMAGE1DARRAY = 504,
+    F16IMAGE2DARRAY = 505,
+    F16IMAGECUBEARRAY = 506,
+    F16IMAGEBUFFER = 507,
+    F16IMAGE2DMS = 508,
+    F16IMAGE2DMSARRAY = 509,
+    TEXTURECUBEARRAY = 510,
+    ITEXTURECUBEARRAY = 511,
+    UTEXTURECUBEARRAY = 512,
+    TEXTURE1D = 513,
+    ITEXTURE1D = 514,
+    UTEXTURE1D = 515,
+    TEXTURE1DARRAY = 516,
+    ITEXTURE1DARRAY = 517,
+    UTEXTURE1DARRAY = 518,
+    TEXTURE2DRECT = 519,
+    ITEXTURE2DRECT = 520,
+    UTEXTURE2DRECT = 521,
+    TEXTUREBUFFER = 522,
+    ITEXTUREBUFFER = 523,
+    UTEXTUREBUFFER = 524,
+    TEXTURE2DMS = 525,
+    ITEXTURE2DMS = 526,
+    UTEXTURE2DMS = 527,
+    TEXTURE2DMSARRAY = 528,
+    ITEXTURE2DMSARRAY = 529,
+    UTEXTURE2DMSARRAY = 530,
+    F16TEXTURE1D = 531,
+    F16TEXTURE2D = 532,
+    F16TEXTURE3D = 533,
+    F16TEXTURE2DRECT = 534,
+    F16TEXTURECUBE = 535,
+    F16TEXTURE1DARRAY = 536,
+    F16TEXTURE2DARRAY = 537,
+    F16TEXTURECUBEARRAY = 538,
+    F16TEXTUREBUFFER = 539,
+    F16TEXTURE2DMS = 540,
+    F16TEXTURE2DMSARRAY = 541,
+    SUBPASSINPUT = 542,
+    SUBPASSINPUTMS = 543,
+    ISUBPASSINPUT = 544,
+    ISUBPASSINPUTMS = 545,
+    USUBPASSINPUT = 546,
+    USUBPASSINPUTMS = 547,
+    F16SUBPASSINPUT = 548,
+    F16SUBPASSINPUTMS = 549,
+    LEFT_OP = 550,
+    RIGHT_OP = 551,
+    INC_OP = 552,
+    DEC_OP = 553,
+    LE_OP = 554,
+    GE_OP = 555,
+    EQ_OP = 556,
+    NE_OP = 557,
+    AND_OP = 558,
+    OR_OP = 559,
+    XOR_OP = 560,
+    MUL_ASSIGN = 561,
+    DIV_ASSIGN = 562,
+    ADD_ASSIGN = 563,
+    MOD_ASSIGN = 564,
+    LEFT_ASSIGN = 565,
+    RIGHT_ASSIGN = 566,
+    AND_ASSIGN = 567,
+    XOR_ASSIGN = 568,
+    OR_ASSIGN = 569,
+    SUB_ASSIGN = 570,
+    STRING_LITERAL = 571,
+    LEFT_PAREN = 572,
+    RIGHT_PAREN = 573,
+    LEFT_BRACKET = 574,
+    RIGHT_BRACKET = 575,
+    LEFT_BRACE = 576,
+    RIGHT_BRACE = 577,
+    DOT = 578,
+    COMMA = 579,
+    COLON = 580,
+    EQUAL = 581,
+    SEMICOLON = 582,
+    BANG = 583,
+    DASH = 584,
+    TILDE = 585,
+    PLUS = 586,
+    STAR = 587,
+    SLASH = 588,
+    PERCENT = 589,
+    LEFT_ANGLE = 590,
+    RIGHT_ANGLE = 591,
+    VERTICAL_BAR = 592,
+    CARET = 593,
+    AMPERSAND = 594,
+    QUESTION = 595,
+    INVARIANT = 596,
+    HIGH_PRECISION = 597,
+    MEDIUM_PRECISION = 598,
+    LOW_PRECISION = 599,
+    PRECISION = 600,
+    PACKED = 601,
+    RESOURCE = 602,
+    SUPERP = 603,
+    FLOATCONSTANT = 604,
+    INTCONSTANT = 605,
+    UINTCONSTANT = 606,
+    BOOLCONSTANT = 607,
+    IDENTIFIER = 608,
+    TYPE_NAME = 609,
+    CENTROID = 610,
+    IN = 611,
+    OUT = 612,
+    INOUT = 613,
+    STRUCT = 614,
+    VOID = 615,
+    WHILE = 616,
+    BREAK = 617,
+    CONTINUE = 618,
+    DO = 619,
+    ELSE = 620,
+    FOR = 621,
+    IF = 622,
+    DISCARD = 623,
+    RETURN = 624,
+    SWITCH = 625,
+    CASE = 626,
+    DEFAULT = 627,
+    UNIFORM = 628,
+    SHARED = 629,
+    BUFFER = 630,
+    FLAT = 631,
+    SMOOTH = 632,
+    LAYOUT = 633,
+    DOUBLECONSTANT = 634,
+    INT16CONSTANT = 635,
+    UINT16CONSTANT = 636,
+    FLOAT16CONSTANT = 637,
+    INT32CONSTANT = 638,
+    UINT32CONSTANT = 639,
+    INT64CONSTANT = 640,
+    UINT64CONSTANT = 641,
+    SUBROUTINE = 642,
+    DEMOTE = 643,
+    PAYLOADNV = 644,
+    PAYLOADINNV = 645,
+    HITATTRNV = 646,
+    CALLDATANV = 647,
+    CALLDATAINNV = 648,
+    PAYLOADEXT = 649,
+    PAYLOADINEXT = 650,
+    HITATTREXT = 651,
+    CALLDATAEXT = 652,
+    CALLDATAINEXT = 653,
+    PATCH = 654,
+    SAMPLE = 655,
+    NONUNIFORM = 656,
+    COHERENT = 657,
+    VOLATILE = 658,
+    RESTRICT = 659,
+    READONLY = 660,
+    WRITEONLY = 661,
+    DEVICECOHERENT = 662,
+    QUEUEFAMILYCOHERENT = 663,
+    WORKGROUPCOHERENT = 664,
+    SUBGROUPCOHERENT = 665,
+    NONPRIVATE = 666,
+    SHADERCALLCOHERENT = 667,
+    NOPERSPECTIVE = 668,
+    EXPLICITINTERPAMD = 669,
+    PERVERTEXNV = 670,
+    PERPRIMITIVENV = 671,
+    PERVIEWNV = 672,
+    PERTASKNV = 673,
+    PRECISE = 674
   };
 #endif
 
@@ -461,7 +470,7 @@
 
 union YYSTYPE
 {
-#line 96 "MachineIndependent/glslang.y" /* yacc.c:1909  */
+#line 97 "glslang.y" /* yacc.c:1909  */
 
     struct {
         glslang::TSourceLoc loc;
@@ -497,7 +506,7 @@
         glslang::TArraySizes* typeParameters;
     } interm;
 
-#line 501 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909  */
+#line 510 "glslang_tab.cpp.h" /* yacc.c:1909  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -509,4 +518,4 @@
 
 int yyparse (glslang::TParseContext* pParseContext);
 
-#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED  */
+#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED  */
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index fbfede0..86edcfe 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -2,6 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
 //
@@ -213,6 +214,13 @@
     case EOpLogicalXor: out.debug << "logical-xor"; break;
     case EOpLogicalAnd: out.debug << "logical-and"; break;
 
+    case EOpAbsDifference:          out.debug << "absoluteDifference";    break;
+    case EOpAddSaturate:            out.debug << "addSaturate";           break;
+    case EOpSubSaturate:            out.debug << "subtractSaturate";      break;
+    case EOpAverage:                out.debug << "average";               break;
+    case EOpAverageRounded:         out.debug << "averageRounded";        break;
+    case EOpMul32x16:               out.debug << "multiply32x16";         break;
+
     default: out.debug << "<unknown op>";
     }
 
@@ -557,6 +565,9 @@
     case EOpFindLSB:                out.debug << "findLSB";               break;
     case EOpFindMSB:                out.debug << "findMSB";               break;
 
+    case EOpCountLeadingZeros:      out.debug << "countLeadingZeros";     break;
+    case EOpCountTrailingZeros:     out.debug << "countTrailingZeros";    break;
+
     case EOpNoise:                  out.debug << "noise";                 break;
 
     case EOpBallot:                 out.debug << "ballot";                break;
@@ -1068,18 +1079,43 @@
     case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
     case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
 
-    case EOpTraceNV:                          out.debug << "traceNV"; break;
-    case EOpReportIntersectionNV:             out.debug << "reportIntersectionNV"; break;
-    case EOpIgnoreIntersectionNV:             out.debug << "ignoreIntersectionNV"; break;
-    case EOpTerminateRayNV:                   out.debug << "terminateRayNV"; break;
-    case EOpExecuteCallableNV:                out.debug << "executeCallableNV"; break;
+    case EOpTrace:                            out.debug << "traceNV"; break;
+    case EOpReportIntersection:               out.debug << "reportIntersectionNV"; break;
+    case EOpIgnoreIntersection:               out.debug << "ignoreIntersectionNV"; break;
+    case EOpTerminateRay:                     out.debug << "terminateRayNV"; break;
+    case EOpExecuteCallable:                  out.debug << "executeCallableNV"; break;
     case EOpWritePackedPrimitiveIndices4x8NV: out.debug << "writePackedPrimitiveIndices4x8NV"; break;
 
+    case EOpRayQueryInitialize:                                            out.debug << "rayQueryInitializeEXT"; break;
+    case EOpRayQueryTerminate:                                             out.debug << "rayQueryTerminateEXT"; break;
+    case EOpRayQueryGenerateIntersection:                                  out.debug << "rayQueryGenerateIntersectionEXT"; break;
+    case EOpRayQueryConfirmIntersection:                                   out.debug << "rayQueryConfirmIntersectionEXT"; break;
+    case EOpRayQueryProceed:                                               out.debug << "rayQueryProceedEXT"; break;
+    case EOpRayQueryGetIntersectionType:                                   out.debug << "rayQueryGetIntersectionTypeEXT"; break;
+    case EOpRayQueryGetRayTMin:                                            out.debug << "rayQueryGetRayTMinEXT"; break;
+    case EOpRayQueryGetRayFlags:                                           out.debug << "rayQueryGetRayFlagsEXT"; break;
+    case EOpRayQueryGetIntersectionT:                                      out.debug << "rayQueryGetIntersectionTEXT"; break;
+    case EOpRayQueryGetIntersectionInstanceCustomIndex:                    out.debug << "rayQueryGetIntersectionInstanceCustomIndexEXT"; break;
+    case EOpRayQueryGetIntersectionInstanceId:                             out.debug << "rayQueryGetIntersectionInstanceIdEXT"; break;
+    case EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset: out.debug << "rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT"; break;
+    case EOpRayQueryGetIntersectionGeometryIndex:                          out.debug << "rayQueryGetIntersectionGeometryIndexEXT"; break;
+    case EOpRayQueryGetIntersectionPrimitiveIndex:                         out.debug << "rayQueryGetIntersectionPrimitiveIndexEXT"; break;
+    case EOpRayQueryGetIntersectionBarycentrics:                           out.debug << "rayQueryGetIntersectionBarycentricsEXT"; break;
+    case EOpRayQueryGetIntersectionFrontFace:                              out.debug << "rayQueryGetIntersectionFrontFaceEXT"; break;
+    case EOpRayQueryGetIntersectionCandidateAABBOpaque:                    out.debug << "rayQueryGetIntersectionCandidateAABBOpaqueEXT"; break;
+    case EOpRayQueryGetIntersectionObjectRayDirection:                     out.debug << "rayQueryGetIntersectionObjectRayDirectionEXT"; break;
+    case EOpRayQueryGetIntersectionObjectRayOrigin:                        out.debug << "rayQueryGetIntersectionObjectRayOriginEXT"; break;
+    case EOpRayQueryGetWorldRayDirection:                                  out.debug << "rayQueryGetWorldRayDirectionEXT"; break;
+    case EOpRayQueryGetWorldRayOrigin:                                     out.debug << "rayQueryGetWorldRayOriginEXT"; break;
+    case EOpRayQueryGetIntersectionObjectToWorld:                          out.debug << "rayQueryGetIntersectionObjectToWorldEXT"; break;
+    case EOpRayQueryGetIntersectionWorldToObject:                          out.debug << "rayQueryGetIntersectionWorldToObjectEXT"; break;
+
     case EOpCooperativeMatrixLoad:  out.debug << "Load cooperative matrix";  break;
     case EOpCooperativeMatrixStore:  out.debug << "Store cooperative matrix";  break;
     case EOpCooperativeMatrixMulAdd: out.debug << "MulAdd cooperative matrices"; break;
 
     case EOpIsHelperInvocation: out.debug << "IsHelperInvocation"; break;
+    case EOpDebugPrintf:  out.debug << "Debug printf";  break;
 
     default: out.debug.message(EPrefixError, "Bad aggregation op");
     }
@@ -1430,7 +1466,7 @@
     infoSink.debug << "Shader version: " << version << "\n";
     if (requestedExtensions.size() > 0) {
         for (auto extIt = requestedExtensions.begin(); extIt != requestedExtensions.end(); ++extIt)
-            infoSink.debug << "Requested " << *extIt << "\n";
+            infoSink.debug << "Requested " << extIt->first << "\n";
     }
 
     if (xfbMode)
@@ -1526,4 +1562,4 @@
 
 } // end namespace glslang
 
-#endif // not GLSLANG_WEB
\ No newline at end of file
+#endif // not GLSLANG_WEB
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index 3262c0a..9dc1da2 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -161,7 +161,7 @@
     }
 
 private:
-    TNotifyUniformAdaptor& operator=(TNotifyUniformAdaptor&);
+    TNotifyUniformAdaptor& operator=(TNotifyUniformAdaptor&) = delete;
 };
 
 struct TNotifyInOutAdaptor
@@ -180,7 +180,7 @@
     }
 
 private:
-    TNotifyInOutAdaptor& operator=(TNotifyInOutAdaptor&);
+    TNotifyInOutAdaptor& operator=(TNotifyInOutAdaptor&) = delete;
 };
 
 struct TResolverUniformAdaptor {
@@ -236,7 +236,7 @@
     bool&           error;
 
 private:
-    TResolverUniformAdaptor& operator=(TResolverUniformAdaptor&);
+    TResolverUniformAdaptor& operator=(TResolverUniformAdaptor&) = delete;
 };
 
 struct TResolverInOutAdaptor {
@@ -283,7 +283,7 @@
     bool&           error;
 
 private:
-    TResolverInOutAdaptor& operator=(TResolverInOutAdaptor&);
+    TResolverInOutAdaptor& operator=(TResolverInOutAdaptor&) = delete;
 };
 
 // The class is used for reserving explicit uniform locations and ubo/ssbo/opaque bindings
@@ -384,7 +384,7 @@
     bool& hadError;
 
 private:
-    TSymbolValidater& operator=(TSymbolValidater&);
+    TSymbolValidater& operator=(TSymbolValidater&) = delete;
 };
 
 struct TSlotCollector {
@@ -398,7 +398,7 @@
     TInfoSink& infoSink;
 
 private:
-    TSlotCollector& operator=(TSlotCollector&);
+    TSlotCollector& operator=(TSlotCollector&) = delete;
 };
 
 TDefaultIoResolverBase::TDefaultIoResolverBase(const TIntermediate& intermediate)
@@ -579,7 +579,10 @@
 
 int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) {
     const TType& type = ent.symbol->getType();
-    const TString& name = ent.symbol->getName();
+    const TString& name = IsAnonymous(ent.symbol->getName()) ?
+                            ent.symbol->getType().getTypeName()
+                            :
+                            ent.symbol->getName();
     if (currentStage != stage) {
         preStage = currentStage;
         currentStage = stage;
@@ -663,7 +666,10 @@
 
 int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) {
     const TType& type = ent.symbol->getType();
-    const TString& name = ent.symbol->getName();
+    const TString& name = IsAnonymous(ent.symbol->getName()) ?
+                            ent.symbol->getType().getTypeName()
+                            :
+                            ent.symbol->getName();
     // kick out of not doing this
     if (! doAutoLocationMapping()) {
         return ent.newLocation = -1;
@@ -734,7 +740,10 @@
 
 int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) {
     const TType& type = ent.symbol->getType();
-    const TString& name = ent.symbol->getName();
+    const TString& name = IsAnonymous(ent.symbol->getName()) ?
+                            ent.symbol->getType().getTypeName()
+                            :
+                            ent.symbol->getName();
     // On OpenGL arrays of opaque types take a seperate binding for each element
     int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1;
     TResourceType resource = getResourceType(type);
@@ -809,7 +818,10 @@
 
 void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) {
     const TType& type = ent.symbol->getType();
-    const TString& name = ent.symbol->getName();
+    const TString& name = IsAnonymous(ent.symbol->getName()) ?
+                            ent.symbol->getType().getTypeName()
+                            :
+                            ent.symbol->getName();
     TStorageQualifier storage = type.getQualifier().storage;
     EShLanguage stage(EShLangCount);
     switch (storage) {
@@ -831,6 +843,7 @@
                 if (iter->second != location) {
                     TString errorMsg = "Invalid location: " + name;
                     infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
+                    hasError = true;
                 }
             }
         }
@@ -856,6 +869,7 @@
                 if (iter->second != location) {
                     TString errorMsg = "Invalid location: " + name;
                     infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
+                    hasError = true;
                 }
             }
         }
@@ -867,7 +881,10 @@
 
 void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) {
     const TType& type = ent.symbol->getType();
-    const TString& name = ent.symbol->getName();
+    const TString& name = IsAnonymous(ent.symbol->getName()) ?
+                            ent.symbol->getType().getTypeName()
+                            :
+                            ent.symbol->getName();
     int resource = getResourceType(type);
     if (type.getQualifier().hasBinding()) {
         TVarSlotMap& varSlotMap = resourceSlotMap[resource];
@@ -884,6 +901,7 @@
             if (iter->second != binding) {
                 TString errorMsg = "Invalid binding: " + name;
                 infoSink.info.message(EPrefixInternalError, errorMsg.c_str());
+                hasError = true;
             }
         }
     }
@@ -1158,7 +1176,7 @@
         resolver = &defaultResolver;
     }
     resolver->addStage(stage);
-    inVarMaps[stage] = new TVarLiveMap, outVarMaps[stage] = new TVarLiveMap(), uniformVarMap[stage] = new TVarLiveMap();
+    inVarMaps[stage] = new TVarLiveMap(); outVarMaps[stage] = new TVarLiveMap(); uniformVarMap[stage] = new TVarLiveMap();
     TVarGatherTraverser iter_binding_all(intermediate, true, *inVarMaps[stage], *outVarMaps[stage],
                                          *uniformVarMap[stage]);
     TVarGatherTraverser iter_binding_live(intermediate, false, *inVarMaps[stage], *outVarMaps[stage],
diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h
index 01afc5a..e91a150 100644
--- a/glslang/MachineIndependent/iomapper.h
+++ b/glslang/MachineIndependent/iomapper.h
@@ -114,7 +114,7 @@
     bool doAutoLocationMapping() const;
     TSlotSet::iterator findSlot(int set, int slot);
     bool checkEmpty(int set, int slot);
-    bool validateInOut(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; };
+    bool validateInOut(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; }
     int reserveSlot(int set, int slot, int size = 1);
     int getFreeSlot(int set, int base, int size = 1);
     int resolveSet(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
@@ -125,10 +125,11 @@
     void addStage(EShLanguage stage) override {
         if (stage < EShLangCount)
             stageMask[stage] = true;
-    };
+    }
     uint32_t computeTypeLocationSize(const TType& type, EShLanguage stage);
 
     TSlotSetMap slots;
+    bool hasError = false;
 
 protected:
     TDefaultIoResolverBase(TDefaultIoResolverBase&);
@@ -191,7 +192,7 @@
     typedef std::map<TString, int> TVarSlotMap;  // <resourceName, location/binding>
     typedef std::map<int, TVarSlotMap> TSlotMap; // <resourceKey, TVarSlotMap>
     TDefaultGlslIoResolver(const TIntermediate& intermediate);
-    bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; };
+    bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; }
     TResourceType getResourceType(const glslang::TType& type) override;
     int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) override;
     int resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
@@ -209,7 +210,7 @@
     int buildStorageKey(EShLanguage stage, TStorageQualifier type) {
         assert(static_cast<uint32_t>(stage) <= 0x0000ffff && static_cast<uint32_t>(type) <= 0x0000ffff);
         return (stage << 16) | type;
-    };
+    }
 
 protected:
     // Use for mark pre stage, to get more interface symbol information.
@@ -237,12 +238,13 @@
 // In the future, if the vc++ compiler can handle such a situation,
 // this part of the code will be removed.
 struct TVarLivePair : std::pair<const TString, TVarEntryInfo> {
-    TVarLivePair(std::pair<const TString, TVarEntryInfo>& _Right) : pair(_Right.first, _Right.second) {}
+    TVarLivePair(const std::pair<const TString, TVarEntryInfo>& _Right) : pair(_Right.first, _Right.second) {}
     TVarLivePair& operator=(const TVarLivePair& _Right) {
         const_cast<TString&>(first) = _Right.first;
         second = _Right.second;
         return (*this);
-    };
+    }
+    TVarLivePair(const TVarLivePair& src) { *this = src; }
 };
 typedef std::vector<TVarLivePair> TVarLiveVector;
 
@@ -253,17 +255,17 @@
     virtual ~TIoMapper() {}
     // grow the reflection stage by stage
     bool virtual addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*);
-    bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; };
+    bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; }
 };
 
 // I/O mapper for OpenGL
 class TGlslIoMapper : public TIoMapper {
 public:
     TGlslIoMapper() {
-        memset(inVarMaps,     0, sizeof(TVarLiveMap*)   * (EShLangCount + 1));
-        memset(outVarMaps,    0, sizeof(TVarLiveMap*)   * (EShLangCount + 1));
-        memset(uniformVarMap, 0, sizeof(TVarLiveMap*)   * (EShLangCount + 1));
-        memset(intermediates, 0, sizeof(TIntermediate*) * (EShLangCount + 1));
+        memset(inVarMaps,     0, sizeof(TVarLiveMap*)   * EShLangCount);
+        memset(outVarMaps,    0, sizeof(TVarLiveMap*)   * EShLangCount);
+        memset(uniformVarMap, 0, sizeof(TVarLiveMap*)   * EShLangCount);
+        memset(intermediates, 0, sizeof(TIntermediate*) * EShLangCount);
     }
     virtual ~TGlslIoMapper() {
         for (size_t stage = 0; stage < EShLangCount; stage++) {
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
old mode 100644
new mode 100755
index 5b920f2..dcb1cc8
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -138,7 +138,11 @@
     MERGE_MAX(spvVersion.openGl);
 
     numErrors += unit.getNumErrors();
-    numPushConstants += unit.numPushConstants;
+    // Only one push_constant is allowed, mergeLinkerObjects() will ensure the push_constant
+    // is the same for all units.
+    if (numPushConstants > 1 || unit.numPushConstants > 1)
+        error(infoSink, "Only one push_constant block is allowed per stage");
+    numPushConstants = std::min(numPushConstants + unit.numPushConstants, 1);
 
     if (unit.invocations != TQualifier::layoutNotSet) {
         if (invocations == TQualifier::layoutNotSet)
@@ -192,12 +196,14 @@
     MERGE_TRUE(pointMode);
 
     for (int i = 0; i < 3; ++i) {
-        if (localSize[i] > 1)
+        if (!localSizeNotDefault[i] && unit.localSizeNotDefault[i]) {
             localSize[i] = unit.localSize[i];
+            localSizeNotDefault[i] = true;
+        }
         else if (localSize[i] != unit.localSize[i])
             error(infoSink, "Contradictory local size");
 
-        if (localSizeSpecId[i] != TQualifier::layoutNotSet)
+        if (localSizeSpecId[i] == TQualifier::layoutNotSet)
             localSizeSpecId[i] = unit.localSizeSpecId[i];
         else if (localSizeSpecId[i] != unit.localSizeSpecId[i])
             error(infoSink, "Contradictory local size specialization ids");
@@ -284,7 +290,7 @@
     }
 
     // Getting this far means we have two existing trees to merge...
-    numShaderRecordNVBlocks += unit.numShaderRecordNVBlocks;
+    numShaderRecordBlocks += unit.numShaderRecordBlocks;
     numTaskNVBlocks += unit.numTaskNVBlocks;
 
     // Get the top-level globals of each unit
@@ -297,10 +303,10 @@
 
     // Map by global name to unique ID to rationalize the same object having
     // differing IDs in different trees.
-    TMap<TString, int> idMap;
+    TIdMaps idMaps;
     int maxId;
-    seedIdMap(idMap, maxId);
-    remapIds(idMap, maxId + 1, unit);
+    seedIdMap(idMaps, maxId);
+    remapIds(idMaps, maxId + 1, unit);
 
     mergeBodies(infoSink, globals, unitGlobals);
     mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects);
@@ -309,27 +315,40 @@
 
 #endif
 
+static const TString& getNameForIdMap(TIntermSymbol* symbol)
+{
+    TShaderInterface si = symbol->getType().getShaderInterface();
+    if (si == EsiNone)
+        return symbol->getName();
+    else
+        return symbol->getType().getTypeName();
+}
+
+
+
 // Traverser that seeds an ID map with all built-ins, and tracks the
 // maximum ID used.
 // (It would be nice to put this in a function, but that causes warnings
 // on having no bodies for the copy-constructor/operator=.)
 class TBuiltInIdTraverser : public TIntermTraverser {
 public:
-    TBuiltInIdTraverser(TMap<TString, int>& idMap) : idMap(idMap), maxId(0) { }
+    TBuiltInIdTraverser(TIdMaps& idMaps) : idMaps(idMaps), maxId(0) { }
     // If it's a built in, add it to the map.
     // Track the max ID.
     virtual void visitSymbol(TIntermSymbol* symbol)
     {
         const TQualifier& qualifier = symbol->getType().getQualifier();
-        if (qualifier.builtIn != EbvNone)
-            idMap[symbol->getName()] = symbol->getId();
+        if (qualifier.builtIn != EbvNone) {
+            TShaderInterface si = symbol->getType().getShaderInterface();
+            idMaps[si][getNameForIdMap(symbol)] = symbol->getId();
+        }
         maxId = std::max(maxId, symbol->getId());
     }
     int getMaxId() const { return maxId; }
 protected:
     TBuiltInIdTraverser(TBuiltInIdTraverser&);
     TBuiltInIdTraverser& operator=(TBuiltInIdTraverser&);
-    TMap<TString, int>& idMap;
+    TIdMaps& idMaps;
     int maxId;
 };
 
@@ -338,31 +357,33 @@
 // on having no bodies for the copy-constructor/operator=.)
 class TUserIdTraverser : public TIntermTraverser {
 public:
-    TUserIdTraverser(TMap<TString, int>& idMap) : idMap(idMap) { }
+    TUserIdTraverser(TIdMaps& idMaps) : idMaps(idMaps) { }
     // If its a non-built-in global, add it to the map.
     virtual void visitSymbol(TIntermSymbol* symbol)
     {
         const TQualifier& qualifier = symbol->getType().getQualifier();
-        if (qualifier.builtIn == EbvNone)
-            idMap[symbol->getName()] = symbol->getId();
+        if (qualifier.builtIn == EbvNone) {
+            TShaderInterface si = symbol->getType().getShaderInterface();
+            idMaps[si][getNameForIdMap(symbol)] = symbol->getId();
+        }
     }
 
 protected:
     TUserIdTraverser(TUserIdTraverser&);
     TUserIdTraverser& operator=(TUserIdTraverser&);
-    TMap<TString, int>& idMap; // over biggest id
+    TIdMaps& idMaps; // over biggest id
 };
 
 // Initialize the the ID map with what we know of 'this' AST.
-void TIntermediate::seedIdMap(TMap<TString, int>& idMap, int& maxId)
+void TIntermediate::seedIdMap(TIdMaps& idMaps, int& maxId)
 {
     // all built-ins everywhere need to align on IDs and contribute to the max ID
-    TBuiltInIdTraverser builtInIdTraverser(idMap);
+    TBuiltInIdTraverser builtInIdTraverser(idMaps);
     treeRoot->traverse(&builtInIdTraverser);
     maxId = builtInIdTraverser.getMaxId();
 
     // user variables in the linker object list need to align on ids
-    TUserIdTraverser userIdTraverser(idMap);
+    TUserIdTraverser userIdTraverser(idMaps);
     findLinkerObjects()->traverse(&userIdTraverser);
 }
 
@@ -371,7 +392,7 @@
 // on having no bodies for the copy-constructor/operator=.)
 class TRemapIdTraverser : public TIntermTraverser {
 public:
-    TRemapIdTraverser(const TMap<TString, int>& idMap, int idShift) : idMap(idMap), idShift(idShift) { }
+    TRemapIdTraverser(const TIdMaps& idMaps, int idShift) : idMaps(idMaps), idShift(idShift) { }
     // Do the mapping:
     //  - if the same symbol, adopt the 'this' ID
     //  - otherwise, ensure a unique ID by shifting to a new space
@@ -380,8 +401,9 @@
         const TQualifier& qualifier = symbol->getType().getQualifier();
         bool remapped = false;
         if (qualifier.isLinkable() || qualifier.builtIn != EbvNone) {
-            auto it = idMap.find(symbol->getName());
-            if (it != idMap.end()) {
+            TShaderInterface si = symbol->getType().getShaderInterface();
+            auto it = idMaps[si].find(getNameForIdMap(symbol));
+            if (it != idMaps[si].end()) {
                 symbol->changeId(it->second);
                 remapped = true;
             }
@@ -392,14 +414,14 @@
 protected:
     TRemapIdTraverser(TRemapIdTraverser&);
     TRemapIdTraverser& operator=(TRemapIdTraverser&);
-    const TMap<TString, int>& idMap;
+    const TIdMaps& idMaps;
     int idShift;
 };
 
-void TIntermediate::remapIds(const TMap<TString, int>& idMap, int idShift, TIntermediate& unit)
+void TIntermediate::remapIds(const TIdMaps& idMaps, int idShift, TIntermediate& unit)
 {
     // Remap all IDs to either share or be unique, as dictated by the idMap and idShift.
-    TRemapIdTraverser idTraverser(idMap, idShift);
+    TRemapIdTraverser idTraverser(idMaps, idShift);
     unit.getTreeRoot()->traverse(&idTraverser);
 }
 
@@ -441,7 +463,19 @@
             TIntermSymbol* symbol = linkerObjects[linkObj]->getAsSymbolNode();
             TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode();
             assert(symbol && unitSymbol);
-            if (symbol->getName() == unitSymbol->getName()) {
+
+            bool isSameSymbol = false;
+            // If they are both blocks in the same shader interface,
+            // match by the block-name, not the identifier name.
+            if (symbol->getType().getBasicType() == EbtBlock && unitSymbol->getType().getBasicType() == EbtBlock) {
+                if (symbol->getType().getShaderInterface() == unitSymbol->getType().getShaderInterface()) {
+                    isSameSymbol = symbol->getType().getTypeName() == unitSymbol->getType().getTypeName();
+                }
+            }
+            else if (symbol->getName() == unitSymbol->getName())
+                isSameSymbol = true;
+
+            if (isSameSymbol) {
                 // filter out copy
                 merge = false;
 
@@ -460,6 +494,9 @@
                 // Check for consistent types/qualification/initializers etc.
                 mergeErrorCheck(infoSink, *symbol, *unitSymbol, false);
             }
+            // If different symbols, verify they arn't push_constant since there can only be one per stage
+            else if (symbol->getQualifier().isPushConstant() && unitSymbol->getQualifier().isPushConstant())
+                error(infoSink, "Only one push_constant block is allowed per stage");
         }
         if (merge)
             linkerObjects.push_back(unitLinkerObjects[unitLinkObj]);
@@ -496,6 +533,7 @@
 //
 void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, bool crossStage)
 {
+#ifndef GLSLANG_WEB
     bool writeTypeComparison = false;
 
     // Types have to match
@@ -517,6 +555,22 @@
         writeTypeComparison = true;
     }
 
+    // Uniform and buffer blocks must either both have an instance name, or
+    // must both be anonymous. The names don't need to match though.
+    if (symbol.getQualifier().isUniformOrBuffer() &&
+        (IsAnonymous(symbol.getName()) != IsAnonymous(unitSymbol.getName()))) {
+        error(infoSink, "Matched Uniform or Storage blocks must all be anonymous,"
+                        " or all be named:");
+        writeTypeComparison = true;
+    }
+
+    if (symbol.getQualifier().storage == unitSymbol.getQualifier().storage &&
+        (IsAnonymous(symbol.getName()) != IsAnonymous(unitSymbol.getName()) ||
+         (!IsAnonymous(symbol.getName()) && symbol.getName() != unitSymbol.getName()))) {
+        warn(infoSink, "Matched shader interfaces are using different instance names.");
+        writeTypeComparison = true;
+    }
+
     // Precision...
     if (symbol.getQualifier().precision != unitSymbol.getQualifier().precision) {
         error(infoSink, "Precision qualifiers must match:");
@@ -546,13 +600,13 @@
         writeTypeComparison = true;
     }
 
-#ifndef GLSLANG_WEB
     // Memory...
     if (symbol.getQualifier().coherent          != unitSymbol.getQualifier().coherent ||
         symbol.getQualifier().devicecoherent    != unitSymbol.getQualifier().devicecoherent ||
         symbol.getQualifier().queuefamilycoherent  != unitSymbol.getQualifier().queuefamilycoherent ||
         symbol.getQualifier().workgroupcoherent != unitSymbol.getQualifier().workgroupcoherent ||
         symbol.getQualifier().subgroupcoherent  != unitSymbol.getQualifier().subgroupcoherent ||
+        symbol.getQualifier().shadercallcoherent!= unitSymbol.getQualifier().shadercallcoherent ||
         symbol.getQualifier().nonprivate        != unitSymbol.getQualifier().nonprivate ||
         symbol.getQualifier().volatil           != unitSymbol.getQualifier().volatil ||
         symbol.getQualifier().restrict          != unitSymbol.getQualifier().restrict ||
@@ -561,7 +615,6 @@
         error(infoSink, "Memory qualifiers must match:");
         writeTypeComparison = true;
     }
-#endif
 
     // Layouts...
     // TODO: 4.4 enhanced layouts: Generalize to include offset/align: current spec
@@ -588,9 +641,14 @@
         }
     }
 
-    if (writeTypeComparison)
-        infoSink.info << "    " << symbol.getName() << ": \"" << symbol.getType().getCompleteString() << "\" versus \"" <<
-                                                             unitSymbol.getType().getCompleteString() << "\"\n";
+    if (writeTypeComparison) {
+        infoSink.info << "    " << symbol.getName() << ": \"" << symbol.getType().getCompleteString() << "\" versus ";
+        if (symbol.getName() != unitSymbol.getName())
+            infoSink.info << unitSymbol.getName() << ": ";
+
+        infoSink.info << "\"" << unitSymbol.getType().getCompleteString() << "\"\n";
+    }
+#endif
 }
 
 //
@@ -719,13 +777,13 @@
         break;
     case EShLangCompute:
         break;
-    case EShLangRayGenNV:
-    case EShLangIntersectNV:
-    case EShLangAnyHitNV:
-    case EShLangClosestHitNV:
-    case EShLangMissNV:
-    case EShLangCallableNV:
-        if (numShaderRecordNVBlocks > 1)
+    case EShLangRayGen:
+    case EShLangIntersect:
+    case EShLangAnyHit:
+    case EShLangClosestHit:
+    case EShLangMiss:
+    case EShLangCallable:
+        if (numShaderRecordBlocks > 1)
             error(infoSink, "Only one shaderRecordNV buffer block is allowed per stage");
         break;
     case EShLangMeshNV:
@@ -1095,7 +1153,7 @@
         }
 
         // combine location and component ranges
-        TIoRange range(locationRange, componentRange, type.getBasicType(), qualifier.hasIndex() ? qualifier.layoutIndex : 0);
+        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)
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 10f9947..996e347 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -147,6 +147,7 @@
     TRange offset;
 };
 
+#ifndef GLSLANG_WEB
 // Things that need to be tracked per xfb buffer.
 struct TXfbBuffer {
     TXfbBuffer() : stride(TQualifier::layoutXfbStrideEnd), implicitStride(0), contains64BitType(false),
@@ -158,9 +159,13 @@
     bool contains32BitType;
     bool contains16BitType;
 };
+#endif
 
 // Track a set of strings describing how the module was processed.
-// Using the form:
+// This includes command line options, transforms, etc., ideally inclusive enough
+// to reproduce the steps used to transform the input source to the output.
+// E.g., see SPIR-V OpModuleProcessed.
+// Each "process" or "transform" uses is expressed in the form:
 //   process arg0 arg1 arg2 ...
 //   process arg0 arg1 arg2 ...
 // where everything is textual, and there can be zero or more arguments
@@ -220,6 +225,15 @@
     LayoutDerivativeGroupLinear,  // derivative_group_linearNV
 };
 
+class TIdMaps {
+public:
+    TMap<TString, int>& operator[](int i) { return maps[i]; }
+    const TMap<TString, int>& operator[](int i) const { return maps[i]; }
+private:
+    TMap<TString, int> maps[EsiCount];
+};
+
+
 //
 // Set of helper functions to help parse and build the tree.
 //
@@ -227,10 +241,6 @@
 public:
     explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) :
         language(l),
-#ifdef ENABLE_HLSL
-        implicitThisName("@this"), implicitCounterName("@count"),
-        source(EShSourceNone),
-#endif
         profile(p), version(v), treeRoot(0),
         numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
         invertY(false),
@@ -239,17 +249,19 @@
         depthReplacing(false)
 #ifndef GLSLANG_WEB
         ,
+        implicitThisName("@this"), implicitCounterName("@count"),
+        source(EShSourceNone),
         useVulkanMemoryModel(false),
         invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet),
         inputPrimitive(ElgNone), outputPrimitive(ElgNone),
         pixelCenterInteger(false), originUpperLeft(false),
         vertexSpacing(EvsNone), vertexOrder(EvoNone), interlockOrdering(EioNone), pointMode(false), earlyFragmentTests(false),
-        postDepthCoverage(false), depthLayout(EldNone), 
+        postDepthCoverage(false), depthLayout(EldNone),
         hlslFunctionality1(false),
         blendEquations(0), xfbMode(false), multiStream(false),
         layoutOverrideCoverage(false),
         geoPassthroughEXT(false),
-        numShaderRecordNVBlocks(0),
+        numShaderRecordBlocks(0),
         computeDerivativeMode(LayoutDerivativeNone),
         primitives(TQualifier::layoutNotSet),
         numTaskNVBlocks(0),
@@ -267,7 +279,6 @@
         uniformLocationBase(0)
 #endif
     {
-#ifndef GLSLANG_WEB
         localSize[0] = 1;
         localSize[1] = 1;
         localSize[2] = 1;
@@ -277,6 +288,7 @@
         localSizeSpecId[0] = TQualifier::layoutNotSet;
         localSizeSpecId[1] = TQualifier::layoutNotSet;
         localSizeSpecId[2] = TQualifier::layoutNotSet;
+#ifndef GLSLANG_WEB
         xfbBuffers.resize(TQualifier::layoutXfbBufferEnd);
         shiftBinding.fill(0);
 #endif
@@ -332,6 +344,9 @@
         case EShTargetVulkan_1_1:
             processes.addProcess("target-env vulkan1.1");
             break;
+        case EShTargetVulkan_1_2:
+            processes.addProcess("target-env vulkan1.2");
+            break;
         default:
             processes.addProcess("target-env vulkanUnknown");
             break;
@@ -341,8 +356,15 @@
     }
     const SpvVersion& getSpv() const { return spvVersion; }
     EShLanguage getStage() const { return language; }
-    void addRequestedExtension(const char* extension) { requestedExtensions.insert(extension); }
-    const std::set<std::string>& getRequestedExtensions() const { return requestedExtensions; }
+    void updateRequestedExtension(const char* extension, TExtensionBehavior behavior) { 
+        if(requestedExtensions.find(extension) != requestedExtensions.end()) {
+            requestedExtensions[extension] = behavior; 
+        } else {
+            requestedExtensions.insert(std::make_pair(extension, behavior)); 
+        }
+    }
+
+    const std::map<std::string, TExtensionBehavior>& getRequestedExtensions() const { return requestedExtensions; }
 
     void setTreeRoot(TIntermNode* r) { treeRoot = r; }
     TIntermNode* getTreeRoot() const { return treeRoot; }
@@ -465,7 +487,23 @@
     bool usingStorageBuffer() const { return useStorageBuffer; }
     void setDepthReplacing() { depthReplacing = true; }
     bool isDepthReplacing() const { return depthReplacing; }
-
+    bool setLocalSize(int dim, int size)
+    {
+        if (localSizeNotDefault[dim])
+            return size == localSize[dim];
+        localSizeNotDefault[dim] = true;
+        localSize[dim] = size;
+        return true;
+    }
+    unsigned int getLocalSize(int dim) const { return localSize[dim]; }
+    bool setLocalSizeSpecId(int dim, int id)
+    {
+        if (localSizeSpecId[dim] != TQualifier::layoutNotSet)
+            return id == localSizeSpecId[dim];
+        localSizeSpecId[dim] = id;
+        return true;
+    }
+    int getLocalSizeSpecId(int dim) const { return localSizeSpecId[dim]; }
 #ifdef GLSLANG_WEB
     void output(TInfoSink&, bool tree) { }
 
@@ -484,7 +522,7 @@
     bool getAutoMapBindings() const { return false; }
     bool getAutoMapLocations() const { return false; }
     int getNumPushConstants() const { return 0; }
-    void addShaderRecordNVCount() { }
+    void addShaderRecordCount() { }
     void addTaskNVCount() { }
     void setUseVulkanMemoryModel() { }
     bool usingVulkanMemoryModel() const { return false; }
@@ -492,6 +530,7 @@
     bool usingVariablePointers() const { return false; }
     unsigned getXfbStride(int buffer) const { return 0; }
     bool hasLayoutDerivativeModeNone() const { return false; }
+    ComputeDerivativeMode getLayoutDerivativeModeNone() const { return LayoutDerivativeNone; }
 #else
     void output(TInfoSink&, bool tree);
 
@@ -563,7 +602,7 @@
             processes.addProcess("flatten-uniform-arrays");
     }
     bool getFlattenUniformArrays() const { return flattenUniformArrays; }
-#endif 
+#endif
     void setNoStorageFormat(bool b)
     {
         useUnknownFormat = b;
@@ -600,7 +639,7 @@
 
     void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { textureSamplerTransformMode = mode; }
     int getNumPushConstants() const { return numPushConstants; }
-    void addShaderRecordNVCount() { ++numShaderRecordNVBlocks; }
+    void addShaderRecordCount() { ++numShaderRecordBlocks; }
     void addTaskNVCount() { ++numTaskNVBlocks; }
 
     bool setInvocations(int i)
@@ -655,24 +694,6 @@
     }
     TInterlockOrdering getInterlockOrdering() const { return interlockOrdering; }
 
-    bool setLocalSize(int dim, int size)
-    {
-        if (localSizeNotDefault[dim])
-            return size == localSize[dim];
-        localSizeNotDefault[dim] = true;
-        localSize[dim] = size;
-        return true;
-    }
-    unsigned int getLocalSize(int dim) const { return localSize[dim]; }
-
-    bool setLocalSizeSpecId(int dim, int id)
-    {
-        if (localSizeSpecId[dim] != TQualifier::layoutNotSet)
-            return id == localSizeSpecId[dim];
-        localSizeSpecId[dim] = id;
-        return true;
-    }
-    int getLocalSizeSpecId(int dim) const { return localSizeSpecId[dim]; }
     void setXfbMode() { xfbMode = true; }
     bool getXfbMode() const { return xfbMode; }
     void setMultiStream() { multiStream = true; }
@@ -757,7 +778,7 @@
 
     void setBinaryDoubleOutput() { binaryDoubleOutput = true; }
     bool getBinaryDoubleOutput() { return binaryDoubleOutput; }
-#endif
+#endif // GLSLANG_WEB
 
 #ifdef ENABLE_HLSL
     void setHlslFunctionality1() { hlslFunctionality1 = true; }
@@ -786,6 +807,9 @@
     void merge(TInfoSink&, TIntermediate&);
     void finalCheck(TInfoSink&, bool keepUncalled);
 
+    bool buildConvertOp(TBasicType dst, TBasicType src, TOperator& convertOp) const;
+    TIntermTyped* createConversion(TBasicType convertTo, TIntermTyped* node) const;
+
     void addIoAccessed(const TString& name) { ioAccessed.insert(name); }
     bool inIoAccessed(const TString& name) const { return ioAccessed.find(name) != ioAccessed.end(); }
 
@@ -854,8 +878,8 @@
     void mergeCallGraphs(TInfoSink&, TIntermediate&);
     void mergeModes(TInfoSink&, TIntermediate&);
     void mergeTrees(TInfoSink&, TIntermediate&);
-    void seedIdMap(TMap<TString, int>& idMap, int& maxId);
-    void remapIds(const TMap<TString, int>& idMap, int idShift, TIntermediate&);
+    void seedIdMap(TIdMaps& idMaps, int& maxId);
+    void remapIds(const TIdMaps& idMaps, int idShift, TIntermediate&);
     void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals);
     void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects);
     void mergeImplicitArraySizes(TType&, const TType&);
@@ -876,7 +900,6 @@
     bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&);
     void performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root);
     bool isConversionAllowed(TOperator op, TIntermTyped* node) const;
-    TIntermTyped* createConversion(TBasicType convertTo, TIntermTyped* node) const;
     std::tuple<TBasicType, TBasicType> getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const;
 
     // JohnK: I think this function should go away.
@@ -886,19 +909,18 @@
 #ifdef GLSLANG_WEB
     bool extensionRequested(const char *extension) const { return false; }
 #else
-    bool extensionRequested(const char *extension) const {return requestedExtensions.find(extension) != requestedExtensions.end();}
+    bool extensionRequested(const char *extension) const {
+        auto it = requestedExtensions.find(extension);
+        if (it != requestedExtensions.end()) {
+            return (it->second == EBhDisable) ? false : true;
+        }
+        return false;
+    }
 #endif
 
     static const char* getResourceName(TResourceType);
 
     const EShLanguage language;  // stage, known at construction time
-#ifdef ENABLE_HLSL
-public:
-    const char* const implicitThisName;
-    const char* const implicitCounterName;
-protected:
-    EShSource source;            // source language, known a bit later
-#endif
     std::string entryPointName;
     std::string entryPointMangledName;
     typedef std::list<TCall> TGraph;
@@ -908,7 +930,7 @@
     int version;                                // source version
     SpvVersion spvVersion;
     TIntermNode* treeRoot;
-    std::set<std::string> requestedExtensions;  // cumulation of all enabled or required extensions; not connected to what subset of the shader used them
+    std::map<std::string, TExtensionBehavior> requestedExtensions;  // cumulation of all enabled or required extensions; not connected to what subset of the shader used them
     TBuiltInResource resources;
     int numEntryPoints;
     int numErrors;
@@ -918,7 +940,15 @@
     bool useStorageBuffer;
     bool nanMinMaxClamp;            // true if desiring min/max/clamp to favor non-NaN over NaN
     bool depthReplacing;
+    int localSize[3];
+    bool localSizeNotDefault[3];
+    int localSizeSpecId[3];
 #ifndef GLSLANG_WEB
+public:
+    const char* const implicitThisName;
+    const char* const implicitCounterName;
+protected:
+    EShSource source;            // source language, known a bit later
     bool useVulkanMemoryModel;
     int invocations;
     int vertices;
@@ -930,9 +960,6 @@
     TVertexOrder vertexOrder;
     TInterlockOrdering interlockOrdering;
     bool pointMode;
-    int localSize[3];
-    bool localSizeNotDefault[3];
-    int localSizeSpecId[3];
     bool earlyFragmentTests;
     bool postDepthCoverage;
     TLayoutDepth depthLayout;
@@ -943,7 +970,7 @@
     bool multiStream;
     bool layoutOverrideCoverage;
     bool geoPassthroughEXT;
-    int numShaderRecordNVBlocks;
+    int numShaderRecordBlocks;
     ComputeDerivativeMode computeDerivativeMode;
     int primitives;
     int numTaskNVBlocks;
diff --git a/glslang/MachineIndependent/parseConst.cpp b/glslang/MachineIndependent/parseConst.cpp
index 1a8e6d9..7c04743 100644
--- a/glslang/MachineIndependent/parseConst.cpp
+++ b/glslang/MachineIndependent/parseConst.cpp
@@ -165,17 +165,27 @@
                     }
                 }
             } else {
-                // matrix from vector
+                // matrix from vector or scalar
                 int count = 0;
                 const int startIndex = index;
                 int nodeComps = node->getType().computeNumComponents();
                 for (int i = startIndex; i < endIndex; i++) {
                     if (i >= instanceSize)
                         return;
-                    if (i == startIndex || (i - startIndex) % (matrixRows + 1) == 0 )
+                    if (nodeComps == 1) {
+                        // If there is a single scalar parameter to a matrix
+                        // constructor, it is used to initialize all the
+                        // components on the matrix's diagonal, with the
+                        // remaining components initialized to 0.0.
+                        if (i == startIndex || (i - startIndex) % (matrixRows + 1) == 0 )
+                            leftUnionArray[i] = rightUnionArray[count];
+                        else
+                            leftUnionArray[i].setDConst(0.0);
+                    } else {
+                        // construct the matrix in column-major order, from
+                        // the components provided, in order
                         leftUnionArray[i] = rightUnionArray[count];
-                    else
-                        leftUnionArray[i].setDConst(0.0);
+                    }
 
                     index++;
 
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
old mode 100755
new mode 100644
index d7ff485..ec39356
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -621,14 +621,25 @@
 {
     const TSourceLoc directiveLoc = ppToken->loc;
     bool startWithLocalSearch = true; // to additionally include the extra "" paths
-    int token = scanToken(ppToken);
+    int token;
 
-    // handle <header-name>-style #include
-    if (token == '<') {
+    // Find the first non-whitespace char after #include
+    int ch = getChar();
+    while (ch == ' ' || ch == '\t') {
+        ch = getChar();
+    }
+    if (ch == '<') {
+        // <header-name> style
         startWithLocalSearch = false;
         token = scanHeaderName(ppToken, '>');
+    } else if (ch == '"') {
+        // "header-name" style
+        token = scanHeaderName(ppToken, '"');
+    } else {
+        // unexpected, get the full token to generate the error
+        ungetChar();
+        token = scanToken(ppToken);
     }
-    // otherwise ppToken already has the header name and it was "header-name" style
 
     if (token != PpAtomConstString) {
         parseContext.ppError(directiveLoc, "must be followed by a header name", "#include", "");
@@ -711,7 +722,9 @@
     const char* sourceName = nullptr; // Optional source file name.
     bool lineErr = false;
     bool fileErr = false;
+    disableEscapeSequences = true;
     token = eval(token, MIN_PRECEDENCE, false, lineRes, lineErr, ppToken);
+    disableEscapeSequences = false;
     if (! lineErr) {
         lineToken = lineRes;
         if (token == '\n')
@@ -754,7 +767,9 @@
 // Handle #error
 int TPpContext::CPPerror(TPpToken* ppToken)
 {
+    disableEscapeSequences = true;
     int token = scanToken(ppToken);
+    disableEscapeSequences = false;
     std::string message;
     TSourceLoc loc = ppToken->loc;
 
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.cpp b/glslang/MachineIndependent/preprocessor/PpContext.cpp
old mode 100755
new mode 100644
index cc003a8..1363ce2
--- a/glslang/MachineIndependent/preprocessor/PpContext.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpContext.cpp
@@ -87,7 +87,8 @@
 TPpContext::TPpContext(TParseContextBase& pc, const std::string& rootFileName, TShader::Includer& inclr) :
     preamble(0), strings(0), previous_token('\n'), parseContext(pc), includer(inclr), inComment(false),
     rootFileName(rootFileName),
-    currentSourceFile(rootFileName)
+    currentSourceFile(rootFileName),
+    disableEscapeSequences(false)
 {
     ifdepth = 0;
     for (elsetracker = 0; elsetracker < maxIfNesting; elsetracker++)
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.h b/glslang/MachineIndependent/preprocessor/PpContext.h
index 8470e17..714b5ea 100644
--- a/glslang/MachineIndependent/preprocessor/PpContext.h
+++ b/glslang/MachineIndependent/preprocessor/PpContext.h
@@ -105,13 +105,13 @@
     }
 
     // Used for comparing macro definitions, so checks what is relevant for that.
-    bool operator==(const TPpToken& right)
+    bool operator==(const TPpToken& right) const
     {
         return space == right.space &&
                ival == right.ival && dval == right.dval && i64val == right.i64val &&
                strncmp(name, right.name, MaxTokenLength) == 0;
     }
-    bool operator!=(const TPpToken& right) { return ! operator==(right); }
+    bool operator!=(const TPpToken& right) const { return ! operator==(right); }
 
     TSourceLoc loc;
     // True if a space (for white space or a removed comment) should also be
@@ -695,6 +695,7 @@
     std::string currentSourceFile;
 
     std::istringstream strtodStream;
+    bool disableEscapeSequences;
 };
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
old mode 100755
new mode 100644
index c293af3..e0f44f8
--- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -1026,12 +1026,80 @@
         case '\'':
             return pp->characterLiteral(ppToken);
         case '"':
-            // TODO: If this gets enhanced to handle escape sequences, or
-            // anything that is different than what #include needs, then
-            // #include needs to use scanHeaderName() for this.
+            // #include uses scanHeaderName() to ignore these escape sequences.
             ch = getch();
             while (ch != '"' && ch != '\n' && ch != EndOfInput) {
                 if (len < MaxTokenLength) {
+                    if (ch == '\\' && !pp->disableEscapeSequences) {
+                        int nextCh = getch();
+                        switch (nextCh) {
+                        case '\'': ch = 0x27; break;
+                        case '"':  ch = 0x22; break;
+                        case '?':  ch = 0x3f; break;
+                        case '\\': ch = 0x5c; break;
+                        case 'a':  ch = 0x07; break;
+                        case 'b':  ch = 0x08; break;
+                        case 'f':  ch = 0x0c; break;
+                        case 'n':  ch = 0x0a; break;
+                        case 'r':  ch = 0x0d; break;
+                        case 't':  ch = 0x09; break;
+                        case 'v':  ch = 0x0b; break;
+                        case 'x': 
+                            // Hex value, arbitrary number of characters. Terminated by the first
+                            // non-hex digit
+                            {
+                                int numDigits = 0;
+                                ch = 0;
+                                while (true) {
+                                    nextCh = getch();
+                                    if (nextCh >= '0' && nextCh <= '9')
+                                        nextCh -= '0';
+                                    else if (nextCh >= 'A' && nextCh <= 'F')
+                                        nextCh -= 'A' - 10;
+                                    else if (nextCh >= 'a' && nextCh <= 'f')
+                                        nextCh -= 'a' - 10;
+                                    else {
+                                        ungetch();
+                                        break;
+                                    }
+                                    numDigits++;
+                                    ch = ch * 0x10 + nextCh;
+                                }
+                                if (numDigits == 0) {
+                                    pp->parseContext.ppError(ppToken->loc, "Expected hex value in escape sequence", "string", "");
+                                }
+                                break;
+                            }
+                        case '0':
+                        case '1':
+                        case '2':
+                        case '3':
+                        case '4':
+                        case '5':
+                        case '6':
+                        case '7':
+                            // Octal value, up to three octal digits
+                            {
+                                int numDigits = 1;
+                                ch = nextCh - '0';
+                                while (numDigits < 3) {
+                                    nextCh = getch();
+                                    if (nextCh >= '0' && nextCh <= '7')
+                                        nextCh -= '0';
+                                    else {
+                                        ungetch();
+                                        break;
+                                    }
+                                    numDigits++;
+                                    ch = ch * 8 + nextCh;
+                                }
+                                break;
+                            }
+                        default:
+                            pp->parseContext.ppError(ppToken->loc, "Invalid escape sequence", "string", "");
+                            break;
+                        }
+                    }
                     ppToken->name[len] = (char)ch;
                     len++;
                     ch = getch();
@@ -1120,10 +1188,12 @@
                 continue;
             break;
         case PpAtomConstString:
+            // HLSL allows string literals.
+            // GLSL allows string literals with GL_EXT_debug_printf.
             if (ifdepth == 0 && parseContext.intermediate.getSource() != EShSourceHlsl) {
-                // HLSL allows string literals.
-                parseContext.ppError(ppToken.loc, "string literals not supported", "\"\"", "");
-                continue;
+                parseContext.requireExtensions(ppToken.loc, 1, &E_GL_EXT_debug_printf, "string literal");
+                if (!parseContext.extensionTurnedOn(E_GL_EXT_debug_printf))
+                    continue;
             }
             break;
         case '\'':
diff --git a/glslang/MachineIndependent/propagateNoContraction.cpp b/glslang/MachineIndependent/propagateNoContraction.cpp
index 83a3230..9def592 100644
--- a/glslang/MachineIndependent/propagateNoContraction.cpp
+++ b/glslang/MachineIndependent/propagateNoContraction.cpp
@@ -867,4 +867,4 @@
 }
 };
 
-#endif // GLSLANG_WEB
\ No newline at end of file
+#endif // GLSLANG_WEB
diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp
index 9f1089d..2876933 100644
--- a/glslang/MachineIndependent/reflection.cpp
+++ b/glslang/MachineIndependent/reflection.cpp
@@ -137,7 +137,7 @@
                 if (it == ioMapper.end()) {
                     // seperate pipe i/o params from uniforms and blocks
                     // in is only for input in first stage as out is only for last stage. check traverse in call stack.
-                    ioMapper[name.c_str()] = ioItems.size();
+                    ioMapper[name.c_str()] = static_cast<int>(ioItems.size());
                     ioItems.push_back(
                         TObjectReflection(name.c_str(), type, 0, mapToGlType(type), mapToGlArraySize(type), 0));
                     EShLanguageMask& stages = ioItems.back().stages;
@@ -1188,7 +1188,7 @@
 
         for (int dim=0; dim<3; ++dim)
             if (getLocalSize(dim) > 1)
-                printf("Local size %s: %d\n", axis[dim], getLocalSize(dim));
+                printf("Local size %s: %u\n", axis[dim], getLocalSize(dim));
 
         printf("\n");
     }
diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h
index efdc893..0c33de4 100644
--- a/glslang/MachineIndependent/reflection.h
+++ b/glslang/MachineIndependent/reflection.h
@@ -220,4 +220,4 @@
 
 #endif // _REFLECTION_INCLUDED
 
-#endif // GLSLANG_WEB
\ No newline at end of file
+#endif // GLSLANG_WEB
diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt
index e652f45..9994314 100644
--- a/glslang/OSDependent/Unix/CMakeLists.txt
+++ b/glslang/OSDependent/Unix/CMakeLists.txt
@@ -20,6 +20,7 @@
 endif()
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OSDependent
+    install(TARGETS OSDependent EXPORT OSDependentTargets
             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	install(EXPORT OSDependentTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/glslang/OSDependent/Web/CMakeLists.txt b/glslang/OSDependent/Web/CMakeLists.txt
index e8238c3..697b0b7 100644
--- a/glslang/OSDependent/Web/CMakeLists.txt
+++ b/glslang/OSDependent/Web/CMakeLists.txt
@@ -1,24 +1,38 @@
-add_executable(glslang.js "glslang.js.cpp")
-glslang_set_link_args(glslang.js)
-target_link_libraries(glslang.js glslang SPIRV)
-if(EMSCRIPTEN)
-    set_target_properties(glslang.js PROPERTIES
-        OUTPUT_NAME "glslang"
-        SUFFIX ".js")
-    em_link_pre_js(glslang.js "${CMAKE_CURRENT_SOURCE_DIR}/glslang.pre.js")
+if(ENABLE_GLSLANG_JS)
+    add_executable(glslang.js "glslang.js.cpp")
+    glslang_set_link_args(glslang.js)
+    target_link_libraries(glslang.js glslang SPIRV)
 
-    target_link_options(glslang.js PRIVATE
-        "SHELL:--bind -s MODULARIZE=1")
-    if(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
-        target_link_options(glslang.js PRIVATE
-            "SHELL:-s ENVIRONMENT=node -s BINARYEN_ASYNC_COMPILATION=0")
-    else()
-        target_link_options(glslang.js PRIVATE
-            "SHELL:-s ENVIRONMENT=web,worker")
-    endif()
+    # Link library names that start with "-" are treated as link flags.
+    # "-Os" should be OK in MSVC; don't use /Os because CMake won't
+    # treat it as a link flag.
+    target_link_libraries(glslang.js "-Os")
 
-    if(NOT ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
-        add_custom_command(TARGET glslang.js POST_BUILD
-            COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js >> ${CMAKE_CURRENT_BINARY_DIR}/glslang.js)
-    endif()
-endif(EMSCRIPTEN)
+    if(EMSCRIPTEN)
+        set_target_properties(glslang.js PROPERTIES
+            OUTPUT_NAME "glslang"
+            SUFFIX ".js")
+        em_link_pre_js(glslang.js "${CMAKE_CURRENT_SOURCE_DIR}/glslang.pre.js")
+
+        target_link_libraries(glslang.js "--llvm-lto 1")
+        target_link_libraries(glslang.js "--closure 1")
+        target_link_libraries(glslang.js "-s MODULARIZE=1")
+        target_link_libraries(glslang.js "-s ALLOW_MEMORY_GROWTH=1")
+        target_link_libraries(glslang.js "-s FILESYSTEM=0")
+
+        if(ENABLE_EMSCRIPTEN_SINGLE_FILE)
+            target_link_libraries(glslang.js "-s SINGLE_FILE=1")
+        endif(ENABLE_EMSCRIPTEN_SINGLE_FILE)
+
+        if(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
+            target_link_libraries(glslang.js "-s ENVIRONMENT=node -s BINARYEN_ASYNC_COMPILATION=0")
+        else()
+            target_link_libraries(glslang.js "-s ENVIRONMENT=web,worker")
+        endif()
+
+        if(NOT ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
+            add_custom_command(TARGET glslang.js POST_BUILD
+                COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js >> ${CMAKE_CURRENT_BINARY_DIR}/glslang.js)
+        endif()
+    endif(EMSCRIPTEN)
+endif(ENABLE_GLSLANG_JS)
diff --git a/glslang/OSDependent/Web/glslang.js.cpp b/glslang/OSDependent/Web/glslang.js.cpp
index 6cb93fe..f2306a6 100644
--- a/glslang/OSDependent/Web/glslang.js.cpp
+++ b/glslang/OSDependent/Web/glslang.js.cpp
@@ -141,6 +141,7 @@
     /* .maxTaskWorkGroupSizeY_NV = */ 1,
     /* .maxTaskWorkGroupSizeZ_NV = */ 1,
     /* .maxMeshViewCountNV = */ 4,
+    /* .maxDualSourceDrawBuffersEXT = */ 1,
 
     /* .limits = */ {
         /* .nonInductiveForLoops = */ 1,
@@ -176,7 +177,12 @@
  * If null, the compilation failed.
  */
 EMSCRIPTEN_KEEPALIVE
-void* convert_glsl_to_spirv(const char* glsl, int stage_int, bool gen_debug, uint32_t** spirv, size_t* spirv_len)
+void* convert_glsl_to_spirv(const char* glsl,
+                            int stage_int,
+                            bool gen_debug,
+                            glslang::EShTargetLanguageVersion spirv_version,
+                            uint32_t** spirv,
+                            size_t* spirv_len)
 {
     if (glsl == nullptr) {
         fprintf(stderr, "Input pointer null\n");
@@ -194,6 +200,18 @@
         return nullptr;
     }
     EShLanguage stage = static_cast<EShLanguage>(stage_int);
+    switch (spirv_version) {
+        case glslang::EShTargetSpv_1_0:
+        case glslang::EShTargetSpv_1_1:
+        case glslang::EShTargetSpv_1_2:
+        case glslang::EShTargetSpv_1_3:
+        case glslang::EShTargetSpv_1_4:
+        case glslang::EShTargetSpv_1_5:
+            break;
+        default:
+            fprintf(stderr, "Invalid SPIR-V version number\n");
+            return nullptr;
+    }
 
     if (!initialized) {
         glslang::InitializeProcess();
@@ -203,8 +221,8 @@
     glslang::TShader shader(stage);
     shader.setStrings(&glsl, 1);
     shader.setEnvInput(glslang::EShSourceGlsl, stage, glslang::EShClientVulkan, 100);
-    shader.setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_1);
-    shader.setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_3);
+    shader.setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_0);
+    shader.setEnvTarget(glslang::EShTargetSpv, spirv_version);
     if (!shader.parse(&DefaultTBuiltInResource, 100, true, EShMsgDefault)) {
         fprintf(stderr, "Parse failed\n");
         fprintf(stderr, "%s\n", shader.getInfoLog());
@@ -260,7 +278,7 @@
     uint32_t* output;
     size_t output_len;
 
-    void* id = convert_glsl_to_spirv(input, 4, false, &output, &output_len);
+    void* id = convert_glsl_to_spirv(input, 4, false, glslang::EShTargetSpv_1_0, &output, &output_len);
     assert(output != nullptr);
     assert(output_len != 0);
     destroy_output_buffer(id);
diff --git a/glslang/OSDependent/Web/glslang.pre.js b/glslang/OSDependent/Web/glslang.pre.js
index dd7100b..46a5695 100644
--- a/glslang/OSDependent/Web/glslang.pre.js
+++ b/glslang/OSDependent/Web/glslang.pre.js
@@ -1,23 +1,34 @@
-Module['compileGLSLZeroCopy'] = function(glsl, shader_stage, gen_debug) {
+Module['compileGLSLZeroCopy'] = function(glsl, shader_stage, gen_debug, spirv_version) {
     gen_debug = !!gen_debug;
 
-    var shader_stage_int;
-    if (shader_stage === 'vertex') {
-        shader_stage_int = 0;
-    } else if (shader_stage === 'fragment') {
-        shader_stage_int = 4;
-    } else if (shader_stage === 'compute') {
-        shader_stage_int = 5;
-    } else {
-        throw new Error("shader_stage must be 'vertex', 'fragment', or 'compute'");
+    var shader_stage_int; // EShLanguage
+    switch (shader_stage) {
+        case 'vertex':   shader_stage_int = 0; break;
+        case 'fragment': shader_stage_int = 4; break;
+        case 'compute':  shader_stage_int = 5; break;
+        default:
+            throw new Error("shader_stage must be 'vertex', 'fragment', or 'compute'.");
+    }
+
+    spirv_version = spirv_version || '1.0';
+    var spirv_version_int; // EShTargetLanguageVersion
+    switch (spirv_version) {
+        case '1.0': spirv_version_int = (1 << 16) | (0 << 8); break;
+        case '1.1': spirv_version_int = (1 << 16) | (1 << 8); break;
+        case '1.2': spirv_version_int = (1 << 16) | (2 << 8); break;
+        case '1.3': spirv_version_int = (1 << 16) | (3 << 8); break;
+        case '1.4': spirv_version_int = (1 << 16) | (4 << 8); break;
+        case '1.5': spirv_version_int = (1 << 16) | (5 << 8); break;
+        default:
+            throw new Error("spirv_version must be '1.0' ~ '1.5'.");
     }
 
     var p_output = Module['_malloc'](4);
     var p_output_len = Module['_malloc'](4);
     var id = ccall('convert_glsl_to_spirv',
         'number',
-        ['string', 'number', 'boolean', 'number', 'number'],
-        [glsl, shader_stage_int, gen_debug, p_output, p_output_len]);
+        ['string', 'number', 'boolean', 'number', 'number', 'number'],
+        [glsl, shader_stage_int, gen_debug, spirv_version_int, p_output, p_output_len]);
     var output = getValue(p_output, 'i32');
     var output_len = getValue(p_output_len, 'i32');
     Module['_free'](p_output);
@@ -29,17 +40,17 @@
 
     var ret = {};
     var outputIndexU32 = output / 4;
-    ret.data = Module['HEAPU32'].subarray(outputIndexU32, outputIndexU32 + output_len);
-    ret.free = function() {
+    ret['data'] = Module['HEAPU32'].subarray(outputIndexU32, outputIndexU32 + output_len);
+    ret['free'] = function() {
         Module['_destroy_output_buffer'](id);
     };
 
     return ret;
 };
 
-Module['compileGLSL'] = function(glsl, shader_stage, gen_debug) {
-    var compiled = Module['compileGLSLZeroCopy'](glsl, shader_stage, gen_debug);
-    var ret = compiled.data.slice()
-    compiled.free();
+Module['compileGLSL'] = function(glsl, shader_stage, gen_debug, spirv_version) {
+    var compiled = Module['compileGLSLZeroCopy'](glsl, shader_stage, gen_debug, spirv_version);
+    var ret = compiled['data'].slice()
+    compiled['free']();
     return ret;
 };
diff --git a/glslang/OSDependent/Windows/CMakeLists.txt b/glslang/OSDependent/Windows/CMakeLists.txt
index f257418..c050ef6 100644
--- a/glslang/OSDependent/Windows/CMakeLists.txt
+++ b/glslang/OSDependent/Windows/CMakeLists.txt
@@ -15,6 +15,7 @@
 endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OSDependent
+    install(TARGETS OSDependent EXPORT OSDependentTargets
             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	install(EXPORT OSDependentTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index bb06acc..acb2a07 100755
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -92,15 +92,21 @@
     EShLangGeometry,
     EShLangFragment,
     EShLangCompute,
-    EShLangRayGenNV,
-    EShLangIntersectNV,
-    EShLangAnyHitNV,
-    EShLangClosestHitNV,
-    EShLangMissNV,
-    EShLangCallableNV,
+    EShLangRayGen,
+    EShLangRayGenNV = EShLangRayGen,
+    EShLangIntersect,
+    EShLangIntersectNV = EShLangIntersect,
+    EShLangAnyHit,
+    EShLangAnyHitNV = EShLangAnyHit,
+    EShLangClosestHit,
+    EShLangClosestHitNV = EShLangClosestHit,
+    EShLangMiss,
+    EShLangMissNV = EShLangMiss,
+    EShLangCallable,
+    EShLangCallableNV = EShLangCallable,
     EShLangTaskNV,
     EShLangMeshNV,
-    EShLangCount,
+    LAST_ELEMENT_MARKER(EShLangCount),
 } EShLanguage;         // would be better as stage, but this is ancient now
 
 typedef enum {
@@ -110,14 +116,21 @@
     EShLangGeometryMask       = (1 << EShLangGeometry),
     EShLangFragmentMask       = (1 << EShLangFragment),
     EShLangComputeMask        = (1 << EShLangCompute),
-    EShLangRayGenNVMask       = (1 << EShLangRayGenNV),
-    EShLangIntersectNVMask    = (1 << EShLangIntersectNV),
-    EShLangAnyHitNVMask       = (1 << EShLangAnyHitNV),
-    EShLangClosestHitNVMask   = (1 << EShLangClosestHitNV),
-    EShLangMissNVMask         = (1 << EShLangMissNV),
-    EShLangCallableNVMask     = (1 << EShLangCallableNV),
+    EShLangRayGenMask         = (1 << EShLangRayGen),
+    EShLangRayGenNVMask       = EShLangRayGenMask,
+    EShLangIntersectMask      = (1 << EShLangIntersect),
+    EShLangIntersectNVMask    = EShLangIntersectMask,
+    EShLangAnyHitMask         = (1 << EShLangAnyHit),
+    EShLangAnyHitNVMask       = EShLangAnyHitMask,
+    EShLangClosestHitMask     = (1 << EShLangClosestHit),
+    EShLangClosestHitNVMask   = EShLangClosestHitMask,
+    EShLangMissMask           = (1 << EShLangMiss),
+    EShLangMissNVMask         = EShLangMissMask,
+    EShLangCallableMask       = (1 << EShLangCallable),
+    EShLangCallableNVMask     = EShLangCallableMask,
     EShLangTaskNVMask         = (1 << EShLangTaskNV),
     EShLangMeshNVMask         = (1 << EShLangMeshNV),
+    LAST_ELEMENT_MARKER(EShLanguageMaskCount),
 } EShLanguageMask;
 
 namespace glslang {
@@ -128,24 +141,29 @@
     EShSourceNone,
     EShSourceGlsl,               // GLSL, includes ESSL (OpenGL ES GLSL)
     EShSourceHlsl,               // HLSL
+    LAST_ELEMENT_MARKER(EShSourceCount),
 } EShSource;                     // if EShLanguage were EShStage, this could be EShLanguage instead
 
 typedef enum {
     EShClientNone,               // use when there is no client, e.g. for validation
     EShClientVulkan,
     EShClientOpenGL,
+    LAST_ELEMENT_MARKER(EShClientCount),
 } EShClient;
 
 typedef enum {
     EShTargetNone,
     EShTargetSpv,                 // SPIR-V (preferred spelling)
     EshTargetSpv = EShTargetSpv,  // legacy spelling
+    LAST_ELEMENT_MARKER(EShTargetCount),
 } EShTargetLanguage;
 
 typedef enum {
     EShTargetVulkan_1_0 = (1 << 22),                  // Vulkan 1.0
     EShTargetVulkan_1_1 = (1 << 22) | (1 << 12),      // Vulkan 1.1
+    EShTargetVulkan_1_2 = (1 << 22) | (2 << 12),      // Vulkan 1.2
     EShTargetOpenGL_450 = 450,                        // OpenGL
+    LAST_ELEMENT_MARKER(EShTargetClientVersionCount),
 } EShTargetClientVersion;
 
 typedef EShTargetClientVersion EshTargetClientVersion;
@@ -157,6 +175,7 @@
     EShTargetSpv_1_3 = (1 << 16) | (3 << 8),          // SPIR-V 1.3
     EShTargetSpv_1_4 = (1 << 16) | (4 << 8),          // SPIR-V 1.4
     EShTargetSpv_1_5 = (1 << 16) | (5 << 8),          // SPIR-V 1.5
+    LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount),
 } EShTargetLanguageVersion;
 
 struct TInputLanguage {
@@ -206,6 +225,7 @@
     EShOptNone,
     EShOptSimple,       // Optimizations that can be done quickly
     EShOptFull,         // Optimizations that will take more time
+    LAST_ELEMENT_MARKER(EshOptLevelCount),
 } EShOptimizationLevel;
 
 //
@@ -214,6 +234,7 @@
 typedef enum {
     EShTexSampTransKeep,   // keep textures and samplers as is (default)
     EShTexSampTransUpgradeTextureRemoveSampler,  // change texture w/o embeded sampler into sampled texture and throw away all samplers
+    LAST_ELEMENT_MARKER(EShTexSampTransCount),
 } EShTextureSamplerTransformMode;
 
 //
@@ -236,6 +257,7 @@
     EShMsgHlslLegalization  = (1 << 12), // enable HLSL Legalization messages
     EShMsgHlslDX9Compatible = (1 << 13), // enable HLSL DX9 compatible mode (right now only for samplers)
     EShMsgBuiltinSymbolTable = (1 << 14), // print the builtin symbol table
+    LAST_ELEMENT_MARKER(EShMsgCount),
 };
 
 //
@@ -249,6 +271,7 @@
     EShReflectionSeparateBuffers   = (1 << 3), // buffer variables and buffer blocks are reflected separately
     EShReflectionAllBlockVariables = (1 << 4), // reflect all variables in blocks, even if they are inactive
     EShReflectionUnwrapIOBlocks    = (1 << 5), // unwrap input/output blocks the same as with uniform blocks
+    LAST_ELEMENT_MARKER(EShReflectionCount),
 } EShReflectionOptions;
 
 //
@@ -394,6 +417,8 @@
 //  - optionally call setEnv*(), see below for more detail
 //  - optionally use setPreamble() to set a special shader string that will be
 //    processed before all others but won't affect the validity of #version
+//  - optionally call addProcesses() for each setting/transform,
+//    see comment for class TProcesses
 //  - call parse(): source language and target environment must be selected
 //    either by correct setting of EShMessages sent to parse(), or by
 //    explicitly calling setEnv*()
@@ -487,6 +512,8 @@
         environment.target.version = version;
     }
 
+    void getStrings(const char* const* &s, int& n) { s = strings; n = numStrings; }
+
 #ifdef ENABLE_HLSL
     void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; }
     bool getEnvTargetHlslFunctionality1() const { return environment.target.hlslFunctionality1; }
@@ -626,11 +653,11 @@
     // stringNames is the optional names for all the strings. If stringNames
     // is null, then none of the strings has name. If a certain element in
     // stringNames is null, then the corresponding string does not have name.
-    const char* const* strings;
+    const char* const* strings;      // explicit code to compile, see previous comment
     const int* lengths;
     const char* const* stringNames;
-    const char* preamble;
-    int numStrings;
+    int numStrings;                  // size of the above arrays
+    const char* preamble;            // string of implicit code to compile before the explicitly provided code
 
     // a function in the source string can be renamed FROM this TO the name given in setEntryPoint.
     std::string sourceEntryPointName;
@@ -773,7 +800,7 @@
     TProgram();
     virtual ~TProgram();
     void addShader(TShader* shader) { stages[shader->stage].push_back(shader); }
-
+    std::list<TShader*>& getShaders(EShLanguage stage) { return stages[stage]; }
     // Link Validation interface
     bool link(EShMessages);
     const char* getInfoLog();
diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt
index f678cb6..dc53f5c 100644
--- a/gtests/CMakeLists.txt
+++ b/gtests/CMakeLists.txt
@@ -20,10 +20,12 @@
             ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.Vk.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/Pp.FromFile.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp)
 
-            # -- Remapper tests
-            ${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp)
+        if(ENABLE_SPVREMAPPER)
+            set(TEST_SOURCES ${TEST_SOURCES}
+                ${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp)
+        endif()
 
         glslang_pch(TEST_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/pch.cpp)
 
@@ -31,8 +33,9 @@
         set_property(TARGET glslangtests PROPERTY FOLDER tests)
         glslang_set_link_args(glslangtests)
         if(ENABLE_GLSLANG_INSTALL)
-            install(TARGETS glslangtests
+            install(TARGETS glslangtests EXPORT glslangtestsTargets
                     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+			install(EXPORT glslangtestsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
         endif(ENABLE_GLSLANG_INSTALL)
 
         set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test")
@@ -48,8 +51,13 @@
                                    ${gtest_SOURCE_DIR}/include)
 
         set(LIBRARIES
-            SPVRemapper glslang OSDependent OGLCompiler glslang
+            glslang OSDependent OGLCompiler glslang
             SPIRV glslang-default-resource-limits)
+
+        if(ENABLE_SPVREMAPPER)
+            set(LIBRARIES ${LIBRARIES} SPVRemapper)
+        endif()
+
         if(ENABLE_HLSL)
             set(LIBRARIES ${LIBRARIES} HLSL)
         endif(ENABLE_HLSL)
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 59c687d..f483536 100755
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -350,6 +350,7 @@
         {"hlsl.semicolons.frag", "main"},
         {"hlsl.shapeConv.frag", "main"},
         {"hlsl.shapeConvRet.frag", "main"},
+        {"hlsl.singleArgIntPromo.vert", "main"},
         {"hlsl.self_cast.frag", "main"},
         {"hlsl.snorm.uav.comp", "main"},
         {"hlsl.specConstant.frag", "main"},
diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp
old mode 100644
new mode 100755
index fe96bd9..a43edcf
--- a/gtests/Link.FromFile.Vk.cpp
+++ b/gtests/Link.FromFile.Vk.cpp
@@ -50,6 +50,7 @@
     const size_t fileCount = fileNames.size();
     const EShMessages controls = DeriveOptions(Source::GLSL, Semantics::Vulkan, Target::AST);
     GlslangResult result;
+    result.validationResult = false;
 
     // Compile each input shader file.
     bool success = true;
@@ -108,6 +109,16 @@
     ::testing::ValuesIn(std::vector<std::vector<std::string>>({
         {"link1.vk.frag", "link2.vk.frag"},
         {"spv.unit1.frag", "spv.unit2.frag", "spv.unit3.frag"},
+		{"link.vk.matchingPC.0.0.frag", "link.vk.matchingPC.0.1.frag",
+			"link.vk.matchingPC.0.2.frag"},
+		{"link.vk.differentPC.0.0.frag", "link.vk.differentPC.0.1.frag",
+			"link.vk.differentPC.0.2.frag"},
+		{"link.vk.differentPC.1.0.frag", "link.vk.differentPC.1.1.frag",
+			"link.vk.differentPC.1.2.frag"},
+        {"link.vk.pcNamingValid.0.0.vert", "link.vk.pcNamingValid.0.1.vert"},
+        {"link.vk.pcNamingInvalid.0.0.vert", "link.vk.pcNamingInvalid.0.1.vert"},
+        {"link.vk.multiBlocksValid.0.0.vert", "link.vk.multiBlocksValid.0.1.vert"},
+        {"link.vk.multiBlocksValid.1.0.geom", "link.vk.multiBlocksValid.1.1.geom"},
     }))
 );
 // clang-format on
diff --git a/gtests/Link.FromFile.cpp b/gtests/Link.FromFile.cpp
old mode 100644
new mode 100755
index abc33a9..dc9bb76
--- a/gtests/Link.FromFile.cpp
+++ b/gtests/Link.FromFile.cpp
@@ -100,7 +100,11 @@
         {"150.tesc", "150.tese", "400.tesc", "400.tese", "410.tesc", "420.tesc", "420.tese"},
         {"max_vertices_0.geom"},
         {"es-link1.frag", "es-link2.frag"},
-        {"missingBodies.vert"}
+        {"missingBodies.vert"},
+        {"link.multiAnonBlocksInvalid.0.0.vert", "link.multiAnonBlocksInvalid.0.1.vert"},
+        {"link.multiAnonBlocksValid.0.0.vert", "link.multiAnonBlocksValid.0.1.vert"},
+        {"link.multiBlocksInvalid.0.0.vert", "link.multiBlocksInvalid.0.1.vert"},
+        {"link.multiBlocksValid.1.0.vert", "link.multiBlocksValid.1.1.vert"},
     }))
 );
 // clang-format on
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index d0c0751..1d061fb 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -1,5 +1,6 @@
  //
 // Copyright (C) 2016 Google, Inc.
+// Copyright (C) 2019 ARM Limited.
 //
 // All rights reserved.
 //
@@ -63,6 +64,7 @@
 }
 
 using CompileVulkanToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
+using CompileVulkanToSpirvDeadCodeElimTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileVulkanToDebugSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileVulkan1_1ToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileToSpirv14Test = GlslangTest<::testing::TestWithParam<std::string>>;
@@ -85,6 +87,13 @@
                             Target::Spv);
 }
 
+TEST_P(CompileVulkanToSpirvDeadCodeElimTest, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
+                            Target::Spv);
+}
+
 // Compiling GLSL to SPIR-V with debug info under Vulkan semantics. Expected
 // to successfully generate SPIR-V.
 TEST_P(CompileVulkanToDebugSpirvTest, FromFile)
@@ -96,6 +105,7 @@
                             "/baseResults/", false, true);
 }
 
+
 TEST_P(CompileVulkan1_1ToSpirvTest, FromFile)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
@@ -220,6 +230,14 @@
         "spv.while-continue-break.vert",
         "spv.while-simple.vert",
         // vulkan-specific tests
+        "rayQuery.rgen",
+        "rayQuery-no-cse.rgen",
+        "rayQuery-initialize.rgen",
+        "rayQuery-allOps.rgen",
+        "rayQuery-allOps.Error.rgen",
+        "rayQuery-committed.Error.rgen",
+        "rayQuery-allOps.comp",
+        "rayQuery-allOps.frag",
         "spv.set.vert",
         "spv.double.comp",
         "spv.100ops.frag",
@@ -255,12 +273,14 @@
         "spv.8bitstorage_Error-uint.frag",
         "spv.8bitstorage-ubo.vert",
         "spv.8bitstorage-ssbo.vert",
+        "spv.8bit-16bit-construction.frag",
         "spv.accessChain.frag",
         "spv.aggOps.frag",
         "spv.always-discard.frag",
         "spv.always-discard2.frag",
         "spv.arbPostDepthCoverage.frag",
         "spv.arbPostDepthCoverage_Error.frag",
+        "spv.atomicCounter.comp",
         "spv.bitCast.frag",
         "spv.bool.vert",
         "spv.boolInBlock.frag",
@@ -299,6 +319,8 @@
         "spv.dataOut.frag",
         "spv.dataOutIndirect.frag",
         "spv.dataOutIndirect.vert",
+        "spv.debugPrintf.frag",
+        "spv.debugPrintf_Error.frag",
         "spv.demoteDisabled.frag",
         "spv.deepRvalue.frag",
         "spv.depthOut.frag",
@@ -307,6 +329,20 @@
         "spv.earlyReturnDiscard.frag",
         "spv.extPostDepthCoverage.frag",
         "spv.extPostDepthCoverage_Error.frag",
+        "spv.ext.AnyHitShader.rahit",
+        "spv.ext.AnyHitShader_Errors.rahit",
+        "spv.ext.ClosestHitShader.rchit",
+        "spv.ext.ClosestHitShader_Errors.rchit",
+        "spv.ext.IntersectShader.rint",
+        "spv.ext.IntersectShader_Errors.rint",
+        "spv.ext.MissShader.rmiss",
+        "spv.ext.MissShader_Errors.rmiss",
+        "spv.ext.RayCallable.rcall",
+        "spv.ext.RayCallable_Errors.rcall",
+        "spv.ext.RayConstants.rgen",
+        "spv.ext.RayGenShader.rgen",
+        "spv.ext.RayGenShader11.rgen",
+        "spv.ext.RayGenShaderArray.rgen",
         "spv.float16convertonlyarith.comp",
         "spv.float16convertonlystorage.comp",
         "spv.flowControl.frag",
@@ -345,6 +381,9 @@
         "spv.nonSquare.vert",
         "spv.nonuniform.frag",
         "spv.nonuniform2.frag",
+        "spv.nonuniform3.frag",
+        "spv.nonuniform4.frag",
+        "spv.nonuniform5.frag",
         "spv.noWorkgroup.comp",
         "spv.offsets.frag",
         "spv.Operations.frag",
@@ -404,6 +443,7 @@
         "spv.storageBuffer.vert",
         "spv.precise.tese",
         "spv.precise.tesc",
+        "spv.volatileAtomic.comp",
         "spv.vulkan100.subgroupArithmetic.comp",
         "spv.vulkan100.subgroupPartitioned.comp",
         "spv.xfb.vert",
@@ -416,6 +456,23 @@
     FileNameAsCustomTestSuffix
 );
 
+// Cases with deliberately unreachable code.
+// By default the compiler will aggressively eliminate
+// unreachable merges and continues.
+INSTANTIATE_TEST_CASE_P(
+    GlslWithDeadCode, CompileVulkanToSpirvDeadCodeElimTest,
+    ::testing::ValuesIn(std::vector<std::string>({
+        "spv.dead-after-continue.vert",
+        "spv.dead-after-discard.frag",
+        "spv.dead-after-return.vert",
+        "spv.dead-after-loop-break.vert",
+        "spv.dead-after-switch-break.vert",
+        "spv.dead-complex-continue-after-return.vert",
+        "spv.dead-complex-merge-after-return.vert",
+    })),
+    FileNameAsCustomTestSuffix
+);
+
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
     Glsl, CompileVulkanToDebugSpirvTest,
@@ -541,6 +598,7 @@
         "spv.glFragColor.frag",
         "spv.rankShift.comp",
         "spv.specConst.vert",
+        "spv.specTexture.frag",
         "spv.OVR_multiview.vert",
         "spv.xfbOffsetOnBlockMembersAssignment.vert",
         "spv.xfbOffsetOnStructMembersAssignment.vert",
diff --git a/gtests/TestFixture.cpp b/gtests/TestFixture.cpp
index baf4d16..ced6fcc 100644
--- a/gtests/TestFixture.cpp
+++ b/gtests/TestFixture.cpp
@@ -61,17 +61,17 @@
     } else if (stage == "comp") {
         return EShLangCompute;
     } else if (stage == "rgen") {
-        return EShLangRayGenNV;
+        return EShLangRayGen;
     } else if (stage == "rint") {
-        return EShLangIntersectNV;
+        return EShLangIntersect;
     } else if (stage == "rahit") {
-        return EShLangAnyHitNV;
+        return EShLangAnyHit;
     } else if (stage == "rchit") {
-        return EShLangClosestHitNV;
+        return EShLangClosestHit;
     } else if (stage == "rmiss") {
-        return EShLangMissNV;
+        return EShLangMiss;
     } else if (stage == "rcall") {
-        return EShLangCallableNV;
+        return EShLangCallable;
     } else if (stage == "task") {
         return EShLangTaskNV;
     } else if (stage == "mesh") {
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
index 61a8f23..8d2ebd9 100755
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -113,7 +113,7 @@
           forceVersionProfile(false),
           isForwardCompatible(false) {
         // Perform validation by default.
-        validatorOptions.validate = true;
+        spirvOptions.validate = true;
     }
 
     // Tries to load the contents from the file at the given |path|. On success,
@@ -693,14 +693,14 @@
                                     expectedOutputFname, result.spirvWarningsErrors);
     }
 
-    glslang::SpvOptions& options() { return validatorOptions; }
+    glslang::SpvOptions& options() { return spirvOptions; }
 
 private:
     const int defaultVersion;
     const EProfile defaultProfile;
     const bool forceVersionProfile;
     const bool isForwardCompatible;
-    glslang::SpvOptions validatorOptions;
+    glslang::SpvOptions spirvOptions;
 };
 
 }  // namespace glslangtest
diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt
index 7436dde..ae0d4d4 100644
--- a/hlsl/CMakeLists.txt
+++ b/hlsl/CMakeLists.txt
@@ -33,12 +33,13 @@
 
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
-        install(TARGETS HLSL
+        install(TARGETS HLSL EXPORT HLSLTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     else()
-        install(TARGETS HLSL
+        install(TARGETS HLSL EXPORT HLSLTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
+	install(EXPORT HLSLTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index 8ab1a90..47ced29 100644
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -2516,6 +2516,8 @@
 //
 bool HlslGrammar::acceptFunctionParameters(TFunction& function)
 {
+    parseContext.beginParameterParsing(function);
+
     // LEFT_PAREN
     if (! acceptTokenClass(EHTokLeftParen))
         return false;
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index be665ac..2dc173f 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -69,7 +69,8 @@
     clipDistanceOutput(nullptr),
     cullDistanceOutput(nullptr),
     clipDistanceInput(nullptr),
-    cullDistanceInput(nullptr)
+    cullDistanceInput(nullptr),
+    parsingEntrypointParameters(false)
 {
     globalUniformDefaults.clear();
     globalUniformDefaults.layoutMatrix = ElmRowMajor;
@@ -756,9 +757,6 @@
     // indexStructBufferContent returns nullptr if it isn't a structuredbuffer (SSBO).
     TIntermTyped* sbArray = indexStructBufferContent(loc, base);
     if (sbArray != nullptr) {
-        if (sbArray == nullptr)
-            return nullptr;
-
         // Now we'll apply the [] index to that array
         const TOperator idxOp = (index->getQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect;
 
@@ -2049,7 +2047,7 @@
     };
 
     // if we aren't in the entry point, fix the IO as such and exit
-    if (userFunction.getName().compare(intermediate.getEntryPointName().c_str()) != 0) {
+    if (! isEntrypointName(userFunction.getName())) {
         remapNonEntryPointIO(userFunction);
         return nullptr;
     }
@@ -7571,7 +7569,7 @@
 
         if (args->getAsAggregate()) {
             // Handle aggregates: put all args into the new function call
-            for (int arg=0; arg<int(args->getAsAggregate()->getSequence().size()); ++arg) {
+            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 };
                 param.type->shallowCopy(args->getAsAggregate()->getSequence()[arg]->getAsTyped()->getType());
@@ -8884,6 +8882,10 @@
 //
 bool HlslParseContext::handleInputGeometry(const TSourceLoc& loc, const TLayoutGeometry& geometry)
 {
+    // these can be declared on non-entry-points, in which case they lose their meaning
+    if (! parsingEntrypointParameters)
+        return true;
+
     switch (geometry) {
     case ElgPoints:             // fall through
     case ElgLines:              // ...
@@ -8914,6 +8916,10 @@
     if (language != EShLangGeometry)
         return true;
 
+    // these can be declared on non-entry-points, in which case they lose their meaning
+    if (! parsingEntrypointParameters)
+        return true;
+
     switch (geometry) {
     case ElgPoints:
     case ElgLineStrip:
diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h
index 822de89..6f41661 100644
--- a/hlsl/hlslParseHelper.h
+++ b/hlsl/hlslParseHelper.h
@@ -183,6 +183,11 @@
     void getFullNamespaceName(TString*&) const;
     void addScopeMangler(TString&);
 
+    void beginParameterParsing(TFunction& function)
+    {
+        parsingEntrypointParameters = isEntrypointName(function.getName());
+    }
+
     void pushSwitchSequence(TIntermSequence* sequence) { switchSequenceStack.push_back(sequence); }
     void popSwitchSequence() { switchSequenceStack.pop_back(); }
 
@@ -241,6 +246,7 @@
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer, TIntermTyped* scalarInit);
     bool isScalarConstructor(const TIntermNode*);
     TOperator mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage);
+    bool isEntrypointName(const TString& name) { return name.compare(intermediate.getEntryPointName().c_str()) == 0; }
 
     // Return true if this node requires L-value conversion (e.g, to an imageStore).
     bool shouldConvertLValue(const TIntermNode*) const;
@@ -494,6 +500,7 @@
     };
 
     TMap<int, tShadowTextureSymbols*> textureShadowVariant;
+    bool parsingEntrypointParameters;
 };
 
 // This is the prefix we use for built-in methods to avoid namespace collisions with
diff --git a/known_good.json b/known_good.json
index 6a13907..9cc8c44 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,14 +5,14 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "bbb29870b510f83f99994358179c9ea6838c3100"
+      "commit" : "fd8e130510a6b002b28eee5885a9505040a9bdc9"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "601d738723ac381741311c6c98c36d6170be14a2"
+      "commit" : "f8bf11a0253a32375c32cad92c841237b96696c0"
     }
   ]
 }
diff --git a/kokoro/linux-clang-release-bazel/build.sh b/kokoro/linux-clang-release-bazel/build.sh
new file mode 100644
index 0000000..f73162f
--- /dev/null
+++ b/kokoro/linux-clang-release-bazel/build.sh
@@ -0,0 +1,60 @@
+#!/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
+echo $(date): Bazel test completed.
diff --git a/kokoro/linux-clang-release-bazel/continuous.cfg b/kokoro/linux-clang-release-bazel/continuous.cfg
new file mode 100644
index 0000000..767556d
--- /dev/null
+++ b/kokoro/linux-clang-release-bazel/continuous.cfg
@@ -0,0 +1,35 @@
+# 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
new file mode 100644
index 0000000..669491f
--- /dev/null
+++ b/kokoro/linux-clang-release-bazel/presubmit.cfg
@@ -0,0 +1,35 @@
+# 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
new file mode 100644
index 0000000..cc51fad
--- /dev/null
+++ b/kokoro/macos-clang-release-bazel/build.sh
@@ -0,0 +1,60 @@
+#!/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
+echo $(date): Bazel test completed.
diff --git a/kokoro/macos-clang-release-bazel/continuous.cfg b/kokoro/macos-clang-release-bazel/continuous.cfg
new file mode 100644
index 0000000..f198079
--- /dev/null
+++ b/kokoro/macos-clang-release-bazel/continuous.cfg
@@ -0,0 +1,35 @@
+# 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
new file mode 100644
index 0000000..daa30be
--- /dev/null
+++ b/kokoro/macos-clang-release-bazel/presubmit.cfg
@@ -0,0 +1,35 @@
+# 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
new file mode 100644
index 0000000..1a1557c
--- /dev/null
+++ b/kokoro/windows-msvc-2015-release-bazel/build.bat
@@ -0,0 +1,75 @@
+:: 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
+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
new file mode 100644
index 0000000..554d29d
--- /dev/null
+++ b/kokoro/windows-msvc-2015-release-bazel/continuous.cfg
@@ -0,0 +1,35 @@
+# 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
new file mode 100644
index 0000000..4980bb6
--- /dev/null
+++ b/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg
@@ -0,0 +1,35 @@
+# 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"