Merge "Merge remote-tracking branch 'aosp/upstream-master' into update-shaderc" into master-ndk
diff --git a/.appveyor.yml b/.appveyor.yml
index 44d5f04..4c5b0da 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -4,7 +4,7 @@
 # build version format
 version: "{build}"
 
-os: Visual Studio 2013
+os: Visual Studio 2015
 
 platform:
   - x64
@@ -58,7 +58,7 @@
 
 build_script:
   - mkdir build && cd build
-  - cmake -G "Visual Studio 12 2013 Win64" -DCMAKE_INSTALL_PREFIX=install ..
+  - cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX=install ..
   - cmake --build . --config %CONFIGURATION% --target install
 
 test_script:
@@ -105,4 +105,4 @@
     force_update: true
     on:
       branch: master
-      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
+      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
diff --git a/.gitignore b/.gitignore
index a1fe394..790b880 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,9 +2,12 @@
 *.a
 *.so
 *.exe
+.vscode/
 tags
 TAGS
+bazel-*
 build/
 Test/localResults/
 External/googletest
 External/spirv-tools
+out/
diff --git a/Android.mk b/Android.mk
index fda81a7..3a74497 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,5 +1,56 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 LOCAL_PATH := $(call my-dir)
 
+# Generate glslang/build_info.h
+GLSLANG_GENERATED_INCLUDEDIR:=$(TARGET_OUT)/include
+GLSLANG_BUILD_INFO_H:=$(GLSLANG_GENERATED_INCLUDEDIR)/glslang/build_info.h
+
+define gen_glslang_build_info_h
+$(call generate-file-dir,$(GLSLANG_GENERATED_INCLUDEDIR)/dummy_filename)
+$(GLSLANG_BUILD_INFO_H): \
+		$(LOCAL_PATH)/build_info.py \
+		$(LOCAL_PATH)/build_info.h.tmpl \
+		$(LOCAL_PATH)/CHANGES.md
+		@$(HOST_PYTHON) $(LOCAL_PATH)/build_info.py \
+						$(LOCAL_PATH) \
+						-i $(LOCAL_PATH)/build_info.h.tmpl \
+						-o $(GLSLANG_BUILD_INFO_H)
+		@echo "[$(TARGET_ARCH_ABI)] Generate       : $(GLSLANG_BUILD_INFO_H) <= CHANGES.md"
+endef
+$(eval $(call gen_glslang_build_info_h))
+
 GLSLANG_OS_FLAGS := -DGLSLANG_OSINCLUDE_UNIX
 # AMD and NV extensions are turned on by default in upstream Glslang.
 GLSLANG_DEFINES:= -DAMD_EXTENSIONS -DNV_EXTENSIONS -DENABLE_HLSL $(GLSLANG_OS_FLAGS)
@@ -22,31 +73,38 @@
 LOCAL_STATIC_LIBRARIES:=OSDependent
 include $(BUILD_STATIC_LIBRARY)
 
-# Build Glslang's HLSL parser library.
+# Build the stubbed HLSL library.
+# The HLSL source is now directly referenced by the glslang static library
+# instead.
 include $(CLEAR_VARS)
 LOCAL_MODULE:=HLSL
 LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES)
 LOCAL_SRC_FILES:= \
-		hlsl/hlslAttributes.cpp \
-		hlsl/hlslGrammar.cpp \
-		hlsl/hlslOpMap.cpp \
-		hlsl/hlslParseables.cpp \
-		hlsl/hlslParseHelper.cpp \
-		hlsl/hlslScanContext.cpp \
-		hlsl/hlslTokenStream.cpp
+	hlsl/stub.cpp
 LOCAL_C_INCLUDES:=$(LOCAL_PATH) \
-	$(LOCAL_PATH)/hlsl
+	$(LOCAL_PATH)/glslang/HLSL
 include $(BUILD_STATIC_LIBRARY)
 
 include $(CLEAR_VARS)
 GLSLANG_OUT_PATH=$(if $(call host-path-is-absolute,$(TARGET_OUT)),$(TARGET_OUT),$(abspath $(TARGET_OUT)))
 
+# ShaderLang.cpp depends on the generated build_info.h
+$(LOCAL_PATH)/glslang/MachineIndependent/ShaderLang.cpp: \
+	$(GLSLANG_BUILD_INFO_H)
+
 LOCAL_MODULE:=glslang
 LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES)
 LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)
 LOCAL_SRC_FILES:= \
 		glslang/GenericCodeGen/CodeGen.cpp \
 		glslang/GenericCodeGen/Link.cpp \
+		glslang/HLSL/hlslAttributes.cpp \
+		glslang/HLSL/hlslGrammar.cpp \
+		glslang/HLSL/hlslOpMap.cpp \
+		glslang/HLSL/hlslParseables.cpp \
+		glslang/HLSL/hlslParseHelper.cpp \
+		glslang/HLSL/hlslScanContext.cpp \
+		glslang/HLSL/hlslTokenStream.cpp \
 		glslang/MachineIndependent/attribute.cpp \
 		glslang/MachineIndependent/Constant.cpp \
 		glslang/MachineIndependent/glslang_tab.cpp \
@@ -76,14 +134,19 @@
 		glslang/MachineIndependent/preprocessor/PpTokens.cpp
 LOCAL_C_INCLUDES:=$(LOCAL_PATH) \
 	$(LOCAL_PATH)/glslang/MachineIndependent \
+	$(GLSLANG_GENERATED_INCLUDEDIR) \
 	$(GLSLANG_OUT_PATH)
 LOCAL_STATIC_LIBRARIES:=OSDependent OGLCompiler HLSL
 include $(BUILD_STATIC_LIBRARY)
 
 include $(CLEAR_VARS)
+
+# GlslangToSpv.cpp depends on the generated build_info.h
+$(LOCAL_PATH)/SPIRV/GlslangToSpv.cpp: \
+	$(GLSLANG_BUILD_INFO_H)
+
 LOCAL_MODULE:=SPIRV
 LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti -Werror $(GLSLANG_DEFINES)
-LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)
 LOCAL_SRC_FILES:= \
 	SPIRV/GlslangToSpv.cpp \
 	SPIRV/InReadableOrder.cpp \
@@ -94,7 +157,9 @@
 	SPIRV/SpvTools.cpp \
 	SPIRV/disassemble.cpp \
 	SPIRV/doc.cpp
-LOCAL_C_INCLUDES:=$(LOCAL_PATH) $(LOCAL_PATH)/glslang/SPIRV
+LOCAL_C_INCLUDES:=$(LOCAL_PATH) \
+	$(LOCAL_PATH)/glslang/SPIRV \
+	$(GLSLANG_GENERATED_INCLUDEDIR)
 LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)/glslang/SPIRV
 LOCAL_STATIC_LIBRARIES:=glslang
 include $(BUILD_STATIC_LIBRARY)
diff --git a/BUILD.bazel b/BUILD.bazel
index 5930608..bfb7797 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -1,3 +1,36 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 package(
     default_visibility = ["//visibility:public"],
 )
@@ -10,6 +43,20 @@
 
 exports_files(["LICENSE"])
 
+# Build information generation script
+py_binary(
+    name = "build_info",
+    srcs = ["build_info.py"],
+)
+
+genrule(
+    name = "gen_build_info_h",
+    srcs = ["CHANGES.md", "build_info.h.tmpl"],
+    outs = ["glslang/build_info.h"],
+    cmd = "$(location build_info) $$(dirname $(location CHANGES.md)) -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)",
+    tools = [":build_info"],
+)
+
 COMMON_COPTS = select({
     "@bazel_tools//src/conditions:windows": [""],
     "//conditions:default": [
@@ -34,15 +81,13 @@
     srcs = glob(
         [
             "glslang/GenericCodeGen/*.cpp",
+            "glslang/HLSL/*.cpp",
             "glslang/MachineIndependent/*.cpp",
             "glslang/MachineIndependent/preprocessor/*.cpp",
-            "hlsl/*.cpp",
         ],
         exclude = [
-            "glslang/MachineIndependent/pch.cpp",
+            "glslang/HLSL/pch.h",
             "glslang/MachineIndependent/pch.h",
-            "hlsl/pch.cpp",
-            "hlsl/pch.h",
         ],
     ) + [
         "OGLCompilersDLL/InitializeDll.cpp",
@@ -53,15 +98,16 @@
             ["glslang/OSDependent/Unix/ossource.cpp"],
     }),
     hdrs = glob([
+        "glslang/HLSL/*.h",
         "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",
+        ":gen_build_info_h",
     ],
     copts = COMMON_COPTS,
     defines = [
diff --git a/BUILD.gn b/BUILD.gn
index 49b4b0a..7242b6f 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -46,169 +46,229 @@
   _configs_to_add = [ "//build/config/compiler:no_chromium_code" ]
 }
 
+action("glslang_build_info") {
+  script = "build_info.py"
+
+  src_dir = "."
+  changes_file = "CHANGES.md"
+  template_file = "build_info.h.tmpl"
+  out_file = "${target_gen_dir}/include/glslang/build_info.h"
+
+  inputs = [
+    changes_file,
+    script,
+    template_file,
+  ]
+  outputs = [
+    out_file
+  ]
+  args = [
+    rebase_path(src_dir, root_build_dir),
+    "-i", rebase_path(template_file, root_build_dir),
+    "-o", rebase_path(out_file, root_build_dir),
+  ]
+}
+
 spirv_tools_dir = glslang_spirv_tools_dir
+if (!defined(glslang_angle)) {
+  glslang_angle = false
+}
 
 config("glslang_public") {
   include_dirs = [ "." ]
+}
 
+config("glslang_hlsl") {
   defines = [ "ENABLE_HLSL=1" ]
 }
 
-source_set("glslang_sources") {
-  public_configs = [ ":glslang_public" ]
+template("glslang_sources_common") {
+  source_set(target_name) {
+    public_configs = [ ":glslang_public" ]
 
-  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",
-    "SPIRV/SpvBuilder.h",
-    "SPIRV/SpvPostProcess.cpp",
-    "SPIRV/SpvTools.cpp",
-    "SPIRV/SpvTools.h",
-    "SPIRV/bitutils.h",
-    "SPIRV/disassemble.cpp",
-    "SPIRV/disassemble.h",
-    "SPIRV/doc.cpp",
-    "SPIRV/doc.h",
-    "SPIRV/hex_float.h",
-    "SPIRV/spirv.hpp",
-    "SPIRV/spvIR.h",
-    "glslang/GenericCodeGen/CodeGen.cpp",
-    "glslang/GenericCodeGen/Link.cpp",
-    "glslang/Include/BaseTypes.h",
-    "glslang/Include/Common.h",
-    "glslang/Include/ConstantUnion.h",
-    "glslang/Include/InfoSink.h",
-    "glslang/Include/InitializeGlobals.h",
-    "glslang/Include/PoolAlloc.h",
-    "glslang/Include/ResourceLimits.h",
-    "glslang/Include/ShHandle.h",
-    "glslang/Include/Types.h",
-    "glslang/Include/arrays.h",
-    "glslang/Include/intermediate.h",
-    "glslang/Include/revision.h",
-    "glslang/MachineIndependent/Constant.cpp",
-    "glslang/MachineIndependent/InfoSink.cpp",
-    "glslang/MachineIndependent/Initialize.cpp",
-    "glslang/MachineIndependent/Initialize.h",
-    "glslang/MachineIndependent/IntermTraverse.cpp",
-    "glslang/MachineIndependent/Intermediate.cpp",
-    "glslang/MachineIndependent/LiveTraverser.h",
-    "glslang/MachineIndependent/ParseContextBase.cpp",
-    "glslang/MachineIndependent/ParseHelper.cpp",
-    "glslang/MachineIndependent/ParseHelper.h",
-    "glslang/MachineIndependent/PoolAlloc.cpp",
-    "glslang/MachineIndependent/RemoveTree.cpp",
-    "glslang/MachineIndependent/RemoveTree.h",
-    "glslang/MachineIndependent/Scan.cpp",
-    "glslang/MachineIndependent/Scan.h",
-    "glslang/MachineIndependent/ScanContext.h",
-    "glslang/MachineIndependent/ShaderLang.cpp",
-    "glslang/MachineIndependent/SymbolTable.cpp",
-    "glslang/MachineIndependent/SymbolTable.h",
-    "glslang/MachineIndependent/Versions.cpp",
-    "glslang/MachineIndependent/Versions.h",
-    "glslang/MachineIndependent/attribute.cpp",
-    "glslang/MachineIndependent/attribute.h",
-    "glslang/MachineIndependent/gl_types.h",
-    "glslang/MachineIndependent/glslang_tab.cpp",
-    "glslang/MachineIndependent/glslang_tab.cpp.h",
-    "glslang/MachineIndependent/intermOut.cpp",
-    "glslang/MachineIndependent/iomapper.cpp",
-    "glslang/MachineIndependent/iomapper.h",
-    "glslang/MachineIndependent/limits.cpp",
-    "glslang/MachineIndependent/linkValidate.cpp",
-    "glslang/MachineIndependent/localintermediate.h",
-    "glslang/MachineIndependent/parseConst.cpp",
-    "glslang/MachineIndependent/parseVersions.h",
-    "glslang/MachineIndependent/preprocessor/Pp.cpp",
-    "glslang/MachineIndependent/preprocessor/PpAtom.cpp",
-    "glslang/MachineIndependent/preprocessor/PpContext.cpp",
-    "glslang/MachineIndependent/preprocessor/PpContext.h",
-    "glslang/MachineIndependent/preprocessor/PpScanner.cpp",
-    "glslang/MachineIndependent/preprocessor/PpTokens.cpp",
-    "glslang/MachineIndependent/preprocessor/PpTokens.h",
-    "glslang/MachineIndependent/propagateNoContraction.cpp",
-    "glslang/MachineIndependent/propagateNoContraction.h",
-    "glslang/MachineIndependent/reflection.cpp",
-    "glslang/MachineIndependent/reflection.h",
-    "glslang/OSDependent/osinclude.h",
-    "glslang/Public/ShaderLang.h",
-    "hlsl/hlslAttributes.cpp",
-    "hlsl/hlslAttributes.h",
-    "hlsl/hlslGrammar.cpp",
-    "hlsl/hlslGrammar.h",
-    "hlsl/hlslOpMap.cpp",
-    "hlsl/hlslOpMap.h",
-    "hlsl/hlslParseHelper.cpp",
-    "hlsl/hlslParseHelper.h",
-    "hlsl/hlslParseables.cpp",
-    "hlsl/hlslParseables.h",
-    "hlsl/hlslScanContext.cpp",
-    "hlsl/hlslScanContext.h",
-    "hlsl/hlslTokenStream.cpp",
-    "hlsl/hlslTokenStream.h",
-    "hlsl/hlslTokens.h",
-  ]
+    if (invoker.enable_hlsl) {
+      public_configs += [ ":glslang_hlsl" ]
+    }
 
-  defines = [ "ENABLE_OPT=1" ]
-
-  if (is_win) {
-    sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]
-    defines += [ "GLSLANG_OSINCLUDE_WIN32" ]
-  } else {
-    sources += [ "glslang/OSDependent/Unix/ossource.cpp" ]
-    defines += [ "GLSLANG_OSINCLUDE_UNIX" ]
-  }
-
-  if (is_clang) {
-    cflags = [
-      "-Wno-extra-semi",
-      "-Wno-ignored-qualifiers",
-      "-Wno-implicit-fallthrough",
-      "-Wno-inconsistent-missing-override",
-      "-Wno-sign-compare",
-      "-Wno-unused-variable",
-      "-Wno-missing-field-initializers",
-      "-Wno-newline-eof",
+    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",
+      "SPIRV/SpvBuilder.h",
+      "SPIRV/SpvPostProcess.cpp",
+      "SPIRV/SpvTools.cpp",
+      "SPIRV/SpvTools.h",
+      "SPIRV/bitutils.h",
+      "SPIRV/disassemble.cpp",
+      "SPIRV/disassemble.h",
+      "SPIRV/doc.cpp",
+      "SPIRV/doc.h",
+      "SPIRV/hex_float.h",
+      "SPIRV/spirv.hpp",
+      "SPIRV/spvIR.h",
+      "glslang/GenericCodeGen/CodeGen.cpp",
+      "glslang/GenericCodeGen/Link.cpp",
+      "glslang/Include/BaseTypes.h",
+      "glslang/Include/Common.h",
+      "glslang/Include/ConstantUnion.h",
+      "glslang/Include/InfoSink.h",
+      "glslang/Include/InitializeGlobals.h",
+      "glslang/Include/PoolAlloc.h",
+      "glslang/Include/ResourceLimits.h",
+      "glslang/Include/ShHandle.h",
+      "glslang/Include/Types.h",
+      "glslang/Include/arrays.h",
+      "glslang/Include/intermediate.h",
+      "glslang/MachineIndependent/Constant.cpp",
+      "glslang/MachineIndependent/InfoSink.cpp",
+      "glslang/MachineIndependent/Initialize.cpp",
+      "glslang/MachineIndependent/Initialize.h",
+      "glslang/MachineIndependent/IntermTraverse.cpp",
+      "glslang/MachineIndependent/Intermediate.cpp",
+      "glslang/MachineIndependent/LiveTraverser.h",
+      "glslang/MachineIndependent/ParseContextBase.cpp",
+      "glslang/MachineIndependent/ParseHelper.cpp",
+      "glslang/MachineIndependent/ParseHelper.h",
+      "glslang/MachineIndependent/PoolAlloc.cpp",
+      "glslang/MachineIndependent/RemoveTree.cpp",
+      "glslang/MachineIndependent/RemoveTree.h",
+      "glslang/MachineIndependent/Scan.cpp",
+      "glslang/MachineIndependent/Scan.h",
+      "glslang/MachineIndependent/ScanContext.h",
+      "glslang/MachineIndependent/ShaderLang.cpp",
+      "glslang/MachineIndependent/SymbolTable.cpp",
+      "glslang/MachineIndependent/SymbolTable.h",
+      "glslang/MachineIndependent/Versions.cpp",
+      "glslang/MachineIndependent/Versions.h",
+      "glslang/MachineIndependent/attribute.cpp",
+      "glslang/MachineIndependent/attribute.h",
+      "glslang/MachineIndependent/gl_types.h",
+      "glslang/MachineIndependent/glslang_tab.cpp",
+      "glslang/MachineIndependent/glslang_tab.cpp.h",
+      "glslang/MachineIndependent/intermOut.cpp",
+      "glslang/MachineIndependent/iomapper.cpp",
+      "glslang/MachineIndependent/iomapper.h",
+      "glslang/MachineIndependent/limits.cpp",
+      "glslang/MachineIndependent/linkValidate.cpp",
+      "glslang/MachineIndependent/localintermediate.h",
+      "glslang/MachineIndependent/parseConst.cpp",
+      "glslang/MachineIndependent/parseVersions.h",
+      "glslang/MachineIndependent/preprocessor/Pp.cpp",
+      "glslang/MachineIndependent/preprocessor/PpAtom.cpp",
+      "glslang/MachineIndependent/preprocessor/PpContext.cpp",
+      "glslang/MachineIndependent/preprocessor/PpContext.h",
+      "glslang/MachineIndependent/preprocessor/PpScanner.cpp",
+      "glslang/MachineIndependent/preprocessor/PpTokens.cpp",
+      "glslang/MachineIndependent/preprocessor/PpTokens.h",
+      "glslang/MachineIndependent/propagateNoContraction.cpp",
+      "glslang/MachineIndependent/propagateNoContraction.h",
+      "glslang/MachineIndependent/reflection.cpp",
+      "glslang/MachineIndependent/reflection.h",
+      "glslang/OSDependent/osinclude.h",
+      "glslang/Public/ShaderLang.h",
     ]
-  }
-  if (is_win && !is_clang) {
-    cflags = [
-      "/wd4018",  # signed/unsigned mismatch
-      "/wd4189",  # local variable is initialized but not referenced
+
+    # Workaround gn issue complaining about these not being allowed even though GLSLANG_HLSL is not
+    # defined.
+    sources += [
+      "glslang/HLSL/hlslParseHelper.h",
+      "glslang/HLSL/hlslParseables.h",
+      "glslang/HLSL/hlslScanContext.h",
+      "glslang/HLSL/hlslTokens.h",
     ]
+
+    if (invoker.enable_hlsl) {
+      sources += [
+        "glslang/HLSL/hlslAttributes.cpp",
+        "glslang/HLSL/hlslAttributes.h",
+        "glslang/HLSL/hlslGrammar.cpp",
+        "glslang/HLSL/hlslGrammar.h",
+        "glslang/HLSL/hlslOpMap.cpp",
+        "glslang/HLSL/hlslOpMap.h",
+        "glslang/HLSL/hlslParseHelper.cpp",
+        "glslang/HLSL/hlslParseables.cpp",
+        "glslang/HLSL/hlslScanContext.cpp",
+        "glslang/HLSL/hlslTokenStream.cpp",
+        "glslang/HLSL/hlslTokenStream.h",
+      ]
+    }
+
+    defines = []
+    if (invoker.enable_opt) {
+      defines += [ "ENABLE_OPT=1" ]
+    }
+
+    if (is_win) {
+      sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]
+      defines += [ "GLSLANG_OSINCLUDE_WIN32" ]
+    } else {
+      sources += [ "glslang/OSDependent/Unix/ossource.cpp" ]
+      defines += [ "GLSLANG_OSINCLUDE_UNIX" ]
+    }
+
+    if (is_clang) {
+      cflags = [
+        "-Wno-extra-semi",
+        "-Wno-ignored-qualifiers",
+        "-Wno-implicit-fallthrough",
+        "-Wno-inconsistent-missing-override",
+        "-Wno-sign-compare",
+        "-Wno-unused-variable",
+        "-Wno-missing-field-initializers",
+        "-Wno-newline-eof",
+      ]
+    }
+    if (is_win && !is_clang) {
+      cflags = [
+        "/wd4018",  # signed/unsigned mismatch
+        "/wd4189",  # local variable is initialized but not referenced
+      ]
+    }
+
+    deps = [ ":glslang_build_info" ]
+
+    if (invoker.enable_opt) {
+      deps += [
+        "${spirv_tools_dir}:spvtools_opt",
+        "${spirv_tools_dir}:spvtools_val",
+      ]
+    }
+
+    include_dirs = [ "${target_gen_dir}/include" ]
+
+    configs -= _configs_to_remove
+    configs += _configs_to_add
   }
+}
 
-  deps = [
-    "${spirv_tools_dir}:spvtools_opt",
-    "${spirv_tools_dir}:spvtools_val",
-  ]
+glslang_sources_common("glslang_lib_sources") {
+  enable_opt = !glslang_angle
+  enable_hlsl = !glslang_angle
+}
 
-  configs -= _configs_to_remove
-  configs += _configs_to_add
+glslang_sources_common("glslang_sources") {
+  enable_opt = true
+  enable_hlsl = true
 }
 
 source_set("glslang_default_resource_limits_sources") {
   sources = [
     "StandAlone/ResourceLimits.cpp",
     "StandAlone/ResourceLimits.h",
-  ]
-  deps = [
-    ":glslang_sources",
+    "glslang/Include/ResourceLimits.h",
   ]
   public_configs = [ ":glslang_public" ]
 
@@ -228,20 +288,20 @@
   deps = [
     ":glslang_default_resource_limits_sources",
     ":glslang_sources",
+    ":glslang_build_info",
   ]
+  public_configs = [ ":glslang_hlsl" ]
+
+  include_dirs = [ "${target_gen_dir}/include" ]
 
   configs -= _configs_to_remove
   configs += _configs_to_add
 }
 
 executable("spirv-remap") {
-  sources = [
-    "StandAlone/spirv-remap.cpp",
-  ]
+  sources = [ "StandAlone/spirv-remap.cpp" ]
   defines = [ "ENABLE_OPT=1" ]
-  deps = [
-    ":glslang_sources",
-  ]
+  deps = [ ":glslang_sources" ]
 
   configs -= _configs_to_remove
   configs += _configs_to_add
diff --git a/CHANGES.md b/CHANGES.md
new file mode 100644
index 0000000..6328041
--- /dev/null
+++ b/CHANGES.md
@@ -0,0 +1,34 @@
+# Revision history for `glslang`
+
+All notable changes to this project will be documented in this file.
+This project adheres to [Semantic Versioning](https://semver.org/).
+
+## 11.0.0 2020-07-20
+
+### Breaking changes
+
+#### Visual Studio 2013 is no longer supported
+
+[As scheduled](https://github.com/KhronosGroup/glslang/blob/9eef54b2513ca6b40b47b07d24f453848b65c0df/README.md#planned-deprecationsremovals),
+Microsoft Visual Studio 2013 is no longer officially supported. Please upgrade
+to at least Visual Studio 2015.
+
+## 10.15.3847 2020-07-20
+
+### Breaking changes
+
+* The following files have been removed:
+  * `glslang/include/revision.h`
+  * `glslang/include/revision.template`
+
+The `GLSLANG_MINOR_VERSION` and `GLSLANG_PATCH_LEVEL` defines have been removed
+from the public headers. \
+Instead each build script now uses the new `build_info.py`
+script along with the `build_info.h.tmpl` and this `CHANGES.md` file to generate
+the glslang build-time generated header `glslang/build_info.h`.
+
+The new public API to obtain the `glslang` version is `glslang::GetVersion()`.
+
+### Other changes
+* `glslang` shared objects produced by CMake are now `SONAME` versioned using
+   [Semantic Versioning 2.0.0](https://semver.org/).
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cbf8378..f4a6fb1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,3 +1,39 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+project(glslang
+    LANGUAGES CXX)
+
 # increase to 3.1 once all major distributions
 # include a version of CMake >= 3.1
 cmake_minimum_required(VERSION 2.8.12)
@@ -24,6 +60,14 @@
     set(LIB_TYPE SHARED)
 endif()
 
+if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
+    # This logic inside SPIRV-Tools, which can upset build target dependencies
+    # if changed after targets are already defined. To prevent these issues,
+    # ensure CMAKE_BUILD_TYPE is assigned early and at the glslang root scope.
+    message(STATUS "No build type selected, default to Debug")
+    set(CMAKE_BUILD_TYPE "Debug")
+endif()
+
 option(SKIP_GLSLANG_INSTALL "Skip installation" ${SKIP_GLSLANG_INSTALL})
 if(NOT ${SKIP_GLSLANG_INSTALL})
   set(ENABLE_GLSLANG_INSTALL ON)
@@ -74,20 +118,6 @@
     endif(CCACHE_FOUND)
 endif()
 
-# 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" 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}")
-    # make PCHCPP file compile and generate PCH_NAME
-    set_source_files_properties(${PCHCPP} PROPERTIES COMPILE_FLAGS "/Ycpch.h /Fp${PCH_NAME} /Zm300" OBJECT_OUTPUTS "${PCH_NAME}")
-    list(APPEND ${SRCS} "${PCHCPP}")
-  endif()
-endmacro(glslang_pch)
-
-project(glslang)
-
 if(ENABLE_CTEST)
     include(CTest)
 endif()
@@ -128,6 +158,13 @@
     if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0.0")
         add_compile_options(-Werror=deprecated-copy)
     endif()
+
+    if(NOT CMAKE_VERSION VERSION_LESS "3.13")
+        # Error if there's symbols that are not found at link time.
+        # add_link_options() was added in CMake 3.13 - if using an earlier
+        # version don't set this - it should be caught by presubmits anyway.
+        add_link_options("-Wl,--no-undefined")
+    endif()
 elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC)
     add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
                         -Wunused-parameter -Wunused-value  -Wunused-variable)
@@ -138,9 +175,21 @@
     if(NOT ENABLE_EXCEPTIONS)
         add_compile_options(-fno-exceptions)
     endif()
+
+    if(NOT CMAKE_VERSION VERSION_LESS "3.13")
+        # Error if there's symbols that are not found at link time.
+        # add_link_options() was added in CMake 3.13 - if using an earlier
+        # version don't set this - it should be caught by presubmits anyway.
+        add_link_options("-Wl,-undefined,error")
+    endif()
 elseif(MSVC)
     if(NOT ENABLE_RTTI)
-        add_compile_options(/GR-) # Disable RTTI
+        string(FIND "${CMAKE_CXX_FLAGS}" "/GR" MSVC_HAS_GR)
+        if(MSVC_HAS_GR)
+            string(REGEX REPLACE /GR /GR- CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
+        else()
+            add_compile_options(/GR-) # Disable RTTI
+        endif()
     endif()
     if(ENABLE_EXCEPTIONS)
         add_compile_options(/EHsc) # Enable Exceptions
@@ -181,11 +230,92 @@
 
 # CMake needs to find the right version of python, right from the beginning,
 # otherwise, it will find the wrong version and fail later
-if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
-    find_package(PythonInterp 3 REQUIRED)
+find_package(PythonInterp 3 REQUIRED)
 
-	# We depend on these for later projects, so they should come first.
-	add_subdirectory(External)
+# Root directory for build-time generated include files
+set(GLSLANG_GENERATED_INCLUDEDIR "${CMAKE_BINARY_DIR}/include")
+
+################################################################################
+# Build version information generation
+################################################################################
+set(GLSLANG_CHANGES_FILE      "${CMAKE_CURRENT_SOURCE_DIR}/CHANGES.md")
+set(GLSLANG_BUILD_INFO_PY     "${CMAKE_CURRENT_SOURCE_DIR}/build_info.py")
+set(GLSLANG_BUILD_INFO_H_TMPL "${CMAKE_CURRENT_SOURCE_DIR}/build_info.h.tmpl")
+set(GLSLANG_BUILD_INFO_H      "${GLSLANG_GENERATED_INCLUDEDIR}/glslang/build_info.h")
+
+# Command to build the build_info.h file
+add_custom_command(
+    OUTPUT  ${GLSLANG_BUILD_INFO_H}
+    COMMAND ${PYTHON_EXECUTABLE} "${GLSLANG_BUILD_INFO_PY}"
+            ${CMAKE_CURRENT_SOURCE_DIR}
+            "-i" ${GLSLANG_BUILD_INFO_H_TMPL}
+            "-o" ${GLSLANG_BUILD_INFO_H}
+    DEPENDS ${GLSLANG_BUILD_INFO_PY}
+            ${GLSLANG_CHANGES_FILE}
+            ${GLSLANG_BUILD_INFO_H_TMPL}
+    COMMENT "Generating ${GLSLANG_BUILD_INFO_H}")
+
+# Target to build the build_info.h file
+add_custom_target(glslang-build-info DEPENDS ${GLSLANG_BUILD_INFO_H})
+
+# Populate the CMake GLSLANG_VERSION* variables with the build version
+# information.
+execute_process(
+    COMMAND ${PYTHON_EXECUTABLE} "${GLSLANG_BUILD_INFO_PY}"
+            ${CMAKE_CURRENT_SOURCE_DIR} "<major>.<minor>.<patch><-flavor>;<major>;<minor>;<patch>;<flavor>"
+    OUTPUT_VARIABLE "GLSLANG_VERSIONS"
+    OUTPUT_STRIP_TRAILING_WHITESPACE)
+list(GET "GLSLANG_VERSIONS" 0 "GLSLANG_VERSION")
+list(GET "GLSLANG_VERSIONS" 1 "GLSLANG_VERSION_MAJOR")
+list(GET "GLSLANG_VERSIONS" 2 "GLSLANG_VERSION_MINOR")
+list(GET "GLSLANG_VERSIONS" 3 "GLSLANG_VERSION_PATCH")
+list(GET "GLSLANG_VERSIONS" 4 "GLSLANG_VERSION_FLAVOR")
+configure_file(${GLSLANG_CHANGES_FILE} "${CMAKE_CURRENT_BINARY_DIR}/CHANGES.md") # Required to re-run cmake on version change
+
+# glslang_add_build_info_dependency() adds the glslang-build-info dependency and
+# generated include directories to target.
+function(glslang_add_build_info_dependency target)
+    target_include_directories(${target} PUBLIC $<BUILD_INTERFACE:${GLSLANG_GENERATED_INCLUDEDIR}>)
+    add_dependencies(${target} glslang-build-info)
+endfunction()
+
+# glslang_default_to_hidden_visibility() makes the symbol visibility hidden by
+# default for <target>.
+function(glslang_default_to_hidden_visibility target)
+    if(NOT WIN32)
+        target_compile_options(${target} PRIVATE "-fvisibility=hidden")
+    endif()
+endfunction()
+
+# glslang_only_export_explicit_symbols() makes the symbol visibility hidden by
+# default for <target>, and sets the GLSLANG_IS_SHARED_LIBRARY define, and 
+# GLSLANG_EXPORTING to 1 when specifically building <target>.
+function(glslang_only_export_explicit_symbols target)
+    glslang_default_to_hidden_visibility(${target})
+    if(BUILD_SHARED_LIBS)
+        target_compile_definitions(${target} PUBLIC "GLSLANG_IS_SHARED_LIBRARY=1")
+        if(WIN32)
+            target_compile_definitions(${target} PRIVATE "GLSLANG_EXPORTING=1")
+        endif()
+    endif()
+endfunction()
+
+# glslang_pch() adds precompiled header rules to <target> for the pre-compiled
+# header file <pch>. As target_precompile_headers() was added in CMake 3.16,
+# this is a no-op if called on earlier versions of CMake.
+if(NOT CMAKE_VERSION VERSION_LESS "3.16")
+    function(glslang_pch target pch)
+        target_precompile_headers(${target} PRIVATE ${pch})
+    endfunction()
+else()
+    function(glslang_pch target pch)
+    endfunction()
+    message("Your CMake version is ${CMAKE_VERSION}. Update to at least 3.16 to enable precompiled headers to speed up incremental builds")
+endif()
+
+if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
+    # We depend on these for later projects, so they should come first.
+    add_subdirectory(External)
 endif()
 
 if(NOT TARGET SPIRV-Tools-opt)
diff --git a/ChooseMSVCCRT.cmake b/ChooseMSVCCRT.cmake
index 2097881..b156126 100644
--- a/ChooseMSVCCRT.cmake
+++ b/ChooseMSVCCRT.cmake
@@ -1,3 +1,36 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 # The macro choose_msvc_crt() takes a list of possible
 # C runtimes to choose from, in the form of compiler flags,
 # to present to the user. (MTd for /MTd, etc)
diff --git a/External/CMakeLists.txt b/External/CMakeLists.txt
index 6ff4f47..cbabd2e 100644
--- a/External/CMakeLists.txt
+++ b/External/CMakeLists.txt
@@ -1,3 +1,36 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 # Suppress all warnings from external projects.
 set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -w)
 
diff --git a/LICENSE.txt b/LICENSE.txt
index a10c094..5f58565 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,6 +1,6 @@
 Here, glslang proper means core GLSL parsing, HLSL parsing, and SPIR-V code
-generation. Glslang proper requires use of two licenses, one that covers
-non-preprocessing and an additional one that covers preprocessing.
+generation. Glslang proper requires use of a number of licenses, one that covers
+preprocessing and others that covers non-preprocessing.
 
 Bison was removed long ago. You can build glslang from the source grammar,
 using tools of your choice, without using bison or any bison files.
@@ -23,6 +23,10 @@
 
 The core of glslang-proper, minus the preprocessor is licenced as follows:
 
+--------------------------------------------------------------------------------
+3-Clause BSD License
+--------------------------------------------------------------------------------
+
 //
 // Copyright (C) 2015-2018 Google, Inc.
 // Copyright (C) <various other dates and companies>
@@ -59,9 +63,281 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
+
+--------------------------------------------------------------------------------
+2-Clause BSD License
 --------------------------------------------------------------------------------
 
-The preprocessor has the core license stated above, plus an additional licence:
+Copyright 2020 The Khronos Group Inc
+
+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.
+
+
+--------------------------------------------------------------------------------
+The MIT License
+--------------------------------------------------------------------------------
+
+Copyright 2020 The Khronos Group Inc
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+--------------------------------------------------------------------------------
+APACHE LICENSE, VERSION 2.0
+--------------------------------------------------------------------------------
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+--------------------------------------------------------------------------------
+GPL 3 with special bison exception
+--------------------------------------------------------------------------------
+
+   Bison implementation for Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+   As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.
+
+--------------------------------------------------------------------------------
+================================================================================
+--------------------------------------------------------------------------------
+
+The preprocessor has the core licenses stated above, plus an additional licence:
 
 /****************************************************************************\
 Copyright (c) 2002, NVIDIA Corporation.
diff --git a/OGLCompilersDLL/CMakeLists.txt b/OGLCompilersDLL/CMakeLists.txt
index e009674..246b4e7 100644
--- a/OGLCompilersDLL/CMakeLists.txt
+++ b/OGLCompilersDLL/CMakeLists.txt
@@ -1,8 +1,42 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 set(SOURCES InitializeDll.cpp InitializeDll.h)
 
 add_library(OGLCompiler STATIC ${SOURCES})
 set_property(TARGET OGLCompiler PROPERTY FOLDER glslang)
 set_property(TARGET OGLCompiler PROPERTY POSITION_INDEPENDENT_CODE ON)
+glslang_default_to_hidden_visibility(OGLCompiler)
 
 if(WIN32)
     source_group("Source" FILES ${SOURCES})
diff --git a/OGLCompilersDLL/InitializeDll.cpp b/OGLCompilersDLL/InitializeDll.cpp
index abea910..ab3762e 100644
--- a/OGLCompilersDLL/InitializeDll.cpp
+++ b/OGLCompilersDLL/InitializeDll.cpp
@@ -32,134 +32,6 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#define SH_EXPORTING
-
-#include <cassert>
-
-#include "InitializeDll.h"
-#include "../glslang/Include/InitializeGlobals.h"
-#include "../glslang/Public/ShaderLang.h"
-#include "../glslang/Include/PoolAlloc.h"
-
 namespace glslang {
 
-OS_TLSIndex ThreadInitializeIndex = OS_INVALID_TLS_INDEX;
-
-// Per-process initialization.
-// Needs to be called at least once before parsing, etc. is done.
-// Will also do thread initialization for the calling thread; other
-// threads will need to do that explicitly.
-bool InitProcess()
-{
-    glslang::GetGlobalLock();
-
-    if (ThreadInitializeIndex != OS_INVALID_TLS_INDEX) {
-        //
-        // Function is re-entrant.
-        //
-
-        glslang::ReleaseGlobalLock();
-        return true;
-    }
-
-    ThreadInitializeIndex = OS_AllocTLSIndex();
-
-    if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) {
-        assert(0 && "InitProcess(): Failed to allocate TLS area for init flag");
-
-        glslang::ReleaseGlobalLock();
-        return false;
-    }
-
-    if (! InitializePoolIndex()) {
-        assert(0 && "InitProcess(): Failed to initialize global pool");
-
-        glslang::ReleaseGlobalLock();
-        return false;
-    }
-
-    if (! InitThread()) {
-        assert(0 && "InitProcess(): Failed to initialize thread");
-
-        glslang::ReleaseGlobalLock();
-        return false;
-    }
-
-    glslang::ReleaseGlobalLock();
-    return true;
-}
-
-// Per-thread scoped initialization.
-// Must be called at least once by each new thread sharing the
-// symbol tables, etc., needed to parse.
-bool InitThread()
-{
-    //
-    // This function is re-entrant
-    //
-    if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) {
-        assert(0 && "InitThread(): Process hasn't been initalised.");
-        return false;
-    }
-
-    if (OS_GetTLSValue(ThreadInitializeIndex) != 0)
-        return true;
-
-    if (! OS_SetTLSValue(ThreadInitializeIndex, (void *)1)) {
-        assert(0 && "InitThread(): Unable to set init flag.");
-        return false;
-    }
-
-    glslang::SetThreadPoolAllocator(nullptr);
-
-    return true;
-}
-
-// Not necessary to call this: InitThread() is reentrant, and the need
-// to do per thread tear down has been removed.
-//
-// This is kept, with memory management removed, to satisfy any exiting
-// calls to it that rely on it.
-bool DetachThread()
-{
-    bool success = true;
-
-    if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX)
-        return true;
-
-    //
-    // Function is re-entrant and this thread may not have been initialized.
-    //
-    if (OS_GetTLSValue(ThreadInitializeIndex) != 0) {
-        if (!OS_SetTLSValue(ThreadInitializeIndex, (void *)0)) {
-            assert(0 && "DetachThread(): Unable to clear init flag.");
-            success = false;
-        }
-    }
-
-    return success;
-}
-
-// Not necessary to call this: InitProcess() is reentrant.
-//
-// This is kept, with memory management removed, to satisfy any exiting
-// calls to it that rely on it.
-//
-// Users of glslang should call shFinalize() or glslang::FinalizeProcess() for
-// process-scoped memory tear down.
-bool DetachProcess()
-{
-    bool success = true;
-
-    if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX)
-        return true;
-
-    success = DetachThread();
-
-    OS_FreeTLSIndex(ThreadInitializeIndex);
-    ThreadInitializeIndex = OS_INVALID_TLS_INDEX;
-
-    return success;
-}
-
 } // end namespace glslang
diff --git a/OGLCompilersDLL/InitializeDll.h b/OGLCompilersDLL/InitializeDll.h
index 661cee4..b18e2ab 100644
--- a/OGLCompilersDLL/InitializeDll.h
+++ b/OGLCompilersDLL/InitializeDll.h
@@ -38,10 +38,10 @@
 
 namespace glslang {
 
-bool InitProcess();
-bool InitThread();
-bool DetachThread();  // not called from standalone, perhaps other tools rely on parts of it
-bool DetachProcess(); // not called from standalone, perhaps other tools rely on parts of it
+inline bool InitProcess()   { return true; } // DEPRECATED
+inline bool InitThread()    { return true; } // DEPRECATED
+inline bool DetachThread()  { return true; } // DEPRECATED
+inline bool DetachProcess() { return true; } // DEPRECATED
 
 } // end namespace glslang
 
diff --git a/README.md b/README.md
index ff844c0..330ec82 100755
--- a/README.md
+++ b/README.md
@@ -1,19 +1,26 @@
 # 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)
+1. Visual Studio 2013 is no longer supported
 
-## Planned Deprecations/Removals
+   [As scheduled](https://github.com/KhronosGroup/glslang/blob/9eef54b2513ca6b40b47b07d24f453848b65c0df/README.md#planned-deprecationsremovals),
+Microsoft Visual Studio 2013 is no longer officially supported. \
+   Please upgrade to at least Visual Studio 2015.
 
-1. **SPIRV Folder, 1-May, 2020.** Glslang, when installed through CMake,
+2. The versioning scheme is being improved, and you might notice some differences.  This is currently WIP, but will be coming soon.  See, for example, PR #2277.
+
+3. If you get a new **compilation error due to a missing header**, it might be caused by this planned removal:
+
+**SPIRV Folder, 1-May, 2020.** Glslang, when installed through CMake,
 will install a `SPIRV` folder into `${CMAKE_INSTALL_INCLUDEDIR}`.
 This `SPIRV` folder is being moved to `glslang/SPIRV`.
 During the transition the `SPIRV` folder will be installed into both locations.
 The old install of `SPIRV/` will be removed as a CMake install target no sooner than May 1, 2020.
 See issue #1964.
 
-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.
+If people are only using this location to get spirv.hpp, I recommend they get that from [SPIRV-Headers](https://github.com/KhronosGroup/SPIRV-Headers) instead.
+
+[![Build Status](https://travis-ci.org/KhronosGroup/glslang.svg?branch=master)](https://travis-ci.org/KhronosGroup/glslang)
+[![Build status](https://ci.appveyor.com/api/projects/status/q6fi9cb0qnhkla68/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/master)
 
 # Glslang Components and Status
 
diff --git a/SPIRV/CInterface/spirv_c_interface.cpp b/SPIRV/CInterface/spirv_c_interface.cpp
new file mode 100644
index 0000000..c88b808
--- /dev/null
+++ b/SPIRV/CInterface/spirv_c_interface.cpp
@@ -0,0 +1,110 @@
+/**
+    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"
+
+typedef struct glslang_program_s {
+    glslang::TProgram* program;
+    std::vector<unsigned int> spirv;
+    std::string loggerMessages;
+} glslang_program_t;
+
+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;
+}
+
+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();
+}
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
index 9040609..53ada4f 100644
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -1,3 +1,36 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 set(SOURCES
     GlslangToSpv.cpp
     InReadableOrder.cpp
@@ -6,11 +39,11 @@
     SpvPostProcess.cpp
     doc.cpp
     SpvTools.cpp
-    disassemble.cpp)
+    disassemble.cpp
+    CInterface/spirv_c_interface.cpp)
 
 set(SPVREMAP_SOURCES
-    SPVRemapper.cpp
-    doc.cpp)
+    SPVRemapper.cpp)
 
 set(HEADERS
     bitutils.h
@@ -35,14 +68,18 @@
     doc.h)
 
 add_library(SPIRV ${LIB_TYPE} ${SOURCES} ${HEADERS})
+target_link_libraries(SPIRV PRIVATE MachineIndependent)
 set_property(TARGET SPIRV PROPERTY FOLDER glslang)
 set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON)
 target_include_directories(SPIRV PUBLIC
-	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
-	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
+    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+
+glslang_add_build_info_dependency(SPIRV)
 
 if (ENABLE_SPVREMAPPER)
     add_library(SPVRemapper ${LIB_TYPE} ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
+    target_link_libraries(SPVRemapper PRIVATE SPIRV)
     set_property(TARGET SPVRemapper PROPERTY FOLDER glslang)
     set_property(TARGET SPVRemapper PROPERTY POSITION_INDEPENDENT_CODE ON)
 endif()
@@ -59,12 +96,10 @@
         PRIVATE ${spirv-tools_SOURCE_DIR}/include
         PRIVATE ${spirv-tools_SOURCE_DIR}/source
     )
-    target_link_libraries(SPIRV glslang SPIRV-Tools-opt)
+    target_link_libraries(SPIRV PRIVATE SPIRV-Tools-opt)
     target_include_directories(SPIRV PUBLIC
-		$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
-		$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
-else()
-    target_link_libraries(SPIRV glslang)
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
+        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
 endif(ENABLE_OPT)
 
 if(WIN32)
@@ -98,6 +133,5 @@
 
     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.EXT.h b/SPIRV/GLSL.ext.EXT.h
index 40164b6..6eb0eee 100644
--- a/SPIRV/GLSL.ext.EXT.h
+++ b/SPIRV/GLSL.ext.EXT.h
@@ -35,5 +35,6 @@
 static const char* const E_SPV_EXT_fragment_fully_covered = "SPV_EXT_fragment_fully_covered";
 static const char* const E_SPV_EXT_fragment_invocation_density = "SPV_EXT_fragment_invocation_density";
 static const char* const E_SPV_EXT_demote_to_helper_invocation = "SPV_EXT_demote_to_helper_invocation";
+static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_atomic_float_add";
 
 #endif  // #ifndef GLSLextEXT_H
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index e41bb5d..b14a3b2 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -56,7 +56,9 @@
 #include "../glslang/MachineIndependent/localintermediate.h"
 #include "../glslang/MachineIndependent/SymbolTable.h"
 #include "../glslang/Include/Common.h"
-#include "../glslang/Include/revision.h"
+
+// Build-time generated includes
+#include "glslang/build_info.h"
 
 #include <fstream>
 #include <iomanip>
@@ -1292,7 +1294,8 @@
     // basically samplerXXX/subpass/sampler/texture are all included
     // if they are the global-scope-class, not the function parameter
     // (or local, if they ever exist) class.
-    if (type.getBasicType() == glslang::EbtSampler)
+    if (type.getBasicType() == glslang::EbtSampler ||
+        type.getBasicType() == glslang::EbtAccStruct)
         return type.getQualifier().isUniformOrBuffer();
 
     // None of the above.
@@ -1710,16 +1713,19 @@
     spv::Id id = getSymbolId(symbol);
 
     if (builder.isPointer(id)) {
-        // Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
-        // Consider adding to the OpEntryPoint interface list.
-        // Only looking at structures if they have at least one member.
-        if (!symbol->getType().isStruct() || symbol->getType().getStruct()->size() > 0) {
-            spv::StorageClass sc = builder.getStorageClass(id);
-            // Before SPIR-V 1.4, we only want to include Input and Output.
-            // Starting with SPIR-V 1.4, we want all globals.
-            if ((glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4 && sc != spv::StorageClassFunction) ||
-                (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)) {
-                iOSet.insert(id);
+        if (!symbol->getType().getQualifier().isParamInput() &&
+            !symbol->getType().getQualifier().isParamOutput()) {
+            // Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
+            // Consider adding to the OpEntryPoint interface list.
+            // Only looking at structures if they have at least one member.
+            if (!symbol->getType().isStruct() || symbol->getType().getStruct()->size() > 0) {
+                spv::StorageClass sc = builder.getStorageClass(id);
+                // Before SPIR-V 1.4, we only want to include Input and Output.
+                // Starting with SPIR-V 1.4, we want all globals.
+                if ((glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4 && builder.isGlobalStorage(id)) ||
+                    (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)) {
+                    iOSet.insert(id);
+                }
             }
         }
 
@@ -2050,9 +2056,9 @@
         // 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)
-            );
+            spv::Id mat43 = builder.makeMatrixType(builder.makeFloatType(32), 4, 3);
+            spv::Id mat34 = builder.makeMatrixType(builder.makeFloatType(32), 3, 4);
+            std::pair<spv::Id, spv::Id> ret(mat43, mat34);
             return ret;
         }
         default:
@@ -2977,7 +2983,8 @@
                 // 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,
+                temporaryLvalues.push_back(builder.createVariable(
+                    spv::NoPrecision, spv::StorageClassFunction,
                     builder.accessChainGetInferredType(), "swizzleTemp"));
                 operands.push_back(temporaryLvalues.back());
             } else {
@@ -3080,7 +3087,7 @@
 
         for (unsigned int i = 0; i < temporaryLvalues.size(); ++i) {
             builder.setAccessChain(complexLvalues[i]);
-            builder.accessChainStore(builder.createLoad(temporaryLvalues[i]));
+            builder.accessChainStore(builder.createLoad(temporaryLvalues[i], spv::NoPrecision));
         }
     }
 
@@ -3197,7 +3204,8 @@
         } else {
             // We need control flow to select the result.
             // TODO: Once SPIR-V OpSelect allows arbitrary types, eliminate this path.
-            result = builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
+            result = builder.createVariable(TranslatePrecisionDecoration(node->getType()),
+                spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
 
             // Selection control:
             const spv::SelectionControlMask control = TranslateSelectionControl(*node);
@@ -3222,8 +3230,10 @@
     // Execute the one side needed, as per the condition
     const auto executeOneSide = [&]() {
         // Always emit control flow.
-        if (node->getBasicType() != glslang::EbtVoid)
-            result = builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
+        if (node->getBasicType() != glslang::EbtVoid) {
+            result = builder.createVariable(TranslatePrecisionDecoration(node->getType()), spv::StorageClassFunction,
+                convertGlslangToSpvType(node->getType()));
+        }
 
         // Selection control:
         const spv::SelectionControlMask control = TranslateSelectionControl(*node);
@@ -3420,15 +3430,17 @@
         builder.createLoopContinue();
         break;
     case glslang::EOpReturn:
-        if (node->getExpression()) {
+        if (node->getExpression() != nullptr) {
             const glslang::TType& glslangReturnType = node->getExpression()->getType();
             spv::Id returnId = accessChainLoad(glslangReturnType);
-            if (builder.getTypeId(returnId) != currentFunction->getReturnType()) {
+            if (builder.getTypeId(returnId) != currentFunction->getReturnType() ||
+                TranslatePrecisionDecoration(glslangReturnType) != currentFunction->getReturnPrecision()) {
                 builder.clearAccessChain();
-                spv::Id copyId = builder.createVariable(spv::StorageClassFunction, currentFunction->getReturnType());
+                spv::Id copyId = builder.createVariable(currentFunction->getReturnPrecision(),
+                    spv::StorageClassFunction, currentFunction->getReturnType());
                 builder.setAccessChainLValue(copyId);
                 multiTypeStore(glslangReturnType, returnId);
-                returnId = builder.createLoad(copyId);
+                returnId = builder.createLoad(copyId, currentFunction->getReturnPrecision());
             }
             builder.makeReturn(false, returnId);
         } else
@@ -3524,7 +3536,18 @@
     if (glslang::IsAnonymous(name))
         name = "";
 
-    return builder.createVariable(storageClass, spvType, name);
+    spv::Id initializer = spv::NoResult;
+
+    if (node->getType().getQualifier().storage == glslang::EvqUniform &&
+        !node->getConstArray().empty()) {
+            int nextConst = 0;
+            initializer = createSpvConstantFromConstUnionArray(node->getType(),
+                                                               node->getConstArray(),
+                                                               nextConst,
+                                                               false /* specConst */);
+    }
+
+    return builder.createVariable(spv::NoPrecision, storageClass, spvType, name, initializer);
 }
 
 // Return type Id of the sampled type.
@@ -4388,8 +4411,10 @@
     assert(qualifier == glslang::EvqIn ||
            qualifier == glslang::EvqOut ||
            qualifier == glslang::EvqInOut ||
+           qualifier == glslang::EvqUniform ||
            qualifier == glslang::EvqConstReadOnly);
-    return qualifier != glslang::EvqConstReadOnly;
+    return qualifier != glslang::EvqConstReadOnly &&
+           qualifier != glslang::EvqUniform;
 }
 
 // Is parameter pass-by-original?
@@ -4713,7 +4738,7 @@
         translateArguments(*node->getAsAggregate(), arguments, lvalueCoherentFlags);
     else
         translateArguments(*node->getAsUnaryNode(), arguments);
-    spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision());
+    spv::Decoration precision = TranslatePrecisionDecoration(node->getType());
 
     spv::Builder::TextureParameters params = { };
     params.sampler = arguments[0];
@@ -5317,7 +5342,7 @@
             ++lValueCount;
         } else if (writableParam(qualifiers[a])) {
             // need space to hold the copy
-            arg = builder.createVariable(spv::StorageClassFunction,
+            arg = builder.createVariable(function->getParamPrecision(a), 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
@@ -5330,12 +5355,14 @@
             ++lValueCount;
         } else {
             // process r-value, which involves a copy for a type mismatch
-            if (function->getParamType(a) != convertGlslangToSpvType(*argTypes[a])) {
-                spv::Id argCopy = builder.createVariable(spv::StorageClassFunction, function->getParamType(a), "arg");
+            if (function->getParamType(a) != convertGlslangToSpvType(*argTypes[a]) ||
+                TranslatePrecisionDecoration(*argTypes[a]) != function->getParamPrecision(a))
+            {
+                spv::Id argCopy = builder.createVariable(function->getParamPrecision(a), spv::StorageClassFunction, function->getParamType(a), "arg");
                 builder.clearAccessChain();
                 builder.setAccessChainLValue(argCopy);
                 multiTypeStore(*argTypes[a], rValues[rValueCount]);
-                arg = builder.createLoad(argCopy);
+                arg = builder.createLoad(argCopy, function->getParamPrecision(a));
             } else
                 arg = rValues[rValueCount];
             ++rValueCount;
@@ -5354,7 +5381,7 @@
             ++lValueCount;
         else if (writableParam(qualifiers[a])) {
             if (qualifiers[a] == glslang::EvqOut || qualifiers[a] == glslang::EvqInOut) {
-                spv::Id copy = builder.createLoad(spvArgs[a]);
+                spv::Id copy = builder.createLoad(spvArgs[a], spv::NoPrecision);
                 builder.setAccessChain(lValues[lValueCount]);
                 multiTypeStore(*argTypes[a], copy);
             }
@@ -5599,7 +5626,7 @@
     case glslang::EOpNotEqual:
     case glslang::EOpVectorNotEqual:
         if (isFloat)
-            binOp = spv::OpFOrdNotEqual;
+            binOp = spv::OpFUnordNotEqual;
         else if (isBool)
             binOp = spv::OpLogicalNotEqual;
         else
@@ -6297,7 +6324,7 @@
     case glslang::EOpConvFloatToBool:
         zero = builder.makeFloatConstant(0.0F);
         zero = makeSmearedConstant(zero, vectorSize);
-        return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
+        return builder.createBinOp(spv::OpFUnordNotEqual, destType, operand, zero);
     case glslang::EOpConvBoolToFloat:
         convOp = spv::OpSelect;
         zero = builder.makeFloatConstant(0.0F);
@@ -6446,11 +6473,11 @@
     case glslang::EOpConvDoubleToBool:
         zero = builder.makeDoubleConstant(0.0);
         zero = makeSmearedConstant(zero, vectorSize);
-        return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
+        return builder.createBinOp(spv::OpFUnordNotEqual, destType, operand, zero);
     case glslang::EOpConvFloat16ToBool:
         zero = builder.makeFloat16Constant(0.0F);
         zero = makeSmearedConstant(zero, vectorSize);
-        return builder.createBinOp(spv::OpFOrdNotEqual, destType, operand, zero);
+        return builder.createBinOp(spv::OpFUnordNotEqual, destType, operand, zero);
     case glslang::EOpConvBoolToDouble:
         convOp = spv::OpSelect;
         zero = builder.makeDoubleConstant(0.0);
@@ -6655,6 +6682,14 @@
     case glslang::EOpImageAtomicAdd:
     case glslang::EOpAtomicCounterAdd:
         opCode = spv::OpAtomicIAdd;
+        if (typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) {
+            opCode = spv::OpAtomicFAddEXT;
+            builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_add);
+            if (typeProxy == glslang::EbtFloat)
+                builder.addCapability(spv::CapabilityAtomicFloat32AddEXT);
+            else
+                builder.addCapability(spv::CapabilityAtomicFloat64AddEXT);
+        }
         break;
     case glslang::EOpAtomicCounterSubtract:
         opCode = spv::OpAtomicISub;
@@ -8270,6 +8305,18 @@
 
     // We now know we have a specialization constant to build
 
+    // Extra capabilities may be needed.
+    if (node.getType().contains8BitInt())
+        builder.addCapability(spv::CapabilityInt8);
+    if (node.getType().contains16BitFloat())
+        builder.addCapability(spv::CapabilityFloat16);
+    if (node.getType().contains16BitInt())
+        builder.addCapability(spv::CapabilityInt16);
+    if (node.getType().contains64BitInt())
+        builder.addCapability(spv::CapabilityInt64);
+    if (node.getType().containsDouble())
+        builder.addCapability(spv::CapabilityFloat64);
+
     // 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) {
@@ -8625,7 +8672,9 @@
     // 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 8; // switch to new dead block eliminator; use OpUnreachable
+    // return 8; // switch to new dead block eliminator; use OpUnreachable
+    // return 9; // don't include opaque function parameters in OpEntryPoint global's operand list
+    return 10; // Generate OpFUnordNotEqual for != comparisons
 }
 
 // Write SPIR-V out to a binary file
@@ -8650,9 +8699,10 @@
     out.open(baseName, std::ios::binary | std::ios::out);
     if (out.fail())
         printf("ERROR: Failed to open file: %s\n", baseName);
-    out << "\t// " << 
-        GetSpirvGeneratorVersion() << "." << GLSLANG_MINOR_VERSION << "." << GLSLANG_PATCH_LEVEL <<
-        std::endl;
+    out << "\t// " <<
+        GetSpirvGeneratorVersion() <<
+        GLSLANG_VERSION_MAJOR << "." << GLSLANG_VERSION_MINOR << "." << GLSLANG_VERSION_PATCH <<
+        GLSLANG_VERSION_FLAVOR << std::endl;
     if (varName != nullptr) {
         out << "\t #pragma once" << std::endl;
         out << "const uint32_t " << varName << "[] = {" << std::endl;
@@ -8708,10 +8758,14 @@
     // If from HLSL, run spirv-opt to "legalize" the SPIR-V for Vulkan
     // eg. forward and remove memory writes of opaque types.
     bool prelegalization = intermediate.getSource() == EShSourceHlsl;
-    if ((intermediate.getSource() == EShSourceHlsl || options->optimizeSize) && !options->disableOptimizer) {
-        SpirvToolsLegalize(intermediate, spirv, logger, options);
+    if ((prelegalization || options->optimizeSize) && !options->disableOptimizer) {
+        SpirvToolsTransform(intermediate, spirv, logger, options);
         prelegalization = false;
     }
+    else if (options->stripDebugInfo) {
+        // Strip debug info even if optimization is disabled.
+        SpirvToolsStripDebugInfo(intermediate, spirv, logger);
+    }
 
     if (options->validate)
         SpirvToolsValidate(intermediate, spirv, logger, prelegalization);
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index 6cf70a1..582b6cb 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -1297,9 +1297,12 @@
 
     // Set up the precisions
     setPrecision(function->getId(), precision);
+    function->setReturnPrecision(precision);
     for (unsigned p = 0; p < (unsigned)decorations.size(); ++p) {
-        for (int d = 0; d < (int)decorations[p].size(); ++d)
+        for (int d = 0; d < (int)decorations[p].size(); ++d) {
             addDecoration(firstParamId + p, decorations[p][d]);
+            function->addParamPrecision(p, decorations[p][d]);
+        }
     }
 
     // CFG
@@ -1356,7 +1359,7 @@
 }
 
 // Comments in header
-Id Builder::createVariable(StorageClass storageClass, Id type, const char* name, Id initializer)
+Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id type, const char* name, Id initializer)
 {
     Id pointerType = makePointer(storageClass, type);
     Instruction* inst = new Instruction(getUniqueId(), pointerType, OpVariable);
@@ -1378,6 +1381,7 @@
 
     if (name)
         addName(inst->getResultId(), name);
+    setPrecision(inst->getResultId(), precision);
 
     return inst->getResultId();
 }
@@ -1434,7 +1438,8 @@
 }
 
 // Comments in header
-Id Builder::createLoad(Id lValue, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment)
+Id Builder::createLoad(Id lValue, spv::Decoration precision, spv::MemoryAccessMask memoryAccess,
+    spv::Scope scope, unsigned int alignment)
 {
     Instruction* load = new Instruction(getUniqueId(), getDerefTypeId(lValue), OpLoad);
     load->addIdOperand(lValue);
@@ -1452,6 +1457,7 @@
     }
 
     buildPoint->addInstruction(std::unique_ptr<Instruction>(load));
+    setPrecision(load->getResultId(), precision);
 
     return load->getResultId();
 }
@@ -2166,7 +2172,7 @@
         Op op;
         switch (getMostBasicTypeClass(valueType)) {
         case OpTypeFloat:
-            op = equal ? OpFOrdEqual : OpFOrdNotEqual;
+            op = equal ? OpFOrdEqual : OpFUnordNotEqual;
             break;
         case OpTypeInt:
         default:
@@ -2674,7 +2680,7 @@
     // If swizzle still exists, it is out-of-order or not full, we must load the target vector,
     // extract and insert elements to perform writeMask and/or swizzle.
     if (accessChain.swizzle.size() > 0) {
-        Id tempBaseId = createLoad(base);
+        Id tempBaseId = createLoad(base, spv::NoPrecision);
         source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, source, accessChain.swizzle);
     }
 
@@ -2713,17 +2719,19 @@
 
             if (constant) {
                 id = createCompositeExtract(accessChain.base, swizzleBase, indexes);
+                setPrecision(id, precision);
             } else {
                 Id lValue = NoResult;
-                if (spvVersion >= Spv_1_4) {
+                if (spvVersion >= Spv_1_4 && isValidInitializer(accessChain.base)) {
                     // make a new function variable for this r-value, using an initializer,
                     // and mark it as NonWritable so that downstream it can be detected as a lookup
                     // table
-                    lValue = createVariable(StorageClassFunction, getTypeId(accessChain.base), "indexable",
-                        accessChain.base);
+                    lValue = createVariable(NoPrecision, StorageClassFunction, getTypeId(accessChain.base),
+                        "indexable", accessChain.base);
                     addDecoration(lValue, DecorationNonWritable);
                 } else {
-                    lValue = createVariable(StorageClassFunction, getTypeId(accessChain.base), "indexable");
+                    lValue = createVariable(NoPrecision, StorageClassFunction, getTypeId(accessChain.base),
+                        "indexable");
                     // store into it
                     createStore(accessChain.base, lValue);
                 }
@@ -2732,9 +2740,8 @@
                 accessChain.isRValue = false;
 
                 // load through the access chain
-                id = createLoad(collapseAccessChain());
+                id = createLoad(collapseAccessChain(), precision);
             }
-            setPrecision(id, precision);
         } else
             id = accessChain.base;  // no precision, it was set when this was defined
     } else {
@@ -2753,8 +2760,7 @@
         // loaded image types get decorated. TODO: This should maybe move to
         // createImageTextureFunctionCall.
         addDecoration(id, nonUniform);
-        id = createLoad(id, memoryAccess, scope, alignment);
-        setPrecision(id, precision);
+        id = createLoad(id, precision, memoryAccess, scope, alignment);
         addDecoration(id, nonUniform);
     }
 
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index 71b90d6..83a7116 100644
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -248,6 +248,13 @@
         { return module.getInstruction(resultId)->getImmediateOperand(0); }
     StorageClass getStorageClass(Id resultId) const { return getTypeStorageClass(getTypeId(resultId)); }
 
+    bool isVariableOpCode(Op opcode) const { return opcode == OpVariable; }
+    bool isVariable(Id resultId) const { return isVariableOpCode(getOpCode(resultId)); }
+    bool isGlobalStorage(Id resultId) const { return getStorageClass(resultId) != StorageClassFunction; }
+    bool isGlobalVariable(Id resultId) const { return isVariable(resultId) && isGlobalStorage(resultId); }
+    // See if a resultId is valid for use as an initializer.
+    bool isValidInitializer(Id resultId) const { return isConstant(resultId) || isGlobalVariable(resultId); }
+
     int getScalarTypeWidth(Id typeId) const
     {
         Id scalarTypeId = getScalarTypeId(typeId);
@@ -347,7 +354,8 @@
     void makeDiscard();
 
     // Create a global or function local or IO variable.
-    Id createVariable(StorageClass, Id type, const char* name = 0, Id initializer = NoResult);
+    Id createVariable(Decoration precision, StorageClass, Id type, const char* name = nullptr,
+        Id initializer = NoResult);
 
     // Create an intermediate with an undefined value.
     Id createUndefined(Id type);
@@ -357,7 +365,8 @@
         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,
+    Id createLoad(Id lValue, spv::Decoration precision,
+        spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone,
         spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
 
     // Create an OpAccessChain instruction
diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp
index 1e968ba..6d4d9ef 100644
--- a/SPIRV/SpvTools.cpp
+++ b/SPIRV/SpvTools.cpp
@@ -80,6 +80,39 @@
     return spv_target_env::SPV_ENV_UNIVERSAL_1_0;
 }
 
+// Callback passed to spvtools::Optimizer::SetMessageConsumer
+void OptimizerMesssageConsumer(spv_message_level_t level, const char *source,
+        const spv_position_t &position, const char *message)
+{
+    auto &out = std::cerr;
+    switch (level)
+    {
+    case SPV_MSG_FATAL:
+    case SPV_MSG_INTERNAL_ERROR:
+    case SPV_MSG_ERROR:
+        out << "error: ";
+        break;
+    case SPV_MSG_WARNING:
+        out << "warning: ";
+        break;
+    case SPV_MSG_INFO:
+    case SPV_MSG_DEBUG:
+        out << "info: ";
+        break;
+    default:
+        break;
+    }
+    if (source)
+    {
+        out << source << ":";
+    }
+    out << position.line << ":" << position.column << ":" << position.index << ":";
+    if (message)
+    {
+        out << " " << message;
+    }
+    out << std::endl;
+}
 
 // Use the SPIRV-Tools disassembler to print SPIR-V.
 void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv)
@@ -128,45 +161,14 @@
     spvContextDestroy(context);
 }
 
-// Apply the SPIRV-Tools optimizer to generated SPIR-V, for the purpose of
-// legalizing HLSL SPIR-V.
-void SpirvToolsLegalize(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
-                        spv::SpvBuildLogger* logger, const SpvOptions* options)
+// Apply the SPIRV-Tools optimizer to generated SPIR-V.  HLSL SPIR-V is legalized in the process.
+void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+                         spv::SpvBuildLogger* logger, const SpvOptions* options)
 {
     spv_target_env target_env = SPV_ENV_UNIVERSAL_1_2;
 
     spvtools::Optimizer optimizer(target_env);
-    optimizer.SetMessageConsumer(
-        [](spv_message_level_t level, const char *source, const spv_position_t &position, const char *message) {
-            auto &out = std::cerr;
-            switch (level)
-            {
-            case SPV_MSG_FATAL:
-            case SPV_MSG_INTERNAL_ERROR:
-            case SPV_MSG_ERROR:
-                out << "error: ";
-                break;
-            case SPV_MSG_WARNING:
-                out << "warning: ";
-                break;
-            case SPV_MSG_INFO:
-            case SPV_MSG_DEBUG:
-                out << "info: ";
-                break;
-            default:
-                break;
-            }
-            if (source)
-            {
-                out << source << ":";
-            }
-            out << position.line << ":" << position.column << ":" << position.index << ":";
-            if (message)
-            {
-                out << " " << message;
-            }
-            out << std::endl;
-        });
+    optimizer.SetMessageConsumer(OptimizerMesssageConsumer);
 
     // If debug (specifically source line info) is being generated, propagate
     // line information into all SPIR-V instructions. This avoids loss of
@@ -175,6 +177,9 @@
     if (options->generateDebugInfo) {
         optimizer.RegisterPass(spvtools::CreatePropagateLineInfoPass());
     }
+    else if (options->stripDebugInfo) {
+        optimizer.RegisterPass(spvtools::CreateStripDebugInfoPass());
+    }
     optimizer.RegisterPass(spvtools::CreateWrapOpKillPass());
     optimizer.RegisterPass(spvtools::CreateDeadBranchElimPass());
     optimizer.RegisterPass(spvtools::CreateMergeReturnPass());
@@ -212,6 +217,25 @@
     optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
 }
 
+// Apply the SPIRV-Tools optimizer to strip debug info from SPIR-V.  This is implicitly done by
+// SpirvToolsTransform if spvOptions->stripDebugInfo is set, but can be called separately if
+// optimization is disabled.
+void SpirvToolsStripDebugInfo(const glslang::TIntermediate& intermediate,
+        std::vector<unsigned int>& spirv, spv::SpvBuildLogger* logger)
+{
+    spv_target_env target_env = SPV_ENV_UNIVERSAL_1_2;
+
+    spvtools::Optimizer optimizer(target_env);
+    optimizer.SetMessageConsumer(OptimizerMesssageConsumer);
+
+    optimizer.RegisterPass(spvtools::CreateStripDebugInfoPass());
+
+    spvtools::OptimizerOptions spvOptOptions;
+    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);
+}
+
 }; // end namespace glslang
 
 #endif
diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h
index 59c914d..7779dfa 100644
--- a/SPIRV/SpvTools.h
+++ b/SPIRV/SpvTools.h
@@ -52,9 +52,10 @@
 namespace glslang {
 
 struct SpvOptions {
-    SpvOptions() : generateDebugInfo(false), disableOptimizer(true),
+    SpvOptions() : generateDebugInfo(false), stripDebugInfo(false), disableOptimizer(true),
         optimizeSize(false), disassemble(false), validate(false) { }
     bool generateDebugInfo;
+    bool stripDebugInfo;
     bool disableOptimizer;
     bool optimizeSize;
     bool disassemble;
@@ -70,10 +71,15 @@
 void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
                         spv::SpvBuildLogger*, bool prelegalization);
 
-// Apply the SPIRV-Tools optimizer to generated SPIR-V, for the purpose of
-// legalizing HLSL SPIR-V.
-void SpirvToolsLegalize(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
-                        spv::SpvBuildLogger*, const SpvOptions*);
+// Apply the SPIRV-Tools optimizer to generated SPIR-V.  HLSL SPIR-V is legalized in the process.
+void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+                         spv::SpvBuildLogger*, const SpvOptions*);
+
+// Apply the SPIRV-Tools optimizer to strip debug info from SPIR-V.  This is implicitly done by
+// SpirvToolsTransform if spvOptions->stripDebugInfo is set, but can be called separately if
+// optimization is disabled.
+void SpirvToolsStripDebugInfo(const glslang::TIntermediate& intermediate,
+        std::vector<unsigned int>& spirv, spv::SpvBuildLogger*);
 
 #endif
 
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
index b1f2b82..4829bb4 100644
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -938,6 +938,9 @@
 
     case CapabilityIntegerFunctions2INTEL:              return "CapabilityIntegerFunctions2INTEL";
 
+    case CapabilityAtomicFloat32AddEXT:                     return "AtomicFloat32AddEXT";
+    case CapabilityAtomicFloat64AddEXT:                     return "AtomicFloat64AddEXT";
+
     default: return "Bad";
     }
 }
@@ -1313,6 +1316,8 @@
     case 4430: return "OpSubgroupAllEqualKHR";
     case 4432: return "OpSubgroupReadInvocationKHR";
 
+    case OpAtomicFAddEXT: return "OpAtomicFAddEXT";
+
     case 5000: return "OpGroupIAddNonUniformAMD";
     case 5001: return "OpGroupFAddNonUniformAMD";
     case 5002: return "OpGroupFMinNonUniformAMD";
@@ -2260,6 +2265,11 @@
     InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'");
     InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'");
 
+    InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Pointer'");
+    InstructionDesc[OpAtomicFAddEXT].operands.push(OperandScope, "'Scope'");
+    InstructionDesc[OpAtomicFAddEXT].operands.push(OperandMemorySemantics, "'Semantics'");
+    InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Value'");
+
     InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'");
     InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'");
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index dae36cf..35482ea 100644
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -168,6 +168,10 @@
     ExecutionModeSampleInterlockUnorderedEXT = 5369,
     ExecutionModeShadingRateInterlockOrderedEXT = 5370,
     ExecutionModeShadingRateInterlockUnorderedEXT = 5371,
+    ExecutionModeMaxWorkgroupSizeINTEL = 5893,
+    ExecutionModeMaxWorkDimINTEL = 5894,
+    ExecutionModeNoGlobalOffsetINTEL = 5895,
+    ExecutionModeNumSIMDWorkitemsINTEL = 5896,
     ExecutionModeMax = 0x7fffffff,
 };
 
@@ -199,6 +203,7 @@
     StorageClassShaderRecordBufferNV = 5343,
     StorageClassPhysicalStorageBuffer = 5349,
     StorageClassPhysicalStorageBufferEXT = 5349,
+    StorageClassCodeSectionINTEL = 5605,
     StorageClassMax = 0x7fffffff,
 };
 
@@ -477,11 +482,24 @@
     DecorationRestrictPointerEXT = 5355,
     DecorationAliasedPointer = 5356,
     DecorationAliasedPointerEXT = 5356,
+    DecorationReferencedIndirectlyINTEL = 5602,
     DecorationCounterBuffer = 5634,
     DecorationHlslCounterBufferGOOGLE = 5634,
     DecorationHlslSemanticGOOGLE = 5635,
     DecorationUserSemantic = 5635,
     DecorationUserTypeGOOGLE = 5636,
+    DecorationRegisterINTEL = 5825,
+    DecorationMemoryINTEL = 5826,
+    DecorationNumbanksINTEL = 5827,
+    DecorationBankwidthINTEL = 5828,
+    DecorationMaxPrivateCopiesINTEL = 5829,
+    DecorationSinglepumpINTEL = 5830,
+    DecorationDoublepumpINTEL = 5831,
+    DecorationMaxReplicatesINTEL = 5832,
+    DecorationSimpleDualPortINTEL = 5833,
+    DecorationMergeINTEL = 5834,
+    DecorationBankBitsINTEL = 5835,
+    DecorationForcePow2DepthINTEL = 5836,
     DecorationMax = 0x7fffffff,
 };
 
@@ -628,6 +646,13 @@
     LoopControlIterationMultipleShift = 6,
     LoopControlPeelCountShift = 7,
     LoopControlPartialCountShift = 8,
+    LoopControlInitiationIntervalINTELShift = 16,
+    LoopControlMaxConcurrencyINTELShift = 17,
+    LoopControlDependencyArrayINTELShift = 18,
+    LoopControlPipelineEnableINTELShift = 19,
+    LoopControlLoopCoalesceINTELShift = 20,
+    LoopControlMaxInterleavingINTELShift = 21,
+    LoopControlSpeculatedIterationsINTELShift = 22,
     LoopControlMax = 0x7fffffff,
 };
 
@@ -642,6 +667,13 @@
     LoopControlIterationMultipleMask = 0x00000040,
     LoopControlPeelCountMask = 0x00000080,
     LoopControlPartialCountMask = 0x00000100,
+    LoopControlInitiationIntervalINTELMask = 0x00010000,
+    LoopControlMaxConcurrencyINTELMask = 0x00020000,
+    LoopControlDependencyArrayINTELMask = 0x00040000,
+    LoopControlPipelineEnableINTELMask = 0x00080000,
+    LoopControlLoopCoalesceINTELMask = 0x00100000,
+    LoopControlMaxInterleavingINTELMask = 0x00200000,
+    LoopControlSpeculatedIterationsINTELMask = 0x00400000,
 };
 
 enum FunctionControlShift {
@@ -928,9 +960,20 @@
     CapabilitySubgroupImageBlockIOINTEL = 5570,
     CapabilitySubgroupImageMediaBlockIOINTEL = 5579,
     CapabilityIntegerFunctions2INTEL = 5584,
+    CapabilityFunctionPointersINTEL = 5603,
+    CapabilityIndirectReferencesINTEL = 5604,
     CapabilitySubgroupAvcMotionEstimationINTEL = 5696,
     CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
     CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
+    CapabilityFPGAMemoryAttributesINTEL = 5824,
+    CapabilityUnstructuredLoopControlsINTEL = 5886,
+    CapabilityFPGALoopControlsINTEL = 5888,
+    CapabilityKernelAttributesINTEL = 5892,
+    CapabilityFPGAKernelAttributesINTEL = 5897,
+    CapabilityBlockingPipesINTEL = 5945,
+    CapabilityFPGARegINTEL = 5948,
+    CapabilityAtomicFloat32AddEXT = 6033,
+    CapabilityAtomicFloat64AddEXT = 6034,
     CapabilityMax = 0x7fffffff,
 };
 
@@ -1398,6 +1441,8 @@
     OpUSubSatINTEL = 5596,
     OpIMul32x16INTEL = 5597,
     OpUMul32x16INTEL = 5598,
+    OpFunctionPointerINTEL = 5600,
+    OpFunctionPointerCallINTEL = 5601,
     OpDecorateString = 5632,
     OpDecorateStringGOOGLE = 5632,
     OpMemberDecorateString = 5633,
@@ -1520,6 +1565,10 @@
     OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
     OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
     OpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
+    OpLoopControlINTEL = 5887,
+    OpReadPipeBlockingINTEL = 5946,
+    OpWritePipeBlockingINTEL = 5947,
+    OpFPGARegINTEL = 5949,
     OpRayQueryGetRayTMinKHR = 6016,
     OpRayQueryGetRayFlagsKHR = 6017,
     OpRayQueryGetIntersectionTKHR = 6018,
@@ -1537,6 +1586,7 @@
     OpRayQueryGetWorldRayOriginKHR = 6030,
     OpRayQueryGetIntersectionObjectToWorldKHR = 6031,
     OpRayQueryGetIntersectionWorldToObjectKHR = 6032,
+    OpAtomicFAddEXT = 6035,
     OpMax = 0x7fffffff,
 };
 
@@ -1955,6 +2005,8 @@
     case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
     case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
     case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
+    case OpFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break;
     case OpDecorateString: *hasResult = false; *hasResultType = false; break;
     case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
     case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
@@ -2075,6 +2127,10 @@
     case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break;
     case OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break;
     case OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break;
     case OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break;
@@ -2092,6 +2148,7 @@
     case OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break;
     case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;
     case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
+    case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break;
     }
 }
 #endif /* SPV_ENABLE_UTILITY_CODE */
diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
index 6523035..868b9bf 100755
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -55,6 +55,7 @@
 #include <iostream>
 #include <memory>
 #include <vector>
+#include <set>
 
 namespace spv {
 
@@ -351,10 +352,28 @@
     const std::vector<Block*>& getBlocks() const { return blocks; }
     void addLocalVariable(std::unique_ptr<Instruction> inst);
     Id getReturnType() const { return functionInstruction.getTypeId(); }
+    void setReturnPrecision(Decoration precision)
+    {
+        if (precision == DecorationRelaxedPrecision)
+            reducedPrecisionReturn = true;
+    }
+    Decoration getReturnPrecision() const
+        { return reducedPrecisionReturn ? DecorationRelaxedPrecision : NoPrecision; }
 
     void setImplicitThis() { implicitThis = true; }
     bool hasImplicitThis() const { return implicitThis; }
 
+    void addParamPrecision(unsigned param, Decoration precision)
+    {
+        if (precision == DecorationRelaxedPrecision)
+            reducedPrecisionParams.insert(param);
+    }
+    Decoration getParamPrecision(unsigned param) const
+    {
+        return reducedPrecisionParams.find(param) != reducedPrecisionParams.end() ?
+            DecorationRelaxedPrecision : NoPrecision;
+    }
+
     void dump(std::vector<unsigned int>& out) const
     {
         // OpFunction
@@ -379,6 +398,8 @@
     std::vector<Instruction*> parameterInstructions;
     std::vector<Block*> blocks;
     bool implicitThis;  // true if this is a member function expecting to be passed a 'this' as the first argument
+    bool reducedPrecisionReturn;
+    std::set<int> reducedPrecisionParams;  // list of parameter indexes that need a relaxed precision arg
 };
 
 //
@@ -439,7 +460,8 @@
 // - the OpFunction instruction
 // - all the OpFunctionParameter instructions
 __inline Function::Function(Id id, Id resultType, Id functionType, Id firstParamId, Module& parent)
-    : parent(parent), functionInstruction(id, resultType, OpFunction), implicitThis(false)
+    : parent(parent), functionInstruction(id, resultType, OpFunction), implicitThis(false),
+      reducedPrecisionReturn(false)
 {
     // OpFunction
     functionInstruction.addImmediateOperand(FunctionControlMaskNone);
diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt
index 591ac34..8038c04 100644
--- a/StandAlone/CMakeLists.txt
+++ b/StandAlone/CMakeLists.txt
@@ -1,3 +1,36 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 add_library(glslang-default-resource-limits
             ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/resource_limits_c.cpp)
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index a7ce53d..8836812 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -44,7 +44,6 @@
 #include "Worklist.h"
 #include "DirStackFileIncluder.h"
 #include "./../glslang/Include/ShHandle.h"
-#include "./../glslang/Include/revision.h"
 #include "./../glslang/Public/ShaderLang.h"
 #include "../SPIRV/GlslangToSpv.h"
 #include "../SPIRV/GLSL.std.450.h"
@@ -62,8 +61,11 @@
 
 #include "../glslang/OSDependent/osinclude.h"
 
+// Build-time generated includes
+#include "glslang/build_info.h"
+
 extern "C" {
-    SH_IMPORT_EXPORT void ShOutputHtml();
+    GLSLANG_EXPORT void ShOutputHtml();
 }
 
 // Command-line options
@@ -106,6 +108,8 @@
 bool SpvToolsDisassembler = false;
 bool SpvToolsValidate = false;
 bool NaNClamp = false;
+bool stripDebugInfo = false;
+bool beQuiet = false;
 
 //
 // Return codes from main/exit().
@@ -555,6 +559,12 @@
                         ReflectOptions |= EShReflectionAllBlockVariables;
                     } else if (lowerword == "reflect-unwrap-io-blocks") {
                         ReflectOptions |= EShReflectionUnwrapIOBlocks;
+                    } else if (lowerword == "reflect-all-io-variables") {
+                        ReflectOptions |= EShReflectionAllIOVariables;
+                    } else if (lowerword == "reflect-shared-std140-ubo") {
+                        ReflectOptions |= EShReflectionSharedStd140UBO;
+                    } else if (lowerword == "reflect-shared-std140-ssbo") {
+                        ReflectOptions |= EShReflectionSharedStd140SSBO;
                     } else if (lowerword == "resource-set-bindings" ||  // synonyms
                                lowerword == "resource-set-binding"  ||
                                lowerword == "rsb") {
@@ -654,6 +664,8 @@
                         variableName = argv[1];
                         bumpArg();
                         break;
+                    } else if (lowerword == "quiet") {
+                        beQuiet = true;
                     } else if (lowerword == "version") {
                         Options |= EOptionDumpVersions;
                     } else if (lowerword == "help") {
@@ -744,7 +756,13 @@
                     Error("-f: expected hlsl_functionality1");
                 break;
             case 'g':
-                Options |= EOptionDebug;
+                // Override previous -g or -g0 argument
+                stripDebugInfo = false;
+                Options &= ~EOptionDebug;
+                if (argv[0][2] == '0')
+                    stripDebugInfo = true;
+                else
+                    Options |= EOptionDebug;
                 break;
             case 'h':
                 usage();
@@ -1095,7 +1113,8 @@
 
         if (! (Options & EOptionSuppressInfolog) &&
             ! (Options & EOptionMemoryLeakMode)) {
-            PutsIfNonEmpty(compUnit.fileName[0].c_str());
+            if (!beQuiet)
+                PutsIfNonEmpty(compUnit.fileName[0].c_str());
             PutsIfNonEmpty(shader->getInfoLog());
             PutsIfNonEmpty(shader->getInfoDebugLog());
         }
@@ -1144,6 +1163,8 @@
                     glslang::SpvOptions spvOptions;
                     if (Options & EOptionDebug)
                         spvOptions.generateDebugInfo = true;
+                    else if (stripDebugInfo)
+                        spvOptions.stripDebugInfo = true;
                     spvOptions.disableOptimizer = (Options & EOptionOptimizeDisable) != 0;
                     spvOptions.optimizeSize = (Options & EOptionOptimizeSize) != 0;
                     spvOptions.disassemble = SpvToolsDisassembler;
@@ -1259,13 +1280,13 @@
 #endif
 
     if (Options & EOptionDumpBareVersion) {
-        printf("%d.%d.%d\n",
-            glslang::GetSpirvGeneratorVersion(), GLSLANG_MINOR_VERSION, GLSLANG_PATCH_LEVEL);
+        printf("%d:%d.%d.%d%s\n", glslang::GetSpirvGeneratorVersion(), GLSLANG_VERSION_MAJOR, GLSLANG_VERSION_MINOR,
+                GLSLANG_VERSION_PATCH, GLSLANG_VERSION_FLAVOR);
         if (workList.empty())
             return ESuccess;
     } else if (Options & EOptionDumpVersions) {
-        printf("Glslang Version: %d.%d.%d\n",
-            glslang::GetSpirvGeneratorVersion(), GLSLANG_MINOR_VERSION, GLSLANG_PATCH_LEVEL);
+        printf("Glslang Version: %d:%d.%d.%d%s\n", glslang::GetSpirvGeneratorVersion(), GLSLANG_VERSION_MAJOR,
+                GLSLANG_VERSION_MINOR, GLSLANG_VERSION_PATCH, GLSLANG_VERSION_FLAVOR);
         printf("ESSL Version: %s\n", glslang::GetEsslVersionString());
         printf("GLSL Version: %s\n", glslang::GetGlslVersionString());
         std::string spirvVersion;
@@ -1562,6 +1583,7 @@
            "              'hlsl_functionality1' enables use of the\n"
            "              SPV_GOOGLE_hlsl_functionality1 extension\n"
            "  -g          generate debug information\n"
+           "  -g0         strip debug information\n"
            "  -h          print this usage message\n"
            "  -i          intermediate tree (glslang AST) is printed out\n"
            "  -l          link all input files together to form a single module\n"
@@ -1593,11 +1615,14 @@
            "  --hlsl-iomap                      perform IO mapping in HLSL register space\n"
            "  --hlsl-enable-16bit-types         allow 16-bit types in SPIR-V for HLSL\n"
            "  --hlsl-dx9-compatible             interprets sampler declarations as a\n"
-           "                                    texture/sampler combo like DirectX9 would.\n"
+           "                                    texture/sampler combo like DirectX9 would,\n"
+           "                                    and recognizes DirectX9-specific semantics\n"
            "  --invert-y | --iy                 invert position.Y output in vertex shader\n"
            "  --keep-uncalled | --ku            don't eliminate uncalled functions\n"
            "  --nan-clamp                       favor non-NaN operand in min, max, and clamp\n"
            "  --no-storage-format | --nsf       use Unknown image format\n"
+           "  --quiet                           do not print anything to stdout, unless\n"
+           "                                    requested by another option\n"
            "  --reflect-strict-array-suffix     use strict array suffix rules when\n"
            "                                    reflecting\n"
            "  --reflect-basic-array-suffix      arrays of basic types will have trailing [0]\n"
diff --git a/Test/420.frag b/Test/420.frag
index d3020b3..4c0b15f 100644
--- a/Test/420.frag
+++ b/Test/420.frag
@@ -34,6 +34,21 @@
     origu = atomicCompSwap(atomu, 10u, 8u);
 }
 
+layout(binding = 2,std430) buffer ssboElem01
+{
+    int member01;
+    int memberArr01[2];
+    int memberUnsizedArr01[];
+} ssboStd430Arr[2];
+
+// if turns on EShReflectionSharedStd140SSBO, SPIR-V would be different
+layout(binding = 3,shared) buffer ssboElem02
+{
+    int member02;
+    int memberArr02[2];
+    int memberUnsizedArr02[];
+} ssboSharedArr[2];
+
 #extension GL_ARB_shader_storage_buffer_object : disable
 
 layout(binding = 1,std430) buffer BufferFail // Error std430 and "buffer" block support disabled 
diff --git a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
index 41f0b09..2afdb10 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 89
 
                               Capability Shader
@@ -16,7 +16,7 @@
                               Decorate 47(gss) DescriptorSet 0
                               Decorate 47(gss) Binding 0
                               Decorate 51(gtex) DescriptorSet 0
-                              Decorate 51(gtex) Binding 0
+                              Decorate 51(gtex) Binding 2
                               Decorate 62(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
index 6b090b2..7bb33e6 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 190
 
                               Capability Shader
@@ -18,11 +18,11 @@
                               Decorate 38(tex) DescriptorSet 0
                               Decorate 38(tex) Binding 0
                               Decorate 82(s.s2D) DescriptorSet 0
-                              Decorate 82(s.s2D) Binding 0
+                              Decorate 82(s.s2D) Binding 1
                               Decorate 97(s2.s2D) DescriptorSet 0
-                              Decorate 97(s2.s2D) Binding 0
+                              Decorate 97(s2.s2D) Binding 2
                               Decorate 100(s2.tex) DescriptorSet 0
-                              Decorate 100(s2.tex) Binding 0
+                              Decorate 100(s2.tex) Binding 3
                               Decorate 120(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
index 126e13a..0e8583f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 139
 
                               Capability Shader
@@ -15,7 +15,7 @@
                               Decorate 43(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 43(g_tInputTexture_sampler) Binding 0
                               Decorate 47(g_tInputTexture) DescriptorSet 0
-                              Decorate 47(g_tInputTexture) Binding 0
+                              Decorate 47(g_tInputTexture) Binding 1
                               Decorate 80(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
index 03dc8dc..fe858ef 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 99
 
                               Capability Shader
@@ -15,7 +15,7 @@
                               Decorate 44(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 44(g_tInputTexture_sampler) Binding 0
                               Decorate 47(g_tInputTexture) DescriptorSet 0
-                              Decorate 47(g_tInputTexture) Binding 0
+                              Decorate 47(g_tInputTexture) Binding 1
                               Decorate 57(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseLegalResults/hlsl.flattenSubset.frag.out b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
index 68d1236..0edf712 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 67
 
                               Capability Shader
@@ -17,7 +17,7 @@
                               Decorate 21(samp) DescriptorSet 0
                               Decorate 21(samp) Binding 0
                               Decorate 33(tex) DescriptorSet 0
-                              Decorate 33(tex) Binding 0
+                              Decorate 33(tex) Binding 1
                               Decorate 47(vpos) Location 0
                               Decorate 50(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
index 5cc280b..00bd55b 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): 80008
+// Generated by (magic number): 8000a
 // 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 75006da..824aa49 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 159
 
                               Capability Shader
diff --git a/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out b/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
index 7be570b..8975ed2 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/310AofA.vert.out b/Test/baseResults/310AofA.vert.out
index 451cc0b..eec22cc 100644
--- a/Test/baseResults/310AofA.vert.out
+++ b/Test/baseResults/310AofA.vert.out
@@ -61,7 +61,7 @@
 0:49      Constant:
 0:49        0.000000
 0:50      Branch: Return with expression
-0:50        Construct float ( temp 4-element array of 7-element array of float)
+0:50        Construct float ( temp 4-element array of 7-element array of highp float)
 0:50          direct index ( temp 7-element array of highp float)
 0:50            'a' ( in 5-element array of 7-element array of highp float)
 0:50            Constant:
@@ -76,7 +76,7 @@
 0:50            Constant:
 0:50              3 (const int)
 0:51      Branch: Return with expression
-0:51        Construct float ( temp 4-element array of 7-element array of float)
+0:51        Construct float ( temp 4-element array of 7-element array of highp float)
 0:51          direct index ( temp 7-element array of highp float)
 0:51            'a' ( in 5-element array of 7-element array of highp float)
 0:51            Constant:
@@ -91,7 +91,7 @@
 0:51            Constant:
 0:51              3 (const int)
 0:52      Branch: Return with expression
-0:52        Construct float ( temp 4-element array of 7-element array of float)
+0:52        Construct float ( temp 4-element array of 7-element array of highp float)
 0:52          direct index ( temp 7-element array of highp float)
 0:52            'a' ( in 5-element array of 7-element array of highp float)
 0:52            Constant:
diff --git a/Test/baseResults/420.frag.out b/Test/baseResults/420.frag.out
index 1a7586a..19b5c9b 100644
--- a/Test/baseResults/420.frag.out
+++ b/Test/baseResults/420.frag.out
@@ -4,8 +4,8 @@
 ERROR: 0:12: 'gl_FragDepth' : cannot redeclare after use 
 ERROR: 0:14: 'atomic_uint' : array must be explicitly sized 
 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: 0:54: 'std430' : not supported for this version or the enabled extensions 
+ERROR: 0:54: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
 ERROR: 7 compilation errors.  No code generated.
 
 
@@ -82,6 +82,8 @@
 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})
+0:?     'ssboStd430Arr' (layout( binding=2 column_major std430) buffer 2-element array of block{layout( column_major std430 offset=0) buffer int member01, layout( column_major std430 offset=4) buffer 2-element array of int memberArr01, layout( column_major std430 offset=12) buffer unsized 1-element array of int memberUnsizedArr01})
+0:?     'ssboSharedArr' (layout( binding=3 column_major shared) buffer 2-element array of block{layout( column_major shared) buffer int member02, layout( column_major shared) buffer 2-element array of int memberArr02, layout( column_major shared) buffer unsized 1-element array of int memberUnsizedArr02})
 
 
 Linked fragment stage:
@@ -117,4 +119,6 @@
 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})
+0:?     'ssboStd430Arr' (layout( binding=2 column_major std430) buffer 2-element array of block{layout( column_major std430 offset=0) buffer int member01, layout( column_major std430 offset=4) buffer 2-element array of int memberArr01, layout( column_major std430 offset=12) buffer unsized 1-element array of int memberUnsizedArr01})
+0:?     'ssboSharedArr' (layout( binding=3 column_major shared) buffer 2-element array of block{layout( column_major shared) buffer int member02, layout( column_major shared) buffer 2-element array of int memberArr02, layout( column_major shared) buffer unsized 1-element array of int memberUnsizedArr02})
 
diff --git a/Test/baseResults/420.vert.out b/Test/baseResults/420.vert.out
index 3d49327..1a57b34 100644
--- a/Test/baseResults/420.vert.out
+++ b/Test/baseResults/420.vert.out
@@ -48,7 +48,7 @@
 ERROR: 0:142: 'r8_snorm' : does not apply to signed integer images 
 ERROR: 0:143: 'rgba32ui' : does not apply to signed integer images 
 ERROR: 0:144: 'r8ui' : does not apply to signed integer images 
-ERROR: 0:147: 'offset on block member' : not supported for this version or the enabled extensions 
+ERROR: 0:147: '"offset" on block member' : not supported for this version or the enabled extensions 
 ERROR: 0:147: 'offset/align' : can only be used with std140, std430, or scalar layout packing 
 ERROR: 0:157: 'textureQueryLevels' : no matching overloaded function found 
 ERROR: 0:157: 'assign' :  cannot convert from ' const float' to ' temp int'
diff --git a/Test/baseResults/430.vert.out b/Test/baseResults/430.vert.out
index 4bac5fc..db56eab 100644
--- a/Test/baseResults/430.vert.out
+++ b/Test/baseResults/430.vert.out
@@ -26,12 +26,12 @@
 ERROR: 0:62: 'uniform buffer-member align' : not supported for this version or the enabled extensions 
 ERROR: 0:64: 'uniform buffer-member align' : not supported for this version or the enabled extensions 
 ERROR: 0:65: 'uniform buffer-member align' : not supported for this version or the enabled extensions 
-ERROR: 0:65: 'offset on block member' : not supported for this version or the enabled extensions 
-ERROR: 0:66: 'offset on block member' : not supported for this version or the enabled extensions 
+ERROR: 0:65: '"offset" on block member' : not supported for this version or the enabled extensions 
+ERROR: 0:66: '"offset" on block member' : not supported for this version or the enabled extensions 
 ERROR: 0:64: 'align' : can only be used with std140, std430, or scalar layout packing 
 ERROR: 0:65: 'offset/align' : can only be used with std140, std430, or scalar layout packing 
 ERROR: 0:66: 'offset/align' : can only be used with std140, std430, or scalar layout packing 
-ERROR: 0:71: 'offset on block member' : not supported for this version or the enabled extensions 
+ERROR: 0:71: '"offset" on block member' : not supported for this version or the enabled extensions 
 ERROR: 0:74: 'gl_MaxTransformFeedbackBuffers' : required extension not requested: GL_ARB_enhanced_layouts
 ERROR: 0:75: 'gl_MaxTransformFeedbackInterleavedComponents' : required extension not requested: GL_ARB_enhanced_layouts
 ERROR: 0:78: 'transform feedback qualifier' : not supported for this version or the enabled extensions 
diff --git a/Test/baseResults/array100.frag.out b/Test/baseResults/array100.frag.out
index e6f9f8d..ecb55f9 100644
--- a/Test/baseResults/array100.frag.out
+++ b/Test/baseResults/array100.frag.out
@@ -31,7 +31,7 @@
 0:9      'a' ( in 5-element array of mediump float)
 0:11    Sequence
 0:11      Branch: Return with expression
-0:11        Construct float ( temp 4-element array of float)
+0:11        Construct float ( temp 4-element array of mediump float)
 0:11          direct index ( temp mediump float)
 0:11            'a' ( in 5-element array of mediump float)
 0:11            Constant:
@@ -168,7 +168,7 @@
 0:9      'a' ( in 5-element array of mediump float)
 0:11    Sequence
 0:11      Branch: Return with expression
-0:11        Construct float ( temp 4-element array of float)
+0:11        Construct float ( temp 4-element array of mediump float)
 0:11          direct index ( temp mediump float)
 0:11            'a' ( in 5-element array of mediump float)
 0:11            Constant:
diff --git a/Test/baseResults/compoundsuffix.frag.hlsl b/Test/baseResults/compoundsuffix.frag.hlsl
index 650d1d0..5a62488 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): 80008

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

 // Id's are bound by 22

 

                               Capability Shader

diff --git a/Test/baseResults/glsl.140.layoutOffset.error.vert.out b/Test/baseResults/glsl.140.layoutOffset.error.vert.out
new file mode 100644
index 0000000..ce33d15
--- /dev/null
+++ b/Test/baseResults/glsl.140.layoutOffset.error.vert.out
@@ -0,0 +1,50 @@
+glsl.140.layoutOffset.error.vert
+ERROR: 0:5: 'offset' : not supported with this profile: none
+ERROR: 0:5: '"offset" on block member' : not supported for this version or the enabled extensions 
+ERROR: 2 compilation errors.  No code generated.
+
+
+Shader version: 140
+ERROR: node is still EOpNull!
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        'out_vs' ( smooth out 4-component vector of float)
+0:13        add ( temp 4-component vector of float)
+0:13          'in_vs' ( in 4-component vector of float)
+0:13          a: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:13            'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a})
+0:13            Constant:
+0:13              0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a})
+0:?     'in_vs' ( in 4-component vector of float)
+0:?     'out_vs' ( smooth out 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 140
+ERROR: node is still EOpNull!
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        'out_vs' ( smooth out 4-component vector of float)
+0:13        add ( temp 4-component vector of float)
+0:13          'in_vs' ( in 4-component vector of float)
+0:13          a: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:13            'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a})
+0:13            Constant:
+0:13              0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a})
+0:?     'in_vs' ( in 4-component vector of float)
+0:?     'out_vs' ( smooth out 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/glsl.430.layoutOffset.error.vert.out b/Test/baseResults/glsl.430.layoutOffset.error.vert.out
new file mode 100644
index 0000000..64160ce
--- /dev/null
+++ b/Test/baseResults/glsl.430.layoutOffset.error.vert.out
@@ -0,0 +1,49 @@
+glsl.430.layoutOffset.error.vert
+ERROR: 0:5: '"offset" on block member' : not supported for this version or the enabled extensions 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 430
+ERROR: node is still EOpNull!
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        'out_vs' ( smooth out 4-component vector of float)
+0:13        add ( temp 4-component vector of float)
+0:13          'in_vs' ( in 4-component vector of float)
+0:13          a: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:13            'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a})
+0:13            Constant:
+0:13              0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a})
+0:?     'in_vs' ( in 4-component vector of float)
+0:?     'out_vs' ( smooth out 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
+ERROR: node is still EOpNull!
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        'out_vs' ( smooth out 4-component vector of float)
+0:13        add ( temp 4-component vector of float)
+0:13          'in_vs' ( in 4-component vector of float)
+0:13          a: direct index for structure (layout( column_major std140 offset=0) uniform 4-component vector of float)
+0:13            'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a})
+0:13            Constant:
+0:13              0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float a})
+0:?     'in_vs' ( in 4-component vector of float)
+0:?     'out_vs' ( smooth out 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/glsl.entryPointRename.vert.bad.out b/Test/baseResults/glsl.entryPointRename.vert.bad.out
index 7b99bbe..ce34fbf 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): 80008
+// Generated by (magic number): 8000a
 // 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 3044dee..71319c9 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/glsl.es300.layoutOffset.error.vert.out b/Test/baseResults/glsl.es300.layoutOffset.error.vert.out
new file mode 100644
index 0000000..3343b9f
--- /dev/null
+++ b/Test/baseResults/glsl.es300.layoutOffset.error.vert.out
@@ -0,0 +1,51 @@
+glsl.es300.layoutOffset.error.vert
+ERROR: 0:3: 'binding' : not supported for this version or the enabled extensions 
+ERROR: 0:3: 'offset' : not supported for this version or the enabled extensions 
+ERROR: 0:3: 'offset' : only applies to block members, not blocks 
+ERROR: 3 compilation errors.  No code generated.
+
+
+Shader version: 300
+ERROR: node is still EOpNull!
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      move second child to first child ( temp highp 4-component vector of float)
+0:13        'out_vs' ( smooth out highp 4-component vector of float)
+0:13        add ( temp highp 4-component vector of float)
+0:13          'in_vs' ( in highp 4-component vector of float)
+0:13          a: direct index for structure (layout( column_major shared) uniform highp 4-component vector of float)
+0:13            'anon@0' (layout( binding=0 column_major shared offset=0) uniform block{layout( column_major shared) uniform highp 4-component vector of float a})
+0:13            Constant:
+0:13              0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( binding=0 column_major shared offset=0) uniform block{layout( column_major shared) uniform highp 4-component vector of float a})
+0:?     'in_vs' ( in highp 4-component vector of float)
+0:?     'out_vs' ( smooth out highp 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 300
+ERROR: node is still EOpNull!
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:13    Sequence
+0:13      move second child to first child ( temp highp 4-component vector of float)
+0:13        'out_vs' ( smooth out highp 4-component vector of float)
+0:13        add ( temp highp 4-component vector of float)
+0:13          'in_vs' ( in highp 4-component vector of float)
+0:13          a: direct index for structure (layout( column_major shared) uniform highp 4-component vector of float)
+0:13            'anon@0' (layout( binding=0 column_major shared offset=0) uniform block{layout( column_major shared) uniform highp 4-component vector of float a})
+0:13            Constant:
+0:13              0 (const uint)
+0:?   Linker Objects
+0:?     'anon@0' (layout( binding=0 column_major shared offset=0) uniform block{layout( column_major shared) uniform highp 4-component vector of float a})
+0:?     'in_vs' ( in highp 4-component vector of float)
+0:?     'out_vs' ( smooth out highp 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+
diff --git a/Test/baseResults/glspv.esversion.vert.out b/Test/baseResults/glspv.esversion.vert.out
index 9f92513..2a0932a 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): 80008
+// Generated by (magic number): 8000a
 // 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 42c73dd..a90d9eb 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): 80008
+// Generated by (magic number): 8000a
 // 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 80fee61..2b3d954 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): 80008
+// Generated by (magic number): 8000a
 // 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 2390a5a..12a4d64 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): 80008
+// Generated by (magic number): 8000a
 // 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 d22bac6..9218a82 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 64
 
                               Capability Shader
@@ -167,11 +167,11 @@
                               Name 56  "param"
                               Name 62  "@entryPointOutput"
                               Decorate 44(gss2) DescriptorSet 0
-                              Decorate 44(gss2) Binding 0
+                              Decorate 44(gss2) Binding 1
                               Decorate 47(gss) DescriptorSet 0
                               Decorate 47(gss) Binding 0
                               Decorate 51(gtex) DescriptorSet 0
-                              Decorate 51(gtex) Binding 0
+                              Decorate 51(gtex) Binding 2
                               Decorate 62(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.amend.frag.out b/Test/baseResults/hlsl.amend.frag.out
index 7fd0727..dde6e29 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): 80008
+// Generated by (magic number): 8000a
 // 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 4c2a8c1..5b99f5d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 143
 
                               Capability Shader
@@ -393,17 +393,17 @@
                               Name 141  "g_samp_explicit[1]"
                               Name 142  "g_samp_explicit[2]"
                               Decorate 42(g_tex[1]) DescriptorSet 0
-                              Decorate 42(g_tex[1]) Binding 0
+                              Decorate 42(g_tex[1]) Binding 4
                               Decorate 45(g_samp[1]) DescriptorSet 0
-                              Decorate 45(g_samp[1]) Binding 0
+                              Decorate 45(g_samp[1]) Binding 10
                               Decorate 65(g_samp[0]) DescriptorSet 0
-                              Decorate 65(g_samp[0]) Binding 0
+                              Decorate 65(g_samp[0]) Binding 9
                               Decorate 70(g_samp[2]) DescriptorSet 0
-                              Decorate 70(g_samp[2]) Binding 0
+                              Decorate 70(g_samp[2]) Binding 11
                               Decorate 74(g_tex[0]) DescriptorSet 0
                               Decorate 74(g_tex[0]) Binding 0
                               Decorate 79(g_tex[2]) DescriptorSet 0
-                              Decorate 79(g_tex[2]) Binding 0
+                              Decorate 79(g_tex[2]) Binding 8
                               Decorate 88 ArrayStride 48
                               Decorate 89 ArrayStride 48
                               Decorate 90 ArrayStride 16
@@ -416,7 +416,7 @@
                               MemberDecorate 91($Global) 2 Offset 384
                               Decorate 91($Global) Block
                               Decorate 93 DescriptorSet 0
-                              Decorate 93 Binding 0
+                              Decorate 93 Binding 12
                               Decorate 134(ps_output.color) Location 0
                               Decorate 137(g_tex_explicit[0]) DescriptorSet 0
                               Decorate 137(g_tex_explicit[0]) Binding 1
diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out
index 7178102..5b6afbd 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): 80008
+// Generated by (magic number): 8000a
 // 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 402807e..566bc9d 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): 80008
+// Generated by (magic number): 8000a
 // 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 6c852c3..fa2be65 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): 80008
+// Generated by (magic number): 8000a
 // 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 2002b0d..69a631e 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): 80008
+// Generated by (magic number): 8000a
 // 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 1ff2123..3fc9b5b 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): 80008
+// Generated by (magic number): 8000a
 // 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 2290cd8..0d1f709 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): 80008
+// Generated by (magic number): 8000a
 // 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 14bdcdd..1b651a3 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): 80008
+// Generated by (magic number): 8000a
 // 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 a486d1e..244fe7d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 28
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.automap.frag.out b/Test/baseResults/hlsl.automap.frag.out
index 7691b89..240e67a 100644
--- a/Test/baseResults/hlsl.automap.frag.out
+++ b/Test/baseResults/hlsl.automap.frag.out
@@ -18,12 +18,12 @@
 tb1: offset 0, type 1404, size 1, index 5, binding -1, stages 16
 
 Uniform block reflection:
-t4: offset -1, type ffffffff, size 0, index -1, binding 14, stages 16, numMembers 1
-t5: offset -1, type ffffffff, size 0, index -1, binding 15, stages 16, numMembers 1
-u5: offset -1, type ffffffff, size 0, index -1, binding 45, stages 16, numMembers 1
-u6: offset -1, type ffffffff, size 0, index -1, binding 46, stages 16, numMembers 1
-cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 16, numMembers 1
-tb: offset -1, type ffffffff, size 4, index -1, binding 17, stages 16, numMembers 1
+t4: offset -1, type ffffffff, size 16, index 0, binding 14, stages 16, numMembers 1
+t5: offset -1, type ffffffff, size 4, index 1, binding 15, stages 16, numMembers 1
+u5: offset -1, type ffffffff, size 4, index 2, binding 45, stages 16, numMembers 1
+u6: offset -1, type ffffffff, size 4, index 3, binding 46, stages 16, numMembers 1
+cb: offset -1, type ffffffff, size 4, index 4, binding 51, stages 16, numMembers 1
+tb: offset -1, type ffffffff, size 4, index 5, binding 17, stages 16, numMembers 1
 
 Buffer variable reflection:
 
diff --git a/Test/baseResults/hlsl.basic.comp.out b/Test/baseResults/hlsl.basic.comp.out
index fb26bc3..d71429c 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): 80008
+// Generated by (magic number): 8000a
 // 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 ee123d4..6dea921 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): 80008
+// Generated by (magic number): 8000a
 // 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 8762faf..6a8e516 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): 80008
+// Generated by (magic number): 8000a
 // 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 e41c02d..04a783c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 73
 
                               Capability Shader
@@ -197,7 +197,7 @@
                               MemberDecorate 24(cbufName2) 0 Offset 0
                               Decorate 24(cbufName2) Block
                               Decorate 26 DescriptorSet 0
-                              Decorate 26 Binding 0
+                              Decorate 26 Binding 3
                               MemberDecorate 31(buf1) 0 Offset 0
                               Decorate 31(buf1) Block
                               Decorate 33 DescriptorSet 0
@@ -206,12 +206,12 @@
                               MemberDecorate 37(buf2) 0 Offset 0
                               Decorate 37(buf2) BufferBlock
                               Decorate 39 DescriptorSet 0
-                              Decorate 39 Binding 0
+                              Decorate 39 Binding 1
                               MemberDecorate 43(cbufName) 0 Offset 0
                               MemberDecorate 43(cbufName) 1 Offset 20
                               Decorate 43(cbufName) Block
                               Decorate 45 DescriptorSet 0
-                              Decorate 45 Binding 0
+                              Decorate 45 Binding 2
                               MemberDecorate 50(tbufName) 0 NonWritable
                               MemberDecorate 50(tbufName) 0 Offset 16
                               MemberDecorate 50(tbufName) 1 NonWritable
diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
index 698350c..4ee2481 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 148
 
                               Capability Shader
@@ -405,21 +405,21 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 33(g_tTex1di4a) DescriptorSet 0
-                              Decorate 33(g_tTex1di4a) Binding 0
+                              Decorate 33(g_tTex1di4a) Binding 2
                               Decorate 45(g_tTex1du4a) DescriptorSet 0
-                              Decorate 45(g_tTex1du4a) Binding 0
+                              Decorate 45(g_tTex1du4a) Binding 3
                               Decorate 56(g_tTex2df4a) DescriptorSet 0
-                              Decorate 56(g_tTex2df4a) Binding 0
+                              Decorate 56(g_tTex2df4a) Binding 4
                               Decorate 67(g_tTex2di4a) DescriptorSet 0
-                              Decorate 67(g_tTex2di4a) Binding 0
+                              Decorate 67(g_tTex2di4a) Binding 5
                               Decorate 79(g_tTex2du4a) DescriptorSet 0
-                              Decorate 79(g_tTex2du4a) Binding 0
+                              Decorate 79(g_tTex2du4a) Binding 6
                               Decorate 92(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 92(g_tTexcdf4a) Binding 0
+                              Decorate 92(g_tTexcdf4a) Binding 7
                               Decorate 104(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 104(g_tTexcdi4a) Binding 0
+                              Decorate 104(g_tTexcdi4a) Binding 8
                               Decorate 115(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 115(g_tTexcdu4a) Binding 0
+                              Decorate 115(g_tTexcdu4a) Binding 9
                               Decorate 140(@entryPointOutput.Color) Location 0
                               Decorate 144(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 147(g_tTex1df4) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
index e4bcb61..6abe22c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 148
 
                               Capability Shader
@@ -405,21 +405,21 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 33(g_tTex1di4a) DescriptorSet 0
-                              Decorate 33(g_tTex1di4a) Binding 0
+                              Decorate 33(g_tTex1di4a) Binding 2
                               Decorate 45(g_tTex1du4a) DescriptorSet 0
-                              Decorate 45(g_tTex1du4a) Binding 0
+                              Decorate 45(g_tTex1du4a) Binding 3
                               Decorate 56(g_tTex2df4a) DescriptorSet 0
-                              Decorate 56(g_tTex2df4a) Binding 0
+                              Decorate 56(g_tTex2df4a) Binding 4
                               Decorate 67(g_tTex2di4a) DescriptorSet 0
-                              Decorate 67(g_tTex2di4a) Binding 0
+                              Decorate 67(g_tTex2di4a) Binding 5
                               Decorate 79(g_tTex2du4a) DescriptorSet 0
-                              Decorate 79(g_tTex2du4a) Binding 0
+                              Decorate 79(g_tTex2du4a) Binding 6
                               Decorate 92(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 92(g_tTexcdf4a) Binding 0
+                              Decorate 92(g_tTexcdf4a) Binding 7
                               Decorate 104(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 104(g_tTexcdi4a) Binding 0
+                              Decorate 104(g_tTexcdi4a) Binding 8
                               Decorate 115(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 115(g_tTexcdu4a) Binding 0
+                              Decorate 115(g_tTexcdu4a) Binding 9
                               Decorate 140(@entryPointOutput.Color) Location 0
                               Decorate 144(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 147(g_tTex1df4) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.cast.frag.out b/Test/baseResults/hlsl.cast.frag.out
index aa657f3..3efbd52 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): 80008
+// Generated by (magic number): 8000a
 // 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 5cec136..93f35d6 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): 80008
+// Generated by (magic number): 8000a
 // 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 4846f8f..2151d43 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): 80008
+// Generated by (magic number): 8000a
 // 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 a0ebb74..691b20b 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): 80008
+// Generated by (magic number): 8000a
 // 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 4382505..0cfee39 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): 80008
+// Generated by (magic number): 8000a
 // 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 5348359..a9a0b82 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): 80008
+// Generated by (magic number): 8000a
 // 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 7d8b49f..41478e1 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): 80008
+// Generated by (magic number): 8000a
 // 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 d1da7bc..15a9512 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): 80008
+// Generated by (magic number): 8000a
 // 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 bdee84f..bb8d137 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): 80008
+// Generated by (magic number): 8000a
 // 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 77bd23d..5ccbb1e 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): 80008
+// Generated by (magic number): 8000a
 // 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 c7eda56..1d9f54e 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): 80008
+// Generated by (magic number): 8000a
 // 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 2e6b5f6..5fa7df7 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): 80008
+// Generated by (magic number): 8000a
 // 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 c9289a5..1882a5a 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): 80008
+// Generated by (magic number): 8000a
 // 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 8a46b15..5cef564 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): 80008
+// Generated by (magic number): 8000a
 // 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 31d3205..e942301 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): 80008
+// Generated by (magic number): 8000a
 // 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 7fca9d4..8e8fe6d 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): 80008
+// Generated by (magic number): 8000a
 // 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 f0adb05..ab366e5 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): 80008
+// Generated by (magic number): 8000a
 // 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 264c22c..6dbe0a6 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): 80008
+// Generated by (magic number): 8000a
 // 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 49c225a..770f990 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): 80008
+// Generated by (magic number): 8000a
 // 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 024d028..1adbdfc 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): 80008
+// Generated by (magic number): 8000a
 // 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 5ff568e..9f5e519 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): 80008
+// Generated by (magic number): 8000a
 // 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 24eced8..13bc844 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): 80008
+// Generated by (magic number): 8000a
 // 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 f4e55ac..8f2a9c2 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): 80008
+// Generated by (magic number): 8000a
 // 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 456e11f..fbc2c2a 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): 80008
+// Generated by (magic number): 8000a
 // 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 0a17eaf..b42727f 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): 80008
+// Generated by (magic number): 8000a
 // 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 61b996f..7df3064 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): 80008
+// Generated by (magic number): 8000a
 // 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 e0aca87..e3c0a3e 100644
--- a/Test/baseResults/hlsl.color.hull.tesc.out
+++ b/Test/baseResults/hlsl.color.hull.tesc.out
@@ -530,7 +530,7 @@
 0:?     '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 159
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.comparison.vec.frag.out b/Test/baseResults/hlsl.comparison.vec.frag.out
index 5936c9a..1bf2ced 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 96
 
                               Capability Shader
@@ -355,7 +355,7 @@
                               Store 25(r00) 28
               30:    7(fvec4) Load 10(a)
               31:    7(fvec4) Load 17(v04)
-              32:   23(bvec4) FOrdNotEqual 30 31
+              32:   23(bvec4) FUnordNotEqual 30 31
                               Store 29(r01) 32
               34:    7(fvec4) Load 10(a)
               35:    7(fvec4) Load 17(v04)
@@ -373,7 +373,7 @@
               47:    7(fvec4) Load 10(a)
               48:    6(float) Load 21(v01)
               49:    7(fvec4) CompositeConstruct 48 48 48 48
-              50:   23(bvec4) FOrdNotEqual 47 49
+              50:   23(bvec4) FUnordNotEqual 47 49
                               Store 46(r11) 50
               52:    7(fvec4) Load 10(a)
               53:    6(float) Load 21(v01)
@@ -393,7 +393,7 @@
               67:    6(float) Load 21(v01)
               68:    7(fvec4) CompositeConstruct 67 67 67 67
               69:    7(fvec4) Load 10(a)
-              70:   23(bvec4) FOrdNotEqual 68 69
+              70:   23(bvec4) FUnordNotEqual 68 69
                               Store 66(r21) 70
               72:    6(float) Load 21(v01)
               73:    7(fvec4) CompositeConstruct 72 72 72 72
diff --git a/Test/baseResults/hlsl.conditional.frag.out b/Test/baseResults/hlsl.conditional.frag.out
index e23d49c..84396d5 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 206
 
                               Capability Shader
@@ -644,7 +644,7 @@
               39:    7(fvec4) Load 38
               41:     34(ptr) AccessChain 31 40
               42:    7(fvec4) Load 41
-              46:   43(bvec4) FOrdNotEqual 42 45
+              46:   43(bvec4) FUnordNotEqual 42 45
               47:    7(fvec4) Select 46 39 36
               50:     49(ptr) AccessChain 31 48
               51:    6(float) Load 50
@@ -654,7 +654,7 @@
               56:    7(fvec4) CompositeConstruct 55 55 55 55
               57:     34(ptr) AccessChain 31 40
               58:    7(fvec4) Load 57
-              59:   43(bvec4) FOrdNotEqual 58 45
+              59:   43(bvec4) FUnordNotEqual 58 45
               60:    7(fvec4) Select 59 56 52
               61:    7(fvec4) FAdd 47 60
               62:     34(ptr) AccessChain 31 33
@@ -675,7 +675,7 @@
               77:    7(fvec4) CompositeConstruct 76 76 76 76
               78:     34(ptr) AccessChain 31 40
               79:    7(fvec4) Load 78
-              80:   43(bvec4) FOrdNotEqual 79 45
+              80:   43(bvec4) FUnordNotEqual 79 45
               81:    7(fvec4) Select 80 77 74
               82:    7(fvec4) FAdd 72 81
                               ReturnValue 82
@@ -687,7 +687,7 @@
               87:    6(float) Load 86
               88:     49(ptr) AccessChain 31 48
               89:    6(float) Load 88
-              90:    13(bool) FOrdNotEqual 87 89
+              90:    13(bool) FUnordNotEqual 87 89
               91:     49(ptr) AccessChain 31 53
               92:    6(float) Load 91
               93:     34(ptr) AccessChain 31 33
diff --git a/Test/baseResults/hlsl.constantbuffer.frag.out b/Test/baseResults/hlsl.constantbuffer.frag.out
index 48d849b..12e819b 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 66
 
                               Capability Shader
@@ -160,7 +160,7 @@
                               MemberDecorate 12(cb3) 1 Offset 4
                               Decorate 12(cb3) Block
                               Decorate 18(cb3) DescriptorSet 0
-                              Decorate 18(cb3) Binding 0
+                              Decorate 18(cb3) Binding 1
                               MemberDecorate 31(cb1) 0 Offset 0
                               Decorate 31(cb1) Block
                               Decorate 33(cb1) DescriptorSet 0
@@ -170,7 +170,7 @@
                               MemberDecorate 46(cbuff) 0 Offset 0
                               Decorate 46(cbuff) Block
                               Decorate 48 DescriptorSet 0
-                              Decorate 48 Binding 0
+                              Decorate 48 Binding 2
                               Decorate 64(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.constructArray.vert.out b/Test/baseResults/hlsl.constructArray.vert.out
index 8ba41bc..b070735 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): 80008
+// Generated by (magic number): 8000a
 // 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 085821a..a6d387f 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): 80008
+// Generated by (magic number): 8000a
 // 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 a5014db..d2d3d01 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): 80008
+// Generated by (magic number): 8000a
 // 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 a148073..cb81d56 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): 80008
+// Generated by (magic number): 8000a
 // 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 d5e7e20..7351443 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): 80008
+// Generated by (magic number): 8000a
 // 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 559708d..9ca0146 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): 80008
+// Generated by (magic number): 8000a
 // 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 7092802..31a7006 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): 80008
+// Generated by (magic number): 8000a
 // 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 275eaf1..d062c77 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): 80008
+// Generated by (magic number): 8000a
 // 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 23ed871..41766f6 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 50
 
                               Capability Shader
@@ -178,7 +178,7 @@
               30:           2 FunctionCall 10(foo(f1;) 25(param)
               32:      7(ptr) AccessChain 15(input) 31
               33:    6(float) Load 32
-              35:    20(bool) FOrdNotEqual 33 34
+              35:    20(bool) FUnordNotEqual 33 34
                               SelectionMerge 37 None
                               BranchConditional 35 36 37
               36:               Label
diff --git a/Test/baseResults/hlsl.doLoop.frag.out b/Test/baseResults/hlsl.doLoop.frag.out
index 2b65a76..0d93e8d 100644
--- a/Test/baseResults/hlsl.doLoop.frag.out
+++ b/Test/baseResults/hlsl.doLoop.frag.out
@@ -198,7 +198,7 @@
 0:?     'input' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 99
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.domain.1.tese.out b/Test/baseResults/hlsl.domain.1.tese.out
index 3a6acde..4e53e7c 100644
--- a/Test/baseResults/hlsl.domain.1.tese.out
+++ b/Test/baseResults/hlsl.domain.1.tese.out
@@ -428,7 +428,7 @@
 0:?     'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 125
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.domain.2.tese.out b/Test/baseResults/hlsl.domain.2.tese.out
index 677f136..05f934f 100644
--- a/Test/baseResults/hlsl.domain.2.tese.out
+++ b/Test/baseResults/hlsl.domain.2.tese.out
@@ -426,7 +426,7 @@
 0:?     'pcf_data.foo' (layout( location=2) patch in float)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 120
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.domain.3.tese.out b/Test/baseResults/hlsl.domain.3.tese.out
index 7a6ef1b..c9b985d 100644
--- a/Test/baseResults/hlsl.domain.3.tese.out
+++ b/Test/baseResults/hlsl.domain.3.tese.out
@@ -358,7 +358,7 @@
 0:?     'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 116
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.earlydepthstencil.frag.out b/Test/baseResults/hlsl.earlydepthstencil.frag.out
index f30b89a..e6ad359 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): 80008
+// Generated by (magic number): 8000a
 // 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 c3c3aef..9f5c785 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): 80008
+// Generated by (magic number): 8000a
 // 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 bb9c26c..2a4cabe 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): 80008
+// Generated by (magic number): 8000a
 // 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 22027bf..ad1efa7 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): 80008
+// Generated by (magic number): 8000a
 // 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 d65532d..4c32249 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): 80008
+// Generated by (magic number): 8000a
 // 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 e1af284..a8b47e9 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): 80008
+// Generated by (magic number): 8000a
 // 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 b0e958b..2fd15d1 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): 80008
+// Generated by (magic number): 8000a
 // 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 c4e6baf..3ca773f 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): 80008
+// Generated by (magic number): 8000a
 // 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 9665ad2..9ba0d93 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): 80008
+// Generated by (magic number): 8000a
 // 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 bc388f8..ffb9dcc 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): 80008
+// Generated by (magic number): 8000a
 // 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 688656c..d63caf5 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 122
 
                               Capability Shader
@@ -339,11 +339,11 @@
                               Decorate 38(tex) DescriptorSet 0
                               Decorate 38(tex) Binding 0
                               Decorate 82(s.s2D) DescriptorSet 0
-                              Decorate 82(s.s2D) Binding 0
+                              Decorate 82(s.s2D) Binding 1
                               Decorate 97(s2.s2D) DescriptorSet 0
-                              Decorate 97(s2.s2D) Binding 0
+                              Decorate 97(s2.s2D) Binding 2
                               Decorate 100(s2.tex) DescriptorSet 0
-                              Decorate 100(s2.tex) Binding 0
+                              Decorate 100(s2.tex) Binding 3
                               Decorate 120(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
index 6d16858..d27cadc 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 82
 
                               Capability Shader
@@ -195,7 +195,7 @@
                               Decorate 43(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 43(g_tInputTexture_sampler) Binding 0
                               Decorate 47(g_tInputTexture) DescriptorSet 0
-                              Decorate 47(g_tInputTexture) Binding 0
+                              Decorate 47(g_tInputTexture) Binding 1
                               Decorate 80(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
index 62a2e8e..04f7009 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 59
 
                               Capability Shader
@@ -131,7 +131,7 @@
                               Decorate 44(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 44(g_tInputTexture_sampler) Binding 0
                               Decorate 47(g_tInputTexture) DescriptorSet 0
-                              Decorate 47(g_tInputTexture) Binding 0
+                              Decorate 47(g_tInputTexture) Binding 1
                               Decorate 57(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.flattenSubset.frag.out b/Test/baseResults/hlsl.flattenSubset.frag.out
index f6da1a9..7ec229a 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 54
 
                               Capability Shader
@@ -154,7 +154,7 @@
                               Decorate 21(samp) DescriptorSet 0
                               Decorate 21(samp) Binding 0
                               Decorate 33(tex) DescriptorSet 0
-                              Decorate 33(tex) Binding 0
+                              Decorate 33(tex) Binding 1
                               Decorate 47(vpos) Location 0
                               Decorate 50(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.flattenSubset2.frag.out b/Test/baseResults/hlsl.flattenSubset2.frag.out
index 40d92a9..bac9b30 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): 80008
+// Generated by (magic number): 8000a
 // 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 0f7600e..00bdea9 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): 80008
+// Generated by (magic number): 8000a
 // 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 8e8c821..0dbd935 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): 80008
+// Generated by (magic number): 8000a
 // 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 b6c2710..7bce346 100644
--- a/Test/baseResults/hlsl.forLoop.frag.out
+++ b/Test/baseResults/hlsl.forLoop.frag.out
@@ -510,7 +510,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 240
 
                               Capability Shader
@@ -644,7 +644,7 @@
               58:             Label
               59:    9(fvec4) Load 15(input)
               60:    9(fvec4) Load 15(input)
-              63:   62(bvec4) FOrdNotEqual 59 60
+              63:   62(bvec4) FUnordNotEqual 59 60
               64:    61(bool) Any 63
                               BranchConditional 64 55 56
               55:               Label
@@ -664,7 +664,7 @@
               69:             Label
               70:    9(fvec4) Load 19(input)
               71:    9(fvec4) Load 19(input)
-              72:   62(bvec4) FOrdNotEqual 70 71
+              72:   62(bvec4) FUnordNotEqual 70 71
               73:    61(bool) Any 72
                               BranchConditional 73 66 67
               66:               Label
@@ -692,7 +692,7 @@
               86:             Label
               87:    9(fvec4) Load 22(input)
               88:    9(fvec4) Load 22(input)
-              89:   62(bvec4) FOrdNotEqual 87 88
+              89:   62(bvec4) FUnordNotEqual 87 88
               90:    61(bool) Any 89
                               BranchConditional 90 83 84
               83:               Label
diff --git a/Test/baseResults/hlsl.format.rwtexture.frag.out b/Test/baseResults/hlsl.format.rwtexture.frag.out
index 699dafe..e6eebbf 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): 80008
+// Generated by (magic number): 8000a
 // 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 7509ddc..d86fa96 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.function.frag.out b/Test/baseResults/hlsl.function.frag.out
index 00b882d..faa3147 100644
--- a/Test/baseResults/hlsl.function.frag.out
+++ b/Test/baseResults/hlsl.function.frag.out
@@ -26,14 +26,14 @@
 0:12  Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
 0:12    Function Parameters: 
 0:12      'id1' ( in uint)
-0:12      'id2' ( in uint)
+0:12      'id2' ( uniform uint)
 0:?     Sequence
 0:13      Branch: Return with expression
 0:13        Construct vec4 ( temp 4-component vector of float)
 0:13          Convert uint to float ( temp float)
 0:13            component-wise multiply ( temp uint)
 0:13              'id1' ( in uint)
-0:13              'id2' ( in uint)
+0:13              'id2' ( uniform uint)
 0:17  Function Definition: fun1(i1; ( temp 4-component vector of float)
 0:17    Function Parameters: 
 0:17      'index' ( in int)
@@ -84,14 +84,14 @@
 0:12  Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
 0:12    Function Parameters: 
 0:12      'id1' ( in uint)
-0:12      'id2' ( in uint)
+0:12      'id2' ( uniform uint)
 0:?     Sequence
 0:13      Branch: Return with expression
 0:13        Construct vec4 ( temp 4-component vector of float)
 0:13          Convert uint to float ( temp float)
 0:13            component-wise multiply ( temp uint)
 0:13              'id1' ( in uint)
-0:13              'id2' ( in uint)
+0:13              'id2' ( uniform uint)
 0:17  Function Definition: fun1(i1; ( temp 4-component vector of float)
 0:17    Function Parameters: 
 0:17      'index' ( in int)
diff --git a/Test/baseResults/hlsl.gather.array.dx10.frag.out b/Test/baseResults/hlsl.gather.array.dx10.frag.out
index b954c2b..b679ac4 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 124
 
                               Capability Shader
@@ -301,19 +301,19 @@
                               Name 120  "g_tTex1di4a"
                               Name 123  "g_tTex1du4a"
                               Decorate 16(g_tTex2df4a) DescriptorSet 0
-                              Decorate 16(g_tTex2df4a) Binding 0
+                              Decorate 16(g_tTex2df4a) Binding 2
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 37(g_tTex2di4a) DescriptorSet 0
-                              Decorate 37(g_tTex2di4a) Binding 0
+                              Decorate 37(g_tTex2di4a) Binding 3
                               Decorate 52(g_tTex2du4a) DescriptorSet 0
-                              Decorate 52(g_tTex2du4a) Binding 0
+                              Decorate 52(g_tTex2du4a) Binding 4
                               Decorate 64(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 64(g_tTexcdf4a) Binding 0
+                              Decorate 64(g_tTexcdf4a) Binding 5
                               Decorate 74(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 74(g_tTexcdi4a) Binding 0
+                              Decorate 74(g_tTexcdi4a) Binding 6
                               Decorate 84(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 84(g_tTexcdu4a) Binding 0
+                              Decorate 84(g_tTexcdu4a) Binding 7
                               Decorate 107(@entryPointOutput.Color) Location 0
                               Decorate 111(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 116(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
index 530bccd..c80c10f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 135
 
                               Capability Shader
@@ -300,19 +300,19 @@
                               Name 131  "g_tTex3di4"
                               Name 134  "g_tTex3du4"
                               Decorate 16(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_tTex2df4) Binding 0
+                              Decorate 16(g_tTex2df4) Binding 2
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 36(g_tTex2di4) DescriptorSet 0
-                              Decorate 36(g_tTex2di4) Binding 0
+                              Decorate 36(g_tTex2di4) Binding 3
                               Decorate 51(g_tTex2du4) DescriptorSet 0
-                              Decorate 51(g_tTex2du4) Binding 0
+                              Decorate 51(g_tTex2du4) Binding 4
                               Decorate 63(g_tTexcdf4) DescriptorSet 0
-                              Decorate 63(g_tTexcdf4) Binding 0
+                              Decorate 63(g_tTexcdf4) Binding 5
                               Decorate 74(g_tTexcdi4) DescriptorSet 0
-                              Decorate 74(g_tTexcdi4) Binding 0
+                              Decorate 74(g_tTexcdi4) Binding 6
                               Decorate 84(g_tTexcdu4) DescriptorSet 0
-                              Decorate 84(g_tTexcdu4) Binding 0
+                              Decorate 84(g_tTexcdu4) Binding 7
                               Decorate 108(@entryPointOutput.Color) Location 0
                               Decorate 112(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 115(g_sSamp2d) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
index de745d1..fd0c958 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 126
 
                               Capability Shader
@@ -257,19 +257,19 @@
                               Name 122  "g_tTex3di4"
                               Name 125  "g_tTex3du4"
                               Decorate 16(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_tTex2df4) Binding 0
+                              Decorate 16(g_tTex2df4) Binding 2
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 36(g_tTex2di4) DescriptorSet 0
-                              Decorate 36(g_tTex2di4) Binding 0
+                              Decorate 36(g_tTex2di4) Binding 3
                               Decorate 51(g_tTex2du4) DescriptorSet 0
-                              Decorate 51(g_tTex2du4) Binding 0
+                              Decorate 51(g_tTex2du4) Binding 4
                               Decorate 63(g_tTexcdf4) DescriptorSet 0
-                              Decorate 63(g_tTexcdf4) Binding 0
+                              Decorate 63(g_tTexcdf4) Binding 5
                               Decorate 74(g_tTexcdi4) DescriptorSet 0
-                              Decorate 74(g_tTexcdi4) Binding 0
+                              Decorate 74(g_tTexcdi4) Binding 6
                               Decorate 84(g_tTexcdu4) DescriptorSet 0
-                              Decorate 84(g_tTexcdu4) Binding 0
+                              Decorate 84(g_tTexcdu4) Binding 7
                               Decorate 103(@entryPointOutput.Pos) BuiltIn Position
                               Decorate 106(g_sSamp2d) DescriptorSet 0
                               Decorate 106(g_sSamp2d) Binding 0
diff --git a/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
index 3a89712..4e40f72 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 114
 
                               Capability Shader
@@ -246,13 +246,13 @@
                               Name 110  "g_tTexcdi4"
                               Name 113  "g_tTexcdu4"
                               Decorate 16(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_tTex2df4) Binding 0
+                              Decorate 16(g_tTex2df4) Binding 2
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 39(g_tTex2di4) DescriptorSet 0
-                              Decorate 39(g_tTex2di4) Binding 0
+                              Decorate 39(g_tTex2di4) Binding 3
                               Decorate 55(g_tTex2du4) DescriptorSet 0
-                              Decorate 55(g_tTex2du4) Binding 0
+                              Decorate 55(g_tTex2du4) Binding 4
                               Decorate 79(@entryPointOutput.Color) Location 0
                               Decorate 83(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 88(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
index 3601187..54b693f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 97
 
                               Capability Shader
@@ -234,13 +234,13 @@
                               Name 93  "g_tTex1di4"
                               Name 96  "g_tTex1du4"
                               Decorate 16(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_tTex2df4) Binding 0
+                              Decorate 16(g_tTex2df4) Binding 2
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 40(g_tTex2di4) DescriptorSet 0
-                              Decorate 40(g_tTex2di4) Binding 0
+                              Decorate 40(g_tTex2di4) Binding 3
                               Decorate 55(g_tTex2du4) DescriptorSet 0
-                              Decorate 55(g_tTex2du4) Binding 0
+                              Decorate 55(g_tTex2du4) Binding 4
                               Decorate 80(@entryPointOutput.Color) Location 0
                               Decorate 84(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 89(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
index c2a4901..75ea036 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 255
 
                               Capability Shader
@@ -813,7 +813,7 @@
                               Name 251  "g_tTex1di4a"
                               Name 254  "g_tTex1du4a"
                               Decorate 16(g_tTex2df4a) DescriptorSet 0
-                              Decorate 16(g_tTex2df4a) Binding 0
+                              Decorate 16(g_tTex2df4a) Binding 1
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               MemberDecorate 26($Global) 0 Offset 0
@@ -822,17 +822,17 @@
                               MemberDecorate 26($Global) 3 Offset 32
                               Decorate 26($Global) Block
                               Decorate 28 DescriptorSet 0
-                              Decorate 28 Binding 0
+                              Decorate 28 Binding 7
                               Decorate 41(g_tTex2di4a) DescriptorSet 0
-                              Decorate 41(g_tTex2di4a) Binding 0
+                              Decorate 41(g_tTex2di4a) Binding 2
                               Decorate 55(g_tTex2du4a) DescriptorSet 0
-                              Decorate 55(g_tTex2du4a) Binding 0
+                              Decorate 55(g_tTex2du4a) Binding 3
                               Decorate 131(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 131(g_tTexcdf4a) Binding 0
+                              Decorate 131(g_tTexcdf4a) Binding 4
                               Decorate 143(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 143(g_tTexcdi4a) Binding 0
+                              Decorate 143(g_tTexcdi4a) Binding 5
                               Decorate 154(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 154(g_tTexcdu4a) Binding 0
+                              Decorate 154(g_tTexcdu4a) Binding 6
                               Decorate 238(@entryPointOutput.Color) Location 0
                               Decorate 242(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 245(g_sSamp2d) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
index 8bb01d5..886ad73 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 265
 
                               Capability Shader
@@ -824,7 +824,7 @@
                               Name 261  "g_tTex3di4"
                               Name 264  "g_tTex3du4"
                               Decorate 16(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_tTex2df4) Binding 0
+                              Decorate 16(g_tTex2df4) Binding 2
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               MemberDecorate 26($Global) 0 Offset 0
@@ -833,17 +833,17 @@
                               MemberDecorate 26($Global) 3 Offset 32
                               Decorate 26($Global) Block
                               Decorate 28 DescriptorSet 0
-                              Decorate 28 Binding 0
+                              Decorate 28 Binding 8
                               Decorate 41(g_tTex2di4) DescriptorSet 0
-                              Decorate 41(g_tTex2di4) Binding 0
+                              Decorate 41(g_tTex2di4) Binding 3
                               Decorate 55(g_tTex2du4) DescriptorSet 0
-                              Decorate 55(g_tTex2du4) Binding 0
+                              Decorate 55(g_tTex2du4) Binding 4
                               Decorate 131(g_tTexcdf4) DescriptorSet 0
-                              Decorate 131(g_tTexcdf4) Binding 0
+                              Decorate 131(g_tTexcdf4) Binding 5
                               Decorate 143(g_tTexcdi4) DescriptorSet 0
-                              Decorate 143(g_tTexcdi4) Binding 0
+                              Decorate 143(g_tTexcdi4) Binding 6
                               Decorate 154(g_tTexcdu4) DescriptorSet 0
-                              Decorate 154(g_tTexcdu4) Binding 0
+                              Decorate 154(g_tTexcdu4) Binding 7
                               Decorate 238(@entryPointOutput.Color) Location 0
                               Decorate 242(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 245(g_sSamp2d) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
index a777678..b86cd22 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 399
 
                               Capability Shader
@@ -1334,7 +1334,7 @@
                               Name 395  "g_tTexcdi4"
                               Name 398  "g_tTexcdu4"
                               Decorate 16(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_tTex2df4) Binding 0
+                              Decorate 16(g_tTex2df4) Binding 2
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               MemberDecorate 30($Global) 0 Offset 0
@@ -1347,11 +1347,11 @@
                               MemberDecorate 30($Global) 7 Offset 80
                               Decorate 30($Global) Block
                               Decorate 32 DescriptorSet 0
-                              Decorate 32 Binding 0
+                              Decorate 32 Binding 5
                               Decorate 47(g_tTex2di4) DescriptorSet 0
-                              Decorate 47(g_tTex2di4) Binding 0
+                              Decorate 47(g_tTex2di4) Binding 3
                               Decorate 63(g_tTex2du4) DescriptorSet 0
-                              Decorate 63(g_tTex2du4) Binding 0
+                              Decorate 63(g_tTex2du4) Binding 4
                               Decorate 363(@entryPointOutput.Color) Location 0
                               Decorate 367(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 370(g_sSamp2d) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
index 2acc975..1fa728a 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 389
 
                               Capability Shader
@@ -1323,7 +1323,7 @@
                               Name 385  "g_tTexcdi4a"
                               Name 388  "g_tTexcdu4a"
                               Decorate 16(g_tTex2df4a) DescriptorSet 0
-                              Decorate 16(g_tTex2df4a) Binding 0
+                              Decorate 16(g_tTex2df4a) Binding 1
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               MemberDecorate 30($Global) 0 Offset 0
@@ -1336,11 +1336,11 @@
                               MemberDecorate 30($Global) 7 Offset 80
                               Decorate 30($Global) Block
                               Decorate 32 DescriptorSet 0
-                              Decorate 32 Binding 0
+                              Decorate 32 Binding 4
                               Decorate 47(g_tTex2di4a) DescriptorSet 0
-                              Decorate 47(g_tTex2di4a) Binding 0
+                              Decorate 47(g_tTex2di4a) Binding 2
                               Decorate 63(g_tTex2du4a) DescriptorSet 0
-                              Decorate 63(g_tTex2du4a) Binding 0
+                              Decorate 63(g_tTex2du4a) Binding 3
                               Decorate 363(@entryPointOutput.Color) Location 0
                               Decorate 367(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 370(g_sSamp2d) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
index 8ad84cd..8f45abc 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 164
 
                               Capability Shader
@@ -507,7 +507,7 @@
                               Name 160  "g_tTexcdi4"
                               Name 163  "g_tTexcdu4"
                               Decorate 16(g_tTex2df4) DescriptorSet 0
-                              Decorate 16(g_tTex2df4) Binding 0
+                              Decorate 16(g_tTex2df4) Binding 2
                               Decorate 20(g_sSampCmp) DescriptorSet 0
                               Decorate 20(g_sSampCmp) Binding 0
                               MemberDecorate 26($Global) 0 Offset 0
@@ -516,11 +516,11 @@
                               MemberDecorate 26($Global) 3 Offset 32
                               Decorate 26($Global) Block
                               Decorate 28 DescriptorSet 0
-                              Decorate 28 Binding 0
+                              Decorate 28 Binding 5
                               Decorate 44(g_tTex2di4) DescriptorSet 0
-                              Decorate 44(g_tTex2di4) Binding 0
+                              Decorate 44(g_tTex2di4) Binding 3
                               Decorate 60(g_tTex2du4) DescriptorSet 0
-                              Decorate 60(g_tTex2du4) Binding 0
+                              Decorate 60(g_tTex2du4) Binding 4
                               Decorate 129(@entryPointOutput.Color) Location 0
                               Decorate 133(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 138(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index cf406ed..ba02359 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 550
 
                               Capability Shader
@@ -2425,57 +2425,57 @@
                               Decorate 17(g_tTex1df4) DescriptorSet 0
                               Decorate 17(g_tTex1df4) Binding 0
                               Decorate 35(g_tTex1di4) DescriptorSet 0
-                              Decorate 35(g_tTex1di4) Binding 0
+                              Decorate 35(g_tTex1di4) Binding 1
                               Decorate 48(g_tTex1du4) DescriptorSet 0
-                              Decorate 48(g_tTex1du4) Binding 0
+                              Decorate 48(g_tTex1du4) Binding 2
                               Decorate 63(g_tTex1df4a) DescriptorSet 0
-                              Decorate 63(g_tTex1df4a) Binding 0
+                              Decorate 63(g_tTex1df4a) Binding 12
                               Decorate 85(g_tTex1di4a) DescriptorSet 0
-                              Decorate 85(g_tTex1di4a) Binding 0
+                              Decorate 85(g_tTex1di4a) Binding 13
                               Decorate 104(g_tTex1du4a) DescriptorSet 0
-                              Decorate 104(g_tTex1du4a) Binding 0
+                              Decorate 104(g_tTex1du4a) Binding 14
                               Decorate 123(g_tTex2df4) DescriptorSet 0
-                              Decorate 123(g_tTex2df4) Binding 0
+                              Decorate 123(g_tTex2df4) Binding 3
                               Decorate 143(g_tTex2di4) DescriptorSet 0
-                              Decorate 143(g_tTex2di4) Binding 0
+                              Decorate 143(g_tTex2di4) Binding 4
                               Decorate 162(g_tTex2du4) DescriptorSet 0
-                              Decorate 162(g_tTex2du4) Binding 0
+                              Decorate 162(g_tTex2du4) Binding 5
                               Decorate 183(g_tTex2df4a) DescriptorSet 0
-                              Decorate 183(g_tTex2df4a) Binding 0
+                              Decorate 183(g_tTex2df4a) Binding 15
                               Decorate 207(g_tTex2di4a) DescriptorSet 0
-                              Decorate 207(g_tTex2di4a) Binding 0
+                              Decorate 207(g_tTex2di4a) Binding 16
                               Decorate 230(g_tTex2du4a) DescriptorSet 0
-                              Decorate 230(g_tTex2du4a) Binding 0
+                              Decorate 230(g_tTex2du4a) Binding 17
                               Decorate 253(g_tTex3df4) DescriptorSet 0
-                              Decorate 253(g_tTex3df4) Binding 0
+                              Decorate 253(g_tTex3df4) Binding 6
                               Decorate 277(g_tTex3di4) DescriptorSet 0
-                              Decorate 277(g_tTex3di4) Binding 0
+                              Decorate 277(g_tTex3di4) Binding 7
                               Decorate 300(g_tTex3du4) DescriptorSet 0
-                              Decorate 300(g_tTex3du4) Binding 0
+                              Decorate 300(g_tTex3du4) Binding 8
                               Decorate 323(g_tTexcdf4) DescriptorSet 0
-                              Decorate 323(g_tTexcdf4) Binding 0
+                              Decorate 323(g_tTexcdf4) Binding 9
                               Decorate 342(g_tTexcdi4) DescriptorSet 0
-                              Decorate 342(g_tTexcdi4) Binding 0
+                              Decorate 342(g_tTexcdi4) Binding 10
                               Decorate 361(g_tTexcdu4) DescriptorSet 0
-                              Decorate 361(g_tTexcdu4) Binding 0
+                              Decorate 361(g_tTexcdu4) Binding 11
                               Decorate 380(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 380(g_tTexcdf4a) Binding 0
+                              Decorate 380(g_tTexcdf4a) Binding 18
                               Decorate 403(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 403(g_tTexcdi4a) Binding 0
+                              Decorate 403(g_tTexcdi4a) Binding 19
                               Decorate 426(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 426(g_tTexcdu4a) Binding 0
+                              Decorate 426(g_tTexcdu4a) Binding 20
                               Decorate 449(g_tTex2dmsf4) DescriptorSet 0
-                              Decorate 449(g_tTex2dmsf4) Binding 0
+                              Decorate 449(g_tTex2dmsf4) Binding 21
                               Decorate 462(g_tTex2dmsi4) DescriptorSet 0
-                              Decorate 462(g_tTex2dmsi4) Binding 0
+                              Decorate 462(g_tTex2dmsi4) Binding 22
                               Decorate 474(g_tTex2dmsu4) DescriptorSet 0
-                              Decorate 474(g_tTex2dmsu4) Binding 0
+                              Decorate 474(g_tTex2dmsu4) Binding 23
                               Decorate 486(g_tTex2dmsf4a) DescriptorSet 0
-                              Decorate 486(g_tTex2dmsf4a) Binding 0
+                              Decorate 486(g_tTex2dmsf4a) Binding 24
                               Decorate 500(g_tTex2dmsi4a) DescriptorSet 0
-                              Decorate 500(g_tTex2dmsi4a) Binding 0
+                              Decorate 500(g_tTex2dmsi4a) Binding 25
                               Decorate 514(g_tTex2dmsu4a) DescriptorSet 0
-                              Decorate 514(g_tTex2dmsu4a) Binding 0
+                              Decorate 514(g_tTex2dmsu4a) Binding 26
                               Decorate 540(@entryPointOutput.Color) Location 0
                               Decorate 544(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 549(g_sSamp) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
index 51368b6..d681f7d 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): 80008
+// Generated by (magic number): 8000a
 // 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 d096c38..1cce0cc 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 232
 
                               Capability Shader
@@ -794,39 +794,39 @@
                               Decorate 17(g_tTex1df4) DescriptorSet 0
                               Decorate 17(g_tTex1df4) Binding 0
                               Decorate 26(g_tTex1di4) DescriptorSet 0
-                              Decorate 26(g_tTex1di4) Binding 0
+                              Decorate 26(g_tTex1di4) Binding 1
                               Decorate 33(g_tTex1du4) DescriptorSet 0
-                              Decorate 33(g_tTex1du4) Binding 0
+                              Decorate 33(g_tTex1du4) Binding 2
                               Decorate 40(g_tBuffF) DescriptorSet 0
-                              Decorate 40(g_tBuffF) Binding 0
+                              Decorate 40(g_tBuffF) Binding 15
                               Decorate 47(g_tBuffI) DescriptorSet 0
-                              Decorate 47(g_tBuffI) Binding 0
+                              Decorate 47(g_tBuffI) Binding 16
                               Decorate 54(g_tBuffU) DescriptorSet 0
-                              Decorate 54(g_tBuffU) Binding 0
+                              Decorate 54(g_tBuffU) Binding 17
                               Decorate 63(g_tTex1df4a) DescriptorSet 0
-                              Decorate 63(g_tTex1df4a) Binding 0
+                              Decorate 63(g_tTex1df4a) Binding 9
                               Decorate 76(g_tTex1di4a) DescriptorSet 0
-                              Decorate 76(g_tTex1di4a) Binding 0
+                              Decorate 76(g_tTex1di4a) Binding 10
                               Decorate 86(g_tTex1du4a) DescriptorSet 0
-                              Decorate 86(g_tTex1du4a) Binding 0
+                              Decorate 86(g_tTex1du4a) Binding 11
                               Decorate 96(g_tTex2df4) DescriptorSet 0
-                              Decorate 96(g_tTex2df4) Binding 0
+                              Decorate 96(g_tTex2df4) Binding 3
                               Decorate 107(g_tTex2di4) DescriptorSet 0
-                              Decorate 107(g_tTex2di4) Binding 0
+                              Decorate 107(g_tTex2di4) Binding 4
                               Decorate 117(g_tTex2du4) DescriptorSet 0
-                              Decorate 117(g_tTex2du4) Binding 0
+                              Decorate 117(g_tTex2du4) Binding 5
                               Decorate 129(g_tTex2df4a) DescriptorSet 0
-                              Decorate 129(g_tTex2df4a) Binding 0
+                              Decorate 129(g_tTex2df4a) Binding 12
                               Decorate 142(g_tTex2di4a) DescriptorSet 0
-                              Decorate 142(g_tTex2di4a) Binding 0
+                              Decorate 142(g_tTex2di4a) Binding 13
                               Decorate 154(g_tTex2du4a) DescriptorSet 0
-                              Decorate 154(g_tTex2du4a) Binding 0
+                              Decorate 154(g_tTex2du4a) Binding 14
                               Decorate 166(g_tTex3df4) DescriptorSet 0
-                              Decorate 166(g_tTex3df4) Binding 0
+                              Decorate 166(g_tTex3df4) Binding 6
                               Decorate 179(g_tTex3di4) DescriptorSet 0
-                              Decorate 179(g_tTex3di4) Binding 0
+                              Decorate 179(g_tTex3di4) Binding 7
                               Decorate 191(g_tTex3du4) DescriptorSet 0
-                              Decorate 191(g_tTex3du4) Binding 0
+                              Decorate 191(g_tTex3du4) Binding 8
                               Decorate 216(@entryPointOutput.Color) Location 0
                               Decorate 220(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 225(g_sSamp) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
index 7c46c8e..5c49931 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 198
 
                               Capability Shader
@@ -620,9 +620,9 @@
                               Name 192  "@entryPointOutput.Depth"
                               Name 197  "g_sSamp"
                               Decorate 23(g_tTex2dmsf4) DescriptorSet 0
-                              Decorate 23(g_tTex2dmsf4) Binding 0
+                              Decorate 23(g_tTex2dmsf4) Binding 1
                               Decorate 131(g_tTex2dmsf4a) DescriptorSet 0
-                              Decorate 131(g_tTex2dmsf4a) Binding 0
+                              Decorate 131(g_tTex2dmsf4a) Binding 2
                               Decorate 181(sample) Flat
                               Decorate 181(sample) Location 0
                               Decorate 188(@entryPointOutput.Color) Location 0
diff --git a/Test/baseResults/hlsl.global-const-init.frag.out b/Test/baseResults/hlsl.global-const-init.frag.out
index 828c0c5..26895bb 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): 80008
+// Generated by (magic number): 8000a
 // 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 65804b7..362f4b4 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): 80008
+// Generated by (magic number): 8000a
 // 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 65bc44b..72070ed 100644
--- a/Test/baseResults/hlsl.gs-hs-mix.tesc.out
+++ b/Test/baseResults/hlsl.gs-hs-mix.tesc.out
@@ -986,7 +986,7 @@
 0:?     '@patchConstantOutput.NormalWS[2]' (layout( location=3) patch out 3-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 236
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hlslOffset.vert.out b/Test/baseResults/hlsl.hlslOffset.vert.out
index 099318c..09545c8 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): 80008
+// Generated by (magic number): 8000a
 // 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 d2fc257..cba0f8b 100644
--- a/Test/baseResults/hlsl.hull.1.tesc.out
+++ b/Test/baseResults/hlsl.hull.1.tesc.out
@@ -324,7 +324,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 104
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.2.tesc.out b/Test/baseResults/hlsl.hull.2.tesc.out
index 69b35ad..4e8a50c 100644
--- a/Test/baseResults/hlsl.hull.2.tesc.out
+++ b/Test/baseResults/hlsl.hull.2.tesc.out
@@ -320,7 +320,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 106
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.3.tesc.out b/Test/baseResults/hlsl.hull.3.tesc.out
index e67af0c..f40a79e 100644
--- a/Test/baseResults/hlsl.hull.3.tesc.out
+++ b/Test/baseResults/hlsl.hull.3.tesc.out
@@ -320,7 +320,7 @@
 0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 106
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.4.tesc.out b/Test/baseResults/hlsl.hull.4.tesc.out
index 8fd9a18..aa766ed 100644
--- a/Test/baseResults/hlsl.hull.4.tesc.out
+++ b/Test/baseResults/hlsl.hull.4.tesc.out
@@ -458,7 +458,7 @@
 0:?     '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 124
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.6.tesc.out b/Test/baseResults/hlsl.hull.6.tesc.out
index 8470c40..efb6e5b 100644
--- a/Test/baseResults/hlsl.hull.6.tesc.out
+++ b/Test/baseResults/hlsl.hull.6.tesc.out
@@ -450,7 +450,7 @@
 0:?     '@patchConstantOutput.Edges' ( patch out 4-element array of float TessLevelOuter)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 142
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
index 36e4b77..70881e9 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
@@ -472,7 +472,7 @@
 0:?     '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 135
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
index e14bcb2..d59e163 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
@@ -490,7 +490,7 @@
 0:?     '@patchConstantOutput.flInFactor' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 137
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.hull.void.tesc.out b/Test/baseResults/hlsl.hull.void.tesc.out
index b9429df..2249360 100644
--- a/Test/baseResults/hlsl.hull.void.tesc.out
+++ b/Test/baseResults/hlsl.hull.void.tesc.out
@@ -184,7 +184,7 @@
 0:?     'InvocationId' ( in uint InvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 67
 
                               Capability Tessellation
diff --git a/Test/baseResults/hlsl.identifier.sample.frag.out b/Test/baseResults/hlsl.identifier.sample.frag.out
index ddc4c51..7ba029d 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): 80008
+// Generated by (magic number): 8000a
 // 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 6b6de9c..e77c7ac 100644
--- a/Test/baseResults/hlsl.if.frag.out
+++ b/Test/baseResults/hlsl.if.frag.out
@@ -240,7 +240,7 @@
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 117
 
                               Capability Shader
@@ -390,7 +390,7 @@
               85:     81(ptr) AccessChain 16(input) 84
               86:    6(float) Load 85
                               Store 82(ii) 86
-              88:    21(bool) FOrdNotEqual 86 87
+              88:    21(bool) FUnordNotEqual 86 87
                               SelectionMerge 90 None
                               BranchConditional 88 89 90
               89:               Label
diff --git a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
index 304f24b..a12c59f 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): 80008
+// Generated by (magic number): 8000a
 // 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 8b5dcde..98e3dc0 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 139
 
                               Capability Shader
@@ -420,7 +420,7 @@
               28:             Label
               36:     35(ptr) AccessChain 18 34
               37:    6(float) Load 36
-              39:    23(bool) FOrdNotEqual 37 38
+              39:    23(bool) FUnordNotEqual 37 38
                               SelectionMerge 41 None
                               BranchConditional 39 40 41
               40:               Label
@@ -431,7 +431,7 @@
               41:             Label
               47:     35(ptr) AccessChain 18 46
               48:    6(float) Load 47
-              49:    23(bool) FOrdNotEqual 48 38
+              49:    23(bool) FUnordNotEqual 48 38
                               SelectionMerge 51 None
                               BranchConditional 49 50 51
               50:               Label
@@ -456,11 +456,11 @@
               70:    23(bool) INotEqual 69 25
               71:     35(ptr) AccessChain 18 34
               72:    6(float) Load 71
-              73:    23(bool) FOrdNotEqual 72 38
+              73:    23(bool) FUnordNotEqual 72 38
               74:    23(bool) LogicalAnd 70 73
               75:     35(ptr) AccessChain 18 46
               76:    6(float) Load 75
-              77:    23(bool) FOrdNotEqual 76 38
+              77:    23(bool) FUnordNotEqual 76 38
               78:    23(bool) LogicalOr 74 77
                               SelectionMerge 80 None
                               BranchConditional 78 79 80
@@ -479,7 +479,7 @@
                               Branch 94
               94:             Label
               95:    6(float) Load 87(f)
-              96:    23(bool) FOrdNotEqual 95 38
+              96:    23(bool) FUnordNotEqual 95 38
                               BranchConditional 96 91 92
               91:               Label
               97:    6(float)   Load 87(f)
@@ -524,7 +524,7 @@
              113:             Label
              121:     35(ptr) AccessChain 18 34
              122:    6(float) Load 121
-             123:    23(bool) FOrdNotEqual 122 38
+             123:    23(bool) FUnordNotEqual 122 38
              126:    6(float) Select 123 124 125
                               Store 120(g) 126
              127:    6(float) Load 120(g)
diff --git a/Test/baseResults/hlsl.include.vert.out b/Test/baseResults/hlsl.include.vert.out
index 4a814ae..f46658d 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): 80008
+// Generated by (magic number): 8000a
 // 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 02326b3..bb9a184 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): 80008
+// Generated by (magic number): 8000a
 // 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 2139adb..97caf9a 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): 80008
+// Generated by (magic number): 8000a
 // 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 0ba8bd2..9654e2b 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): 80008
+// Generated by (magic number): 8000a
 // 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 2ffa3c5..57baeef 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 92
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.inoutquals.negative.frag.out b/Test/baseResults/hlsl.inoutquals.negative.frag.out
new file mode 100644
index 0000000..933e6a6
--- /dev/null
+++ b/Test/baseResults/hlsl.inoutquals.negative.frag.out
@@ -0,0 +1,43 @@
+hlsl.inoutquals.negative.frag
+ERROR: 0:1: 'invalid1' : in/out qualifiers are only valid on parameters 
+ERROR: 0:2: 'invalid2' : in/out qualifiers are only valid on parameters 
+ERROR: 0:3: 'invalid3' : in/out qualifiers are only valid on parameters 
+ERROR: 0:4: 'invalid4' : in/out qualifiers are only valid on parameters 
+ERROR: 4 compilation errors.  No code generated.
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:6  Function Definition: @main( ( temp void)
+0:6    Function Parameters: 
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'invalid1' ( in float)
+0:?     'invalid2' ( inout float)
+0:?     'invalid3' ( inout float)
+0:?     'invalid4' ( out float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:6  Function Definition: @main( ( temp void)
+0:6    Function Parameters: 
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'invalid1' ( in float)
+0:?     'invalid2' ( inout float)
+0:?     'invalid3' ( inout float)
+0:?     'invalid4' ( out float)
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.int.dot.frag.out b/Test/baseResults/hlsl.int.dot.frag.out
index 7ea22a1..3272cb4 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 84
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsic.frexp.frag.out b/Test/baseResults/hlsl.intrinsic.frexp.frag.out
index 9fb9cc5..6067ad0 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): 80008
+// Generated by (magic number): 8000a
 // 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 7069ece..a7cfd2a 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): 80008
+// Generated by (magic number): 8000a
 // 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 a078978..9017d41 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): 80008
+// Generated by (magic number): 8000a
 // 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 761a3b3..5b7e227 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 265
 
                               Capability Shader
@@ -903,7 +903,7 @@
               17:             Label
       72(out_u1):      9(ptr) Variable Function
               60:    6(float) Load 11(inF0)
-              63:    61(bool) FOrdNotEqual 60 62
+              63:    61(bool) FUnordNotEqual 60 62
               64:    61(bool) All 63
               68:      8(int) Load 67(gs_ub)
               71:      8(int) AtomicIAdd 66(gs_ua) 69 70 68
@@ -960,7 +960,7 @@
               35:             Label
      115(out_u2):     27(ptr) Variable Function
              105:   24(fvec2) Load 29(inF0)
-             108:  106(bvec2) FOrdNotEqual 105 107
+             108:  106(bvec2) FUnordNotEqual 105 107
              109:    61(bool) All 108
              113:   26(ivec2) Load 112(gs_ub2)
              114:   26(ivec2) AtomicIAdd 111(gs_ua2) 69 70 113
@@ -1010,7 +1010,7 @@
               47:             Label
      159(out_u3):     39(ptr) Variable Function
              149:   36(fvec3) Load 41(inF0)
-             152:  150(bvec3) FOrdNotEqual 149 151
+             152:  150(bvec3) FUnordNotEqual 149 151
              153:    61(bool) All 152
              157:   38(ivec3) Load 156(gs_ub3)
              158:   38(ivec3) AtomicIAdd 155(gs_ua3) 69 70 157
@@ -1060,7 +1060,7 @@
               59:             Label
      202(out_u4):     51(ptr) Variable Function
              192:   48(fvec4) Load 53(inF0)
-             195:  193(bvec4) FOrdNotEqual 192 194
+             195:  193(bvec4) FUnordNotEqual 192 194
              196:    61(bool) All 195
              200:   50(ivec4) Load 199(gs_ub4)
              201:   50(ivec4) AtomicIAdd 198(gs_ua4) 69 70 200
diff --git a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
index 4832241..b0eeaa9 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): 80008
+// Generated by (magic number): 8000a
 // 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 472f31b..8444e20 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): 80008
+// Generated by (magic number): 8000a
 // 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 0260b93..502ad0f 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): 80008
+// Generated by (magic number): 8000a
 // 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 5277c5c..90a4b98 100644
--- a/Test/baseResults/hlsl.intrinsics.f1632.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
@@ -270,7 +270,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 106
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.intrinsics.f3216.frag.out b/Test/baseResults/hlsl.intrinsics.f3216.frag.out
index 77826b3..ddf9a70 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): 80008
+// Generated by (magic number): 8000a
 // 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 dca823b..c1d0a47 100644
--- a/Test/baseResults/hlsl.intrinsics.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.frag.out
@@ -5659,7 +5659,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 1839
 
                               Capability Shader
@@ -6389,7 +6389,7 @@
        341(r060):      7(ptr) Variable Function
        344(r061):      7(ptr) Variable Function
              140:    6(float) Load 13(inF0)
-             142:   137(bool) FOrdNotEqual 140 141
+             142:   137(bool) FUnordNotEqual 140 141
              143:   137(bool) All 142
                               Store 139(r000) 143
              145:    6(float) Load 13(inF0)
@@ -6399,7 +6399,7 @@
              149:    6(float) ExtInst 1(GLSL.std.450) 17(Acos) 148
                               Store 147(r002) 149
              151:    6(float) Load 13(inF0)
-             152:   137(bool) FOrdNotEqual 151 141
+             152:   137(bool) FUnordNotEqual 151 141
              153:   137(bool) Any 152
                               Store 150(r003) 153
              155:    6(float) Load 13(inF0)
@@ -6674,7 +6674,7 @@
        583(r065):     27(ptr) Variable Function
        586(r066):     27(ptr) Variable Function
              352:   26(fvec2) Load 31(inF0)
-             355:  353(bvec2) FOrdNotEqual 352 354
+             355:  353(bvec2) FUnordNotEqual 352 354
              356:   137(bool) All 355
                               Store 351(r000) 356
              358:   26(fvec2) Load 31(inF0)
@@ -6684,7 +6684,7 @@
              362:   26(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 361
                               Store 360(r002) 362
              364:   26(fvec2) Load 31(inF0)
-             365:  353(bvec2) FOrdNotEqual 364 354
+             365:  353(bvec2) FUnordNotEqual 364 354
              366:   137(bool) Any 365
                               Store 363(r003) 366
              368:   26(fvec2) Load 31(inF0)
@@ -6976,7 +6976,7 @@
        831(r066):     39(ptr) Variable Function
        834(r067):     39(ptr) Variable Function
              593:   38(fvec3) Load 43(inF0)
-             596:  594(bvec3) FOrdNotEqual 593 595
+             596:  594(bvec3) FUnordNotEqual 593 595
              597:   137(bool) All 596
                               Store 592(r000) 597
              599:   38(fvec3) Load 43(inF0)
@@ -6986,7 +6986,7 @@
              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
+             606:  594(bvec3) FUnordNotEqual 605 595
              607:   137(bool) Any 606
                               Store 604(r003) 607
              609:   38(fvec3) Load 43(inF0)
@@ -7286,7 +7286,7 @@
       1080(r066):     51(ptr) Variable Function
       1083(r067):     51(ptr) Variable Function
              842:   50(fvec4) Load 55(inF0)
-             845:  843(bvec4) FOrdNotEqual 842 844
+             845:  843(bvec4) FUnordNotEqual 842 844
              846:   137(bool) All 845
                               Store 841(r000) 846
              848:   50(fvec4) Load 55(inF0)
@@ -7296,7 +7296,7 @@
              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
+             855:  843(bvec4) FUnordNotEqual 854 844
              856:   137(bool) Any 855
                               Store 853(r003) 856
              858:   50(fvec4) Load 55(inF0)
@@ -7578,7 +7578,7 @@
       1257(r044):     63(ptr) Variable Function
       1262(r046):     63(ptr) Variable Function
             1091:          62 Load 65(inF0)
-            1093:        1092 FOrdNotEqual 1091 141
+            1093:        1092 FUnordNotEqual 1091 141
             1094:   137(bool) All 1093
                               Store 1090(r000) 1094
             1096:          62 Load 65(inF0)
@@ -7587,7 +7587,7 @@
             1098:          62 Load 65(inF0)
             1099:          62 ExtInst 1(GLSL.std.450) 17(Acos) 1098
             1101:          62 Load 65(inF0)
-            1102:        1092 FOrdNotEqual 1101 141
+            1102:        1092 FUnordNotEqual 1101 141
             1103:   137(bool) Any 1102
                               Store 1100(r003) 1103
             1105:          62 Load 65(inF0)
@@ -7807,7 +7807,7 @@
       1439(r044):     71(ptr) Variable Function
       1444(r046):     71(ptr) Variable Function
             1270:          70 Load 73(inF0)
-            1272:        1271 FOrdNotEqual 1270 141
+            1272:        1271 FUnordNotEqual 1270 141
             1273:   137(bool) All 1272
                               Store 1269(r000) 1273
             1275:          70 Load 73(inF0)
@@ -7816,7 +7816,7 @@
             1277:          70 Load 73(inF0)
             1278:          70 ExtInst 1(GLSL.std.450) 17(Acos) 1277
             1280:          70 Load 73(inF0)
-            1281:        1271 FOrdNotEqual 1280 141
+            1281:        1271 FUnordNotEqual 1280 141
             1282:   137(bool) Any 1281
                               Store 1279(r003) 1282
             1284:          70 Load 73(inF0)
@@ -8039,7 +8039,7 @@
       1624(r044):     79(ptr) Variable Function
       1629(r046):     79(ptr) Variable Function
             1452:          78 Load 81(inF0)
-            1454:        1453 FOrdNotEqual 1452 141
+            1454:        1453 FUnordNotEqual 1452 141
             1455:   137(bool) All 1454
                               Store 1451(r000) 1455
             1457:          78 Load 81(inF0)
@@ -8048,7 +8048,7 @@
             1459:          78 Load 81(inF0)
             1460:          78 ExtInst 1(GLSL.std.450) 17(Acos) 1459
             1462:          78 Load 81(inF0)
-            1463:        1453 FOrdNotEqual 1462 141
+            1463:        1453 FUnordNotEqual 1462 141
             1464:   137(bool) Any 1463
                               Store 1461(r003) 1464
             1466:          78 Load 81(inF0)
diff --git a/Test/baseResults/hlsl.intrinsics.lit.frag.out b/Test/baseResults/hlsl.intrinsics.lit.frag.out
index 9a8cb29..ef5759e 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): 80008
+// Generated by (magic number): 8000a
 // 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 920038f..c6fcdf0 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): 80008
+// Generated by (magic number): 8000a
 // 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 3b1bac8..0f74c7e 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): 80008
+// Generated by (magic number): 8000a
 // 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 2171698..b17c7e6 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): 80008
+// Generated by (magic number): 8000a
 // 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 41b1c68..18fd037 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 322
 
                               Capability Shader
@@ -966,9 +966,9 @@
                               Decorate 21 DescriptorSet 0
                               Decorate 21 Binding 0
                               Decorate 258(g_tTexbfs) DescriptorSet 0
-                              Decorate 258(g_tTexbfs) Binding 0
+                              Decorate 258(g_tTexbfs) Binding 1
                               Decorate 277(g_tTex1df4) DescriptorSet 0
-                              Decorate 277(g_tTex1df4) Binding 0
+                              Decorate 277(g_tTex1df4) Binding 2
                               Decorate 319(@entryPointOutput.color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
index 143fa72..1abed4c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 80
 
                               Capability Shader
@@ -258,7 +258,7 @@
                               Decorate 19 DescriptorSet 0
                               Decorate 19 Binding 0
                               Decorate 31(g_tTex1df4) DescriptorSet 0
-                              Decorate 31(g_tTex1df4) Binding 0
+                              Decorate 31(g_tTex1df4) Binding 1
                               Decorate 74(@entryPointOutput.color) Location 0
                               Decorate 79(g_tTexbfs) DescriptorSet 0
                               Decorate 79(g_tTexbfs) Binding 0
diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out
index 28e8e41..384f693 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 1225
 
                               Capability Shader
@@ -3004,14 +3004,14 @@
         15(inU1):      9(ptr) FunctionParameter
               17:             Label
              131:    6(float) Load 11(inF0)
-             134:   132(bool) FOrdNotEqual 131 133
+             134:   132(bool) FUnordNotEqual 131 133
              135:   132(bool) All 134
              136:    6(float) Load 11(inF0)
              137:    6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 136
              138:    6(float) Load 11(inF0)
              139:    6(float) ExtInst 1(GLSL.std.450) 17(Acos) 138
              140:    6(float) Load 11(inF0)
-             141:   132(bool) FOrdNotEqual 140 133
+             141:   132(bool) FUnordNotEqual 140 133
              142:   132(bool) Any 141
              143:    6(float) Load 11(inF0)
              144:    6(float) ExtInst 1(GLSL.std.450) 16(Asin) 143
@@ -3132,14 +3132,14 @@
         33(inU1):     27(ptr) FunctionParameter
               35:             Label
              252:   24(fvec2) Load 29(inF0)
-             255:  253(bvec2) FOrdNotEqual 252 254
+             255:  253(bvec2) FUnordNotEqual 252 254
              256:   132(bool) All 255
              257:   24(fvec2) Load 29(inF0)
              258:   24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 257
              259:   24(fvec2) Load 29(inF0)
              260:   24(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 259
              261:   24(fvec2) Load 29(inF0)
-             262:  253(bvec2) FOrdNotEqual 261 254
+             262:  253(bvec2) FUnordNotEqual 261 254
              263:   132(bool) Any 262
              264:   24(fvec2) Load 29(inF0)
              265:   24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 264
@@ -3275,14 +3275,14 @@
         45(inU1):     39(ptr) FunctionParameter
               47:             Label
              395:   36(fvec3) Load 41(inF0)
-             398:  396(bvec3) FOrdNotEqual 395 397
+             398:  396(bvec3) FUnordNotEqual 395 397
              399:   132(bool) All 398
              400:   36(fvec3) Load 41(inF0)
              401:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 400
              402:   36(fvec3) Load 41(inF0)
              403:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 402
              404:   36(fvec3) Load 41(inF0)
-             405:  396(bvec3) FOrdNotEqual 404 397
+             405:  396(bvec3) FUnordNotEqual 404 397
              406:   132(bool) Any 405
              407:   36(fvec3) Load 41(inF0)
              408:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 407
@@ -3421,14 +3421,14 @@
         57(inU1):     51(ptr) FunctionParameter
               59:             Label
              540:   48(fvec4) Load 53(inF0)
-             543:  541(bvec4) FOrdNotEqual 540 542
+             543:  541(bvec4) FUnordNotEqual 540 542
              544:   132(bool) All 543
              545:   48(fvec4) Load 53(inF0)
              546:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 545
              547:   48(fvec4) Load 53(inF0)
              548:   48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 547
              549:   48(fvec4) Load 53(inF0)
-             550:  541(bvec4) FOrdNotEqual 549 542
+             550:  541(bvec4) FUnordNotEqual 549 542
              551:   132(bool) Any 550
              552:   48(fvec4) Load 53(inF0)
              553:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 552
@@ -3572,14 +3572,14 @@
         65(inF2):     61(ptr) FunctionParameter
               67:             Label
              695:          60 Load 63(inF0)
-             697:         696 FOrdNotEqual 695 133
+             697:         696 FUnordNotEqual 695 133
              698:   132(bool) All 697
              699:          60 Load 63(inF0)
              700:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 699
              701:          60 Load 63(inF0)
              702:          60 ExtInst 1(GLSL.std.450) 17(Acos) 701
              703:          60 Load 63(inF0)
-             704:         696 FOrdNotEqual 703 133
+             704:         696 FUnordNotEqual 703 133
              705:   132(bool) Any 704
              706:          60 Load 63(inF0)
              707:          60 ExtInst 1(GLSL.std.450) 16(Asin) 706
@@ -3691,14 +3691,14 @@
         73(inF2):     69(ptr) FunctionParameter
               75:             Label
              810:          68 Load 71(inF0)
-             812:         811 FOrdNotEqual 810 133
+             812:         811 FUnordNotEqual 810 133
              813:   132(bool) All 812
              814:          68 Load 71(inF0)
              815:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 814
              816:          68 Load 71(inF0)
              817:          68 ExtInst 1(GLSL.std.450) 17(Acos) 816
              818:          68 Load 71(inF0)
-             819:         811 FOrdNotEqual 818 133
+             819:         811 FUnordNotEqual 818 133
              820:   132(bool) Any 819
              821:          68 Load 71(inF0)
              822:          68 ExtInst 1(GLSL.std.450) 16(Asin) 821
@@ -3813,14 +3813,14 @@
         81(inF2):     77(ptr) FunctionParameter
               83:             Label
              928:          76 Load 79(inF0)
-             930:         929 FOrdNotEqual 928 133
+             930:         929 FUnordNotEqual 928 133
              931:   132(bool) All 930
              932:          76 Load 79(inF0)
              933:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 932
              934:          76 Load 79(inF0)
              935:          76 ExtInst 1(GLSL.std.450) 17(Acos) 934
              936:          76 Load 79(inF0)
-             937:         929 FOrdNotEqual 936 133
+             937:         929 FUnordNotEqual 936 133
              938:   132(bool) Any 937
              939:          76 Load 79(inF0)
              940:          76 ExtInst 1(GLSL.std.450) 16(Asin) 939
diff --git a/Test/baseResults/hlsl.isfinite.frag.out b/Test/baseResults/hlsl.isfinite.frag.out
index a68bd1b..430ff06 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): 80008
+// Generated by (magic number): 8000a
 // 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 1e4f171..9007e93 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): 80008
+// Generated by (magic number): 8000a
 // 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 cc09653..83fa628 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): 80008
+// Generated by (magic number): 8000a
 // 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 9597762..9986074 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 130
 
                               Capability Shader
@@ -396,7 +396,7 @@
                               Name 124  "@entryPointOutput.Depth"
                               Name 129  "g_sSamp"
                               Decorate 14(g_tTex2dmsf4) DescriptorSet 0
-                              Decorate 14(g_tTex2dmsf4) Binding 0
+                              Decorate 14(g_tTex2dmsf4) Binding 1
                               MemberDecorate 20($Global) 0 Offset 0
                               MemberDecorate 20($Global) 1 Offset 8
                               MemberDecorate 20($Global) 2 Offset 16
@@ -407,17 +407,17 @@
                               MemberDecorate 20($Global) 7 Offset 80
                               Decorate 20($Global) Block
                               Decorate 22 DescriptorSet 0
-                              Decorate 22 Binding 0
+                              Decorate 22 Binding 7
                               Decorate 31(g_tTex2dmsi4) DescriptorSet 0
-                              Decorate 31(g_tTex2dmsi4) Binding 0
+                              Decorate 31(g_tTex2dmsi4) Binding 2
                               Decorate 39(g_tTex2dmsu4) DescriptorSet 0
-                              Decorate 39(g_tTex2dmsu4) Binding 0
+                              Decorate 39(g_tTex2dmsu4) Binding 3
                               Decorate 66(g_tTex2dmsf4a) DescriptorSet 0
-                              Decorate 66(g_tTex2dmsf4a) Binding 0
+                              Decorate 66(g_tTex2dmsf4a) Binding 4
                               Decorate 75(g_tTex2dmsi4a) DescriptorSet 0
-                              Decorate 75(g_tTex2dmsi4a) Binding 0
+                              Decorate 75(g_tTex2dmsi4a) Binding 5
                               Decorate 82(g_tTex2dmsu4a) DescriptorSet 0
-                              Decorate 82(g_tTex2dmsu4a) Binding 0
+                              Decorate 82(g_tTex2dmsu4a) Binding 6
                               Decorate 120(@entryPointOutput.Color) Location 0
                               Decorate 124(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 129(g_sSamp) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.load.array.dx10.frag.out b/Test/baseResults/hlsl.load.array.dx10.frag.out
index f26d7df..0440779 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 159
 
                               Capability Shader
@@ -442,7 +442,7 @@
                               Name 155  "g_tTexcdi4a"
                               Name 158  "g_tTexcdu4a"
                               Decorate 14(g_tTex1df4a) DescriptorSet 0
-                              Decorate 14(g_tTex1df4a) Binding 0
+                              Decorate 14(g_tTex1df4a) Binding 1
                               MemberDecorate 20($Global) 0 Offset 0
                               MemberDecorate 20($Global) 1 Offset 8
                               MemberDecorate 20($Global) 2 Offset 16
@@ -453,17 +453,17 @@
                               MemberDecorate 20($Global) 7 Offset 80
                               Decorate 20($Global) Block
                               Decorate 22 DescriptorSet 0
-                              Decorate 22 Binding 0
+                              Decorate 22 Binding 7
                               Decorate 36(g_tTex1di4a) DescriptorSet 0
-                              Decorate 36(g_tTex1di4a) Binding 0
+                              Decorate 36(g_tTex1di4a) Binding 2
                               Decorate 46(g_tTex1du4a) DescriptorSet 0
-                              Decorate 46(g_tTex1du4a) Binding 0
+                              Decorate 46(g_tTex1du4a) Binding 3
                               Decorate 57(g_tTex2df4a) DescriptorSet 0
-                              Decorate 57(g_tTex2df4a) Binding 0
+                              Decorate 57(g_tTex2df4a) Binding 4
                               Decorate 70(g_tTex2di4a) DescriptorSet 0
-                              Decorate 70(g_tTex2di4a) Binding 0
+                              Decorate 70(g_tTex2di4a) Binding 5
                               Decorate 80(g_tTex2du4a) DescriptorSet 0
-                              Decorate 80(g_tTex2du4a) Binding 0
+                              Decorate 80(g_tTex2du4a) Binding 6
                               Decorate 104(@entryPointOutput.Color) Location 0
                               Decorate 108(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 113(g_sSamp) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.load.basic.dx10.frag.out b/Test/baseResults/hlsl.load.basic.dx10.frag.out
index 895a109..2aef83d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 179
 
                               Capability Shader
@@ -555,23 +555,23 @@
                               MemberDecorate 20($Global) 7 Offset 80
                               Decorate 20($Global) Block
                               Decorate 22 DescriptorSet 0
-                              Decorate 22 Binding 0
+                              Decorate 22 Binding 9
                               Decorate 35(g_tTex1di4) DescriptorSet 0
-                              Decorate 35(g_tTex1di4) Binding 0
+                              Decorate 35(g_tTex1di4) Binding 1
                               Decorate 44(g_tTex1du4) DescriptorSet 0
-                              Decorate 44(g_tTex1du4) Binding 0
+                              Decorate 44(g_tTex1du4) Binding 2
                               Decorate 54(g_tTex2df4) DescriptorSet 0
-                              Decorate 54(g_tTex2df4) Binding 0
+                              Decorate 54(g_tTex2df4) Binding 3
                               Decorate 67(g_tTex2di4) DescriptorSet 0
-                              Decorate 67(g_tTex2di4) Binding 0
+                              Decorate 67(g_tTex2di4) Binding 4
                               Decorate 77(g_tTex2du4) DescriptorSet 0
-                              Decorate 77(g_tTex2du4) Binding 0
+                              Decorate 77(g_tTex2du4) Binding 5
                               Decorate 87(g_tTex3df4) DescriptorSet 0
-                              Decorate 87(g_tTex3df4) Binding 0
+                              Decorate 87(g_tTex3df4) Binding 6
                               Decorate 100(g_tTex3di4) DescriptorSet 0
-                              Decorate 100(g_tTex3di4) Binding 0
+                              Decorate 100(g_tTex3di4) Binding 7
                               Decorate 110(g_tTex3du4) DescriptorSet 0
-                              Decorate 110(g_tTex3du4) Binding 0
+                              Decorate 110(g_tTex3du4) Binding 8
                               Decorate 133(@entryPointOutput.Color) Location 0
                               Decorate 137(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 142(g_sSamp) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.load.basic.dx10.vert.out b/Test/baseResults/hlsl.load.basic.dx10.vert.out
index 99a57a7..a110532 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 171
 
                               Capability Shader
@@ -512,23 +512,23 @@
                               MemberDecorate 20($Global) 7 Offset 80
                               Decorate 20($Global) Block
                               Decorate 22 DescriptorSet 0
-                              Decorate 22 Binding 0
+                              Decorate 22 Binding 9
                               Decorate 35(g_tTex1di4) DescriptorSet 0
-                              Decorate 35(g_tTex1di4) Binding 0
+                              Decorate 35(g_tTex1di4) Binding 1
                               Decorate 44(g_tTex1du4) DescriptorSet 0
-                              Decorate 44(g_tTex1du4) Binding 0
+                              Decorate 44(g_tTex1du4) Binding 2
                               Decorate 54(g_tTex2df4) DescriptorSet 0
-                              Decorate 54(g_tTex2df4) Binding 0
+                              Decorate 54(g_tTex2df4) Binding 3
                               Decorate 67(g_tTex2di4) DescriptorSet 0
-                              Decorate 67(g_tTex2di4) Binding 0
+                              Decorate 67(g_tTex2di4) Binding 4
                               Decorate 77(g_tTex2du4) DescriptorSet 0
-                              Decorate 77(g_tTex2du4) Binding 0
+                              Decorate 77(g_tTex2du4) Binding 5
                               Decorate 87(g_tTex3df4) DescriptorSet 0
-                              Decorate 87(g_tTex3df4) Binding 0
+                              Decorate 87(g_tTex3df4) Binding 6
                               Decorate 100(g_tTex3di4) DescriptorSet 0
-                              Decorate 100(g_tTex3di4) Binding 0
+                              Decorate 100(g_tTex3di4) Binding 7
                               Decorate 110(g_tTex3du4) DescriptorSet 0
-                              Decorate 110(g_tTex3du4) Binding 0
+                              Decorate 110(g_tTex3du4) Binding 8
                               Decorate 129(@entryPointOutput.Pos) BuiltIn Position
                               Decorate 134(g_sSamp) DescriptorSet 0
                               Decorate 134(g_sSamp) Binding 0
diff --git a/Test/baseResults/hlsl.load.buffer.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
index 2255cf5..299bde1 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 72
 
                               Capability Shader
@@ -204,7 +204,7 @@
                               Name 68  "@entryPointOutput.Depth"
                               Name 71  "g_tTexbf4_test"
                               Decorate 16(g_tTexbf4) DescriptorSet 0
-                              Decorate 16(g_tTexbf4) Binding 0
+                              Decorate 16(g_tTexbf4) Binding 1
                               MemberDecorate 22($Global) 0 Offset 0
                               MemberDecorate 22($Global) 1 Offset 8
                               MemberDecorate 22($Global) 2 Offset 16
@@ -215,11 +215,11 @@
                               MemberDecorate 22($Global) 7 Offset 80
                               Decorate 22($Global) Block
                               Decorate 24 DescriptorSet 0
-                              Decorate 24 Binding 0
+                              Decorate 24 Binding 4
                               Decorate 34(g_tTexbi4) DescriptorSet 0
-                              Decorate 34(g_tTexbi4) Binding 0
+                              Decorate 34(g_tTexbi4) Binding 2
                               Decorate 45(g_tTexbu4) DescriptorSet 0
-                              Decorate 45(g_tTexbu4) Binding 0
+                              Decorate 45(g_tTexbu4) Binding 3
                               Decorate 64(@entryPointOutput.Color) Location 0
                               Decorate 68(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 71(g_tTexbf4_test) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
index 08a1c56..f7a530c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 75
 
                               Capability Shader
@@ -210,7 +210,7 @@
                               Name 71  "@entryPointOutput.Depth"
                               Name 74  "g_tTexbfs_test"
                               Decorate 16(g_tTexbfs) DescriptorSet 0
-                              Decorate 16(g_tTexbfs) Binding 0
+                              Decorate 16(g_tTexbfs) Binding 1
                               MemberDecorate 22($Global) 0 Offset 0
                               MemberDecorate 22($Global) 1 Offset 8
                               MemberDecorate 22($Global) 2 Offset 16
@@ -221,11 +221,11 @@
                               MemberDecorate 22($Global) 7 Offset 80
                               Decorate 22($Global) Block
                               Decorate 24 DescriptorSet 0
-                              Decorate 24 Binding 0
+                              Decorate 24 Binding 4
                               Decorate 35(g_tTexbis) DescriptorSet 0
-                              Decorate 35(g_tTexbis) Binding 0
+                              Decorate 35(g_tTexbis) Binding 2
                               Decorate 46(g_tTexbus) DescriptorSet 0
-                              Decorate 46(g_tTexbus) Binding 0
+                              Decorate 46(g_tTexbus) Binding 3
                               Decorate 67(@entryPointOutput.Color) Location 0
                               Decorate 71(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 74(g_tTexbfs_test) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out
index ebf1bd3..d0fa5fd 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 201
 
                               Capability Shader
@@ -628,23 +628,23 @@
                               MemberDecorate 20($Global) 7 Offset 80
                               Decorate 20($Global) Block
                               Decorate 22 DescriptorSet 0
-                              Decorate 22 Binding 0
+                              Decorate 22 Binding 9
                               Decorate 38(g_tTex1di4) DescriptorSet 0
-                              Decorate 38(g_tTex1di4) Binding 0
+                              Decorate 38(g_tTex1di4) Binding 1
                               Decorate 49(g_tTex1du4) DescriptorSet 0
-                              Decorate 49(g_tTex1du4) Binding 0
+                              Decorate 49(g_tTex1du4) Binding 2
                               Decorate 61(g_tTex2df4) DescriptorSet 0
-                              Decorate 61(g_tTex2df4) Binding 0
+                              Decorate 61(g_tTex2df4) Binding 3
                               Decorate 78(g_tTex2di4) DescriptorSet 0
-                              Decorate 78(g_tTex2di4) Binding 0
+                              Decorate 78(g_tTex2di4) Binding 4
                               Decorate 90(g_tTex2du4) DescriptorSet 0
-                              Decorate 90(g_tTex2du4) Binding 0
+                              Decorate 90(g_tTex2du4) Binding 5
                               Decorate 102(g_tTex3df4) DescriptorSet 0
-                              Decorate 102(g_tTex3df4) Binding 0
+                              Decorate 102(g_tTex3df4) Binding 6
                               Decorate 118(g_tTex3di4) DescriptorSet 0
-                              Decorate 118(g_tTex3di4) Binding 0
+                              Decorate 118(g_tTex3di4) Binding 7
                               Decorate 130(g_tTex3du4) DescriptorSet 0
-                              Decorate 130(g_tTex3du4) Binding 0
+                              Decorate 130(g_tTex3du4) Binding 8
                               Decorate 155(@entryPointOutput.Color) Location 0
                               Decorate 159(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 164(g_sSamp) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
index 297c737..a379068 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 174
 
                               Capability Shader
@@ -491,7 +491,7 @@
                               Name 170  "g_tTexcdi4a"
                               Name 173  "g_tTexcdu4a"
                               Decorate 14(g_tTex1df4a) DescriptorSet 0
-                              Decorate 14(g_tTex1df4a) Binding 0
+                              Decorate 14(g_tTex1df4a) Binding 1
                               MemberDecorate 20($Global) 0 Offset 0
                               MemberDecorate 20($Global) 1 Offset 8
                               MemberDecorate 20($Global) 2 Offset 16
@@ -502,17 +502,17 @@
                               MemberDecorate 20($Global) 7 Offset 80
                               Decorate 20($Global) Block
                               Decorate 22 DescriptorSet 0
-                              Decorate 22 Binding 0
+                              Decorate 22 Binding 7
                               Decorate 39(g_tTex1di4a) DescriptorSet 0
-                              Decorate 39(g_tTex1di4a) Binding 0
+                              Decorate 39(g_tTex1di4a) Binding 2
                               Decorate 51(g_tTex1du4a) DescriptorSet 0
-                              Decorate 51(g_tTex1du4a) Binding 0
+                              Decorate 51(g_tTex1du4a) Binding 3
                               Decorate 64(g_tTex2df4a) DescriptorSet 0
-                              Decorate 64(g_tTex2df4a) Binding 0
+                              Decorate 64(g_tTex2df4a) Binding 4
                               Decorate 81(g_tTex2di4a) DescriptorSet 0
-                              Decorate 81(g_tTex2di4a) Binding 0
+                              Decorate 81(g_tTex2di4a) Binding 5
                               Decorate 93(g_tTex2du4a) DescriptorSet 0
-                              Decorate 93(g_tTex2du4a) Binding 0
+                              Decorate 93(g_tTex2du4a) Binding 6
                               Decorate 119(@entryPointOutput.Color) Location 0
                               Decorate 123(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 128(g_sSamp) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
index 7ad197c..73a854b 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 57
 
                               Capability Shader
@@ -151,11 +151,11 @@
                               MemberDecorate 20($Global) 7 Offset 80
                               Decorate 20($Global) Block
                               Decorate 22 DescriptorSet 0
-                              Decorate 22 Binding 0
+                              Decorate 22 Binding 3
                               Decorate 31(g_tBuffU) DescriptorSet 0
-                              Decorate 31(g_tBuffU) Binding 0
+                              Decorate 31(g_tBuffU) Binding 2
                               Decorate 39(g_tBuffI) DescriptorSet 0
-                              Decorate 39(g_tBuffI) Binding 0
+                              Decorate 39(g_tBuffI) Binding 1
                               Decorate 54(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
index 77344ac..db105d7 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 119
 
                               Capability Shader
@@ -255,7 +255,7 @@
                               Name 115  "g_tTex3di4"
                               Name 118  "g_tTex3du4"
                               Decorate 14(g_tTex1df4a) DescriptorSet 0
-                              Decorate 14(g_tTex1df4a) Binding 0
+                              Decorate 14(g_tTex1df4a) Binding 1
                               MemberDecorate 20($Global) 0 Offset 0
                               MemberDecorate 20($Global) 1 Offset 8
                               MemberDecorate 20($Global) 2 Offset 16
@@ -266,17 +266,17 @@
                               MemberDecorate 20($Global) 7 Offset 80
                               Decorate 20($Global) Block
                               Decorate 22 DescriptorSet 0
-                              Decorate 22 Binding 0
+                              Decorate 22 Binding 7
                               Decorate 30(g_tTex1di4a) DescriptorSet 0
-                              Decorate 30(g_tTex1di4a) Binding 0
+                              Decorate 30(g_tTex1di4a) Binding 2
                               Decorate 38(g_tTex1du4a) DescriptorSet 0
-                              Decorate 38(g_tTex1du4a) Binding 0
+                              Decorate 38(g_tTex1du4a) Binding 3
                               Decorate 46(g_tTex2df4a) DescriptorSet 0
-                              Decorate 46(g_tTex2df4a) Binding 0
+                              Decorate 46(g_tTex2df4a) Binding 4
                               Decorate 55(g_tTex2di4a) DescriptorSet 0
-                              Decorate 55(g_tTex2di4a) Binding 0
+                              Decorate 55(g_tTex2di4a) Binding 5
                               Decorate 62(g_tTex2du4a) DescriptorSet 0
-                              Decorate 62(g_tTex2du4a) Binding 0
+                              Decorate 62(g_tTex2du4a) Binding 6
                               Decorate 82(@entryPointOutput.Color) Location 0
                               Decorate 86(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 91(g_sSamp) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
index bf9ea2d..c063e0c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 132
 
                               Capability Shader
@@ -302,23 +302,23 @@
                               MemberDecorate 20($Global) 7 Offset 80
                               Decorate 20($Global) Block
                               Decorate 22 DescriptorSet 0
-                              Decorate 22 Binding 0
+                              Decorate 22 Binding 9
                               Decorate 30(g_tTex1di4) DescriptorSet 0
-                              Decorate 30(g_tTex1di4) Binding 0
+                              Decorate 30(g_tTex1di4) Binding 1
                               Decorate 38(g_tTex1du4) DescriptorSet 0
-                              Decorate 38(g_tTex1du4) Binding 0
+                              Decorate 38(g_tTex1du4) Binding 2
                               Decorate 46(g_tTex2df4) DescriptorSet 0
-                              Decorate 46(g_tTex2df4) Binding 0
+                              Decorate 46(g_tTex2df4) Binding 3
                               Decorate 55(g_tTex2di4) DescriptorSet 0
-                              Decorate 55(g_tTex2di4) Binding 0
+                              Decorate 55(g_tTex2di4) Binding 4
                               Decorate 62(g_tTex2du4) DescriptorSet 0
-                              Decorate 62(g_tTex2du4) Binding 0
+                              Decorate 62(g_tTex2du4) Binding 5
                               Decorate 69(g_tTex3df4) DescriptorSet 0
-                              Decorate 69(g_tTex3df4) Binding 0
+                              Decorate 69(g_tTex3df4) Binding 6
                               Decorate 78(g_tTex3di4) DescriptorSet 0
-                              Decorate 78(g_tTex3di4) Binding 0
+                              Decorate 78(g_tTex3di4) Binding 7
                               Decorate 85(g_tTex3du4) DescriptorSet 0
-                              Decorate 85(g_tTex3du4) Binding 0
+                              Decorate 85(g_tTex3du4) Binding 8
                               Decorate 104(@entryPointOutput.Color) Location 0
                               Decorate 108(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 113(g_sSamp) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.logical.binary.frag.out b/Test/baseResults/hlsl.logical.binary.frag.out
index 1df3966..d66eb7c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 56
 
                               Capability Shader
@@ -193,7 +193,7 @@
               24:    21(bool) INotEqual 20 23
               27:     26(ptr) AccessChain 16 25
               28:    6(float) Load 27
-              30:    21(bool) FOrdNotEqual 28 29
+              30:    21(bool) FUnordNotEqual 28 29
               31:    21(bool) LogicalAnd 24 30
                               SelectionMerge 33 None
                               BranchConditional 31 32 33
@@ -205,7 +205,7 @@
               36:    21(bool) INotEqual 35 23
               37:     26(ptr) AccessChain 16 25
               38:    6(float) Load 37
-              39:    21(bool) FOrdNotEqual 38 29
+              39:    21(bool) FUnordNotEqual 38 29
               40:    21(bool) LogicalOr 36 39
                               SelectionMerge 42 None
                               BranchConditional 40 41 42
diff --git a/Test/baseResults/hlsl.logical.binary.vec.frag.out b/Test/baseResults/hlsl.logical.binary.vec.frag.out
index bc469dc..20f87b8 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): 80008
+// Generated by (magic number): 8000a
 // 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 57247c6..711625d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 84
 
                               Capability Shader
@@ -266,11 +266,11 @@
               34:   30(bvec4) LogicalNot 33
               37:     36(ptr) AccessChain 16 35
               38:    6(float) Load 37
-              40:    21(bool) FOrdNotEqual 38 39
+              40:    21(bool) FUnordNotEqual 38 39
               41:    21(bool) LogicalNot 40
               44:     43(ptr) AccessChain 16 42
               45:    7(fvec4) Load 44
-              47:   30(bvec4) FOrdNotEqual 45 46
+              47:   30(bvec4) FUnordNotEqual 45 46
               48:   30(bvec4) LogicalNot 47
               49:     18(ptr) AccessChain 16 17
               50:     12(int) Load 49
@@ -282,7 +282,7 @@
               53:             Label
               54:     36(ptr) AccessChain 16 35
               55:    6(float) Load 54
-              56:    21(bool) FOrdNotEqual 55 39
+              56:    21(bool) FUnordNotEqual 55 39
                               SelectionMerge 58 None
                               BranchConditional 56 57 58
               57:               Label
@@ -299,7 +299,7 @@
               64:             Label
               65:     36(ptr) AccessChain 16 35
               66:    6(float) Load 65
-              67:    21(bool) FOrdNotEqual 66 39
+              67:    21(bool) FUnordNotEqual 66 39
               68:    21(bool) LogicalNot 67
                               SelectionMerge 70 None
                               BranchConditional 68 69 70
diff --git a/Test/baseResults/hlsl.logicalConvert.frag.out b/Test/baseResults/hlsl.logicalConvert.frag.out
index 4757f33..44e1961 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): 80008
+// Generated by (magic number): 8000a
 // 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 c6130f7..ea37109 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): 80008
+// Generated by (magic number): 8000a
 // 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 1d92d5f..48a7180 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): 80008
+// Generated by (magic number): 8000a
 // 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 1362ee7..47bbaf1 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): 80008
+// Generated by (magic number): 8000a
 // 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 ed08983..1117df1 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): 80008
+// Generated by (magic number): 8000a
 // 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 ad0c314..d567c17 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): 80008
+// Generated by (magic number): 8000a
 // 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 829d0b1..c480f78 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.matpack-pragma-global.frag.out b/Test/baseResults/hlsl.matpack-pragma-global.frag.out
new file mode 100644
index 0000000..2feef9e
--- /dev/null
+++ b/Test/baseResults/hlsl.matpack-pragma-global.frag.out
@@ -0,0 +1,102 @@
+hlsl.matpack-pragma-global.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6  Function Definition: @main( ( temp 4-component vector of float)
+0:6    Function Parameters: 
+0:?     Sequence
+0:7      Branch: Return with expression
+0:7        direct index ( temp 4-component vector of float)
+0:7          g_GlobalMat1: direct index for structure ( uniform 4X4 matrix of float)
+0:7            'anon@0' (layout( column_major std140) uniform block{ uniform 4X4 matrix of float g_GlobalMat1})
+0:7            Constant:
+0:7              0 (const uint)
+0:7          Constant:
+0:7            0 (const int)
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform 4X4 matrix of float g_GlobalMat1})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:6  Function Definition: @main( ( temp 4-component vector of float)
+0:6    Function Parameters: 
+0:?     Sequence
+0:7      Branch: Return with expression
+0:7        direct index ( temp 4-component vector of float)
+0:7          g_GlobalMat1: direct index for structure ( uniform 4X4 matrix of float)
+0:7            'anon@0' (layout( column_major std140) uniform block{ uniform 4X4 matrix of float g_GlobalMat1})
+0:7            Constant:
+0:7              0 (const uint)
+0:7          Constant:
+0:7            0 (const int)
+0:6  Function Definition: main( ( temp void)
+0:6    Function Parameters: 
+0:?     Sequence
+0:6      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:6        Function Call: @main( ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform 4X4 matrix of float g_GlobalMat1})
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 25
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 23
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 9  "@main("
+                              Name 12  "$Global"
+                              MemberName 12($Global) 0  "g_GlobalMat1"
+                              Name 14  ""
+                              Name 23  "@entryPointOutput"
+                              MemberDecorate 12($Global) 0 ColMajor
+                              MemberDecorate 12($Global) 0 Offset 0
+                              MemberDecorate 12($Global) 0 MatrixStride 16
+                              Decorate 12($Global) Block
+                              Decorate 14 DescriptorSet 0
+                              Decorate 14 Binding 0
+                              Decorate 23(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeFunction 7(fvec4)
+              11:             TypeMatrix 7(fvec4) 4
+     12($Global):             TypeStruct 11
+              13:             TypePointer Uniform 12($Global)
+              14:     13(ptr) Variable Uniform
+              15:             TypeInt 32 1
+              16:     15(int) Constant 0
+              17:             TypePointer Uniform 7(fvec4)
+              22:             TypePointer Output 7(fvec4)
+23(@entryPointOutput):     22(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              24:    7(fvec4) FunctionCall 9(@main()
+                              Store 23(@entryPointOutput) 24
+                              Return
+                              FunctionEnd
+       9(@main():    7(fvec4) Function None 8
+              10:             Label
+              18:     17(ptr) AccessChain 14 16 16
+              19:    7(fvec4) Load 18
+                              ReturnValue 19
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.matpack-pragma.frag.out b/Test/baseResults/hlsl.matpack-pragma.frag.out
index a5e351e..bd5ca50 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): 80008
+// Generated by (magic number): 8000a
 // 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 7bc0c17..4082cb2 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): 80008
+// Generated by (magic number): 8000a
 // 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 1e5fbb9..fa7a8c0 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): 80008
+// Generated by (magic number): 8000a
 // 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 14cd8bf..7a0c5d2 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): 80008
+// Generated by (magic number): 8000a
 // 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 83dc86f..2886f8f 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): 80008
+// Generated by (magic number): 8000a
 // 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 2ce899b..013f8d4 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): 80008
+// Generated by (magic number): 8000a
 // 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 4123d23..82b000f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 61
 
                               Capability Shader
@@ -143,7 +143,7 @@
                               Name 25  "g_tTex2df4a"
                               Name 59  "@entryPointOutput"
                               Decorate 13(g_tTex2df4) DescriptorSet 0
-                              Decorate 13(g_tTex2df4) Binding 0
+                              Decorate 13(g_tTex2df4) Binding 1
                               Decorate 25(g_tTex2df4a) DescriptorSet 0
                               Decorate 25(g_tTex2df4a) Binding 0
                               Decorate 59(@entryPointOutput) Location 0
diff --git a/Test/baseResults/hlsl.mul-truncate.frag.out b/Test/baseResults/hlsl.mul-truncate.frag.out
index c337ed4..25e7b2e 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): 80008
+// Generated by (magic number): 8000a
 // 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 fa48092..cfe3ea8 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): 80008
+// Generated by (magic number): 8000a
 // 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 d641512..fcb9f18 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): 80008
+// Generated by (magic number): 8000a
 // 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 54b5107..9379863 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): 80008
+// Generated by (magic number): 8000a
 // 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 9431f66..5346c44 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): 80008
+// Generated by (magic number): 8000a
 // 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 fc51e9c..3531a34 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): 80008
+// Generated by (magic number): 8000a
 // 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 0b6bdbc..897f8bc 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): 80008
+// Generated by (magic number): 8000a
 // 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 268e563..59b251a 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): 80008
+// Generated by (magic number): 8000a
 // 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 b433266..1725d3f 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): 80008
+// Generated by (magic number): 8000a
 // 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 95cf29f..c8676e3 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): 80008
+// Generated by (magic number): 8000a
 // 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 4ac7a91..738fa4f 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): 80008
+// Generated by (magic number): 8000a
 // 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 d93c305..3428d80 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 520
 
                               Capability Shader
@@ -1457,7 +1457,7 @@
                               Store 330(param) 331
              332:           2 FunctionCall 68(foo3(b1;) 330(param)
              333:6(float64_t) Load 155(d)
-             335:     8(bool) FOrdNotEqual 333 334
+             335:     8(bool) FUnordNotEqual 333 334
                               Store 336(param) 335
              337:           2 FunctionCall 68(foo3(b1;) 336(param)
              338:     15(int) Load 167(u)
@@ -1469,7 +1469,7 @@
                               Store 345(param) 344
              346:           2 FunctionCall 68(foo3(b1;) 345(param)
              347:   29(float) Load 179(f)
-             349:     8(bool) FOrdNotEqual 347 348
+             349:     8(bool) FUnordNotEqual 347 348
                               Store 350(param) 349
              351:           2 FunctionCall 68(foo3(b1;) 350(param)
              352:     8(bool) Load 156(b)
diff --git a/Test/baseResults/hlsl.params.default.frag.out b/Test/baseResults/hlsl.params.default.frag.out
index 5d054bf..a28ddc4 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): 80008
+// Generated by (magic number): 8000a
 // 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 c3ed3a2..754c86c 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): 80008
+// Generated by (magic number): 8000a
 // 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 520a0fb..c9fcc6f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 43
 
                               Capability Shader
@@ -116,7 +116,7 @@
                               Decorate 24(tex[0]) DescriptorSet 0
                               Decorate 24(tex[0]) Binding 0
                               Decorate 28(tex[1]) DescriptorSet 0
-                              Decorate 28(tex[1]) Binding 0
+                              Decorate 28(tex[1]) Binding 1
                               Decorate 36(pos) Location 0
                               Decorate 39(@entryPointOutput) BuiltIn Position
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.partialInit.frag.out b/Test/baseResults/hlsl.partialInit.frag.out
index 551c579..4686566 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): 80008
+// Generated by (magic number): 8000a
 // 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 0416cf4..a8479f5 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): 80008
+// Generated by (magic number): 8000a
 // 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 338884a..9ccf05c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 80
 
                               Capability Shader
@@ -88,7 +88,7 @@
                               Decorate 49(g_tColor) DescriptorSet 0
                               Decorate 49(g_tColor) Binding 0
                               Decorate 56(g_sAniso) DescriptorSet 0
-                              Decorate 56(g_sAniso) Binding 0
+                              Decorate 56(g_sAniso) Binding 1
                               Decorate 71(i.vTextureCoords) Location 0
                               Decorate 75(@entryPointOutput.vColor) Location 0
                3:             TypeVoid
diff --git a/Test/baseResults/hlsl.pp.line3.frag.out b/Test/baseResults/hlsl.pp.line3.frag.out
index e94547c..d19c516 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): 80008
+// Generated by (magic number): 8000a
 // 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 5531ac0..2244588 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 116
 
                               Capability Shader
@@ -79,7 +79,7 @@
                               Decorate 48(g_tColor) DescriptorSet 0
                               Decorate 48(g_tColor) Binding 0
                               Decorate 55(g_sAniso) DescriptorSet 0
-                              Decorate 55(g_sAniso) Binding 0
+                              Decorate 55(g_sAniso) Binding 1
                               Decorate 70(i.vTextureCoords) Location 0
                               Decorate 74(@entryPointOutput.vColor) Location 0
                3:             TypeVoid
diff --git a/Test/baseResults/hlsl.pp.vert.out b/Test/baseResults/hlsl.pp.vert.out
index 5d4e943..5478101 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): 80008
+// Generated by (magic number): 8000a
 // 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 b51be0d..85fe187 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): 80008
+// Generated by (magic number): 8000a
 // 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 7dd21a6..f231b35 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): 80008
+// Generated by (magic number): 8000a
 // 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 84b2648..39e3578 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): 80008
+// Generated by (magic number): 8000a
 // 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 11ec1ad..754d0d8 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 40
 
                               Capability Shader
@@ -116,7 +116,7 @@
                               Decorate 16(test_texture) DescriptorSet 0
                               Decorate 16(test_texture) Binding 0
                               Decorate 20(test_texture_ss) DescriptorSet 0
-                              Decorate 20(test_texture_ss) Binding 0
+                              Decorate 20(test_texture_ss) Binding 1
                               Decorate 33(input) Location 0
                               Decorate 36(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.promote.atomic.frag.out b/Test/baseResults/hlsl.promote.atomic.frag.out
index 4d56fba..f4197ef 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): 80008
+// Generated by (magic number): 8000a
 // 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 f63fc3e..a0007c3 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): 80008
+// Generated by (magic number): 8000a
 // 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 a6ad7ca..8ea55d0 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): 80008
+// Generated by (magic number): 8000a
 // 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 0a17395..91ed472 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 596
 
                               Capability Shader
@@ -1979,11 +1979,11 @@
               89:             Label
              251:    182(ptr) AccessChain 113 181
              252:    7(fvec3) Load 251
-             253:   28(bvec3) FOrdNotEqual 252 142
+             253:   28(bvec3) FUnordNotEqual 252 142
                               Store 87(p) 253
              254:    182(ptr) AccessChain 113 181
              255:    7(fvec3) Load 254
-             256:   28(bvec3) FOrdNotEqual 255 142
+             256:   28(bvec3) FUnordNotEqual 255 142
                               ReturnValue 256
                               FunctionEnd
 91(Fn_R_B3D(vb3;):   28(bvec3) Function None 80
@@ -1991,11 +1991,11 @@
               92:             Label
              259:    152(ptr) AccessChain 113 151
              260: 35(f64vec3) Load 259
-             263:   28(bvec3) FOrdNotEqual 260 262
+             263:   28(bvec3) FUnordNotEqual 260 262
                               Store 90(p) 263
              264:    152(ptr) AccessChain 113 151
              265: 35(f64vec3) Load 264
-             266:   28(bvec3) FOrdNotEqual 265 262
+             266:   28(bvec3) FUnordNotEqual 265 262
                               ReturnValue 266
                               FunctionEnd
 95(Fn_R_D3I(vd3;): 35(f64vec3) Function None 93
@@ -2135,11 +2135,11 @@
                               Store 360(r31) 363
              365:    182(ptr) AccessChain 113 181
              366:    7(fvec3) Load 365
-             367:   28(bvec3) FOrdNotEqual 366 142
+             367:   28(bvec3) FUnordNotEqual 366 142
                               Store 364(r32) 367
              369:    152(ptr) AccessChain 113 151
              370: 35(f64vec3) Load 369
-             371:   28(bvec3) FOrdNotEqual 370 262
+             371:   28(bvec3) FUnordNotEqual 370 262
                               Store 368(r33) 371
              373:    115(ptr) AccessChain 113 114
              374:   14(ivec3) Load 373
diff --git a/Test/baseResults/hlsl.reflection.binding.frag.out b/Test/baseResults/hlsl.reflection.binding.frag.out
index a13e575..e559dd3 100644
--- a/Test/baseResults/hlsl.reflection.binding.frag.out
+++ b/Test/baseResults/hlsl.reflection.binding.frag.out
@@ -12,8 +12,8 @@
 c2_c: offset 20, type 1406, size 1, index 1, binding -1, stages 16
 
 Uniform block reflection:
-cbuff1: offset -1, type ffffffff, size 24, index -1, binding 2, stages 16, numMembers 3
-cbuff2: offset -1, type ffffffff, size 24, index -1, binding 3, stages 16, numMembers 3
+cbuff1: offset -1, type ffffffff, size 24, index 0, binding 2, stages 16, numMembers 3
+cbuff2: offset -1, type ffffffff, size 24, index 1, binding 3, stages 16, numMembers 3
 
 Buffer variable reflection:
 
diff --git a/Test/baseResults/hlsl.reflection.vert.out b/Test/baseResults/hlsl.reflection.vert.out
index 1b3cb51..796784b 100644
--- a/Test/baseResults/hlsl.reflection.vert.out
+++ b/Test/baseResults/hlsl.reflection.vert.out
@@ -63,12 +63,12 @@
 foo2: offset 0, type 1406, size 1, index 5, binding -1, stages 1
 
 Uniform block reflection:
-nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 1, numMembers 9
-$Global: offset -1, type ffffffff, size 3088, index -1, binding -1, stages 1, numMembers 106
-c_nameless: offset -1, type ffffffff, size 96, index -1, binding -1, stages 1, numMembers 5
-nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 1, numMembers 4
-abl: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
-abl2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
+nameless: offset -1, type ffffffff, size 496, index 0, binding -1, stages 1, numMembers 9
+$Global: offset -1, type ffffffff, size 3088, index 1, binding -1, stages 1, numMembers 106
+c_nameless: offset -1, type ffffffff, size 96, index 2, binding -1, stages 1, numMembers 5
+nested: offset -1, type ffffffff, size 32, index 3, binding -1, stages 1, numMembers 4
+abl: offset -1, type ffffffff, size 4, index 4, binding -1, stages 1, numMembers 1
+abl2: offset -1, type ffffffff, size 4, index 5, binding -1, stages 1, numMembers 1
 
 Buffer variable reflection:
 
diff --git a/Test/baseResults/hlsl.rw.atomics.frag.out b/Test/baseResults/hlsl.rw.atomics.frag.out
index 77b140b..06bc317 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 1147
 
                               Capability Shader
@@ -4010,25 +4010,25 @@
                               MemberDecorate 21($Global) 9 Offset 64
                               Decorate 21($Global) Block
                               Decorate 23 DescriptorSet 0
-                              Decorate 23 Binding 0
+                              Decorate 23 Binding 10
                               Decorate 121(g_tTex1du1) DescriptorSet 0
-                              Decorate 121(g_tTex1du1) Binding 0
+                              Decorate 121(g_tTex1du1) Binding 1
                               Decorate 217(g_tTex2di1) DescriptorSet 0
-                              Decorate 217(g_tTex2di1) Binding 0
+                              Decorate 217(g_tTex2di1) Binding 2
                               Decorate 308(g_tTex2du1) DescriptorSet 0
-                              Decorate 308(g_tTex2du1) Binding 0
+                              Decorate 308(g_tTex2du1) Binding 3
                               Decorate 399(g_tTex3di1) DescriptorSet 0
-                              Decorate 399(g_tTex3di1) Binding 0
+                              Decorate 399(g_tTex3di1) Binding 4
                               Decorate 490(g_tTex3du1) DescriptorSet 0
-                              Decorate 490(g_tTex3du1) Binding 0
+                              Decorate 490(g_tTex3du1) Binding 5
                               Decorate 581(g_tTex1di1a) DescriptorSet 0
-                              Decorate 581(g_tTex1di1a) Binding 0
+                              Decorate 581(g_tTex1di1a) Binding 6
                               Decorate 670(g_tTex1du1a) DescriptorSet 0
-                              Decorate 670(g_tTex1du1a) Binding 0
+                              Decorate 670(g_tTex1du1a) Binding 7
                               Decorate 931(g_tBuffI) DescriptorSet 0
-                              Decorate 931(g_tBuffI) Binding 0
+                              Decorate 931(g_tBuffI) Binding 8
                               Decorate 1020(g_tBuffU) DescriptorSet 0
-                              Decorate 1020(g_tBuffU) Binding 0
+                              Decorate 1020(g_tBuffU) Binding 9
                               Decorate 1117(@entryPointOutput.Color) Location 0
                               Decorate 1122(g_sSamp) DescriptorSet 0
                               Decorate 1122(g_sSamp) Binding 0
diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out
index 70f8bbe..7068825 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 607
 
                               Capability Shader
@@ -1893,25 +1893,25 @@
                               MemberDecorate 63($Global) 10 Offset 128
                               Decorate 63($Global) Block
                               Decorate 65 DescriptorSet 0
-                              Decorate 65 Binding 0
+                              Decorate 65 Binding 9
                               Decorate 75(g_tTex1df4) DescriptorSet 0
                               Decorate 75(g_tTex1df4) Binding 0
                               Decorate 89(g_tTex1di4) DescriptorSet 0
-                              Decorate 89(g_tTex1di4) Binding 0
+                              Decorate 89(g_tTex1di4) Binding 1
                               Decorate 97(g_tTex1du4) DescriptorSet 0
-                              Decorate 97(g_tTex1du4) Binding 0
+                              Decorate 97(g_tTex1du4) Binding 2
                               Decorate 105(g_tTex2df4) DescriptorSet 0
-                              Decorate 105(g_tTex2df4) Binding 0
+                              Decorate 105(g_tTex2df4) Binding 3
                               Decorate 115(g_tTex2di4) DescriptorSet 0
-                              Decorate 115(g_tTex2di4) Binding 0
+                              Decorate 115(g_tTex2di4) Binding 4
                               Decorate 123(g_tTex2du4) DescriptorSet 0
-                              Decorate 123(g_tTex2du4) Binding 0
+                              Decorate 123(g_tTex2du4) Binding 5
                               Decorate 131(g_tTex3df4) DescriptorSet 0
-                              Decorate 131(g_tTex3df4) Binding 0
+                              Decorate 131(g_tTex3df4) Binding 6
                               Decorate 141(g_tTex3di4) DescriptorSet 0
-                              Decorate 141(g_tTex3di4) Binding 0
+                              Decorate 141(g_tTex3di4) Binding 7
                               Decorate 149(g_tTex3du4) DescriptorSet 0
-                              Decorate 149(g_tTex3du4) Binding 0
+                              Decorate 149(g_tTex3du4) Binding 8
                               Decorate 583(@entryPointOutput.Color) Location 0
                               Decorate 588(g_sSamp) DescriptorSet 0
                               Decorate 588(g_sSamp) Binding 0
diff --git a/Test/baseResults/hlsl.rw.register.frag.out b/Test/baseResults/hlsl.rw.register.frag.out
index 6004512..35b4758 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): 80008
+// Generated by (magic number): 8000a
 // 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 a8e33dd..2c67075 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 571
 
                               Capability Shader
@@ -1839,25 +1839,25 @@
                               MemberDecorate 59($Global) 10 Offset 104
                               Decorate 59($Global) Block
                               Decorate 61 DescriptorSet 0
-                              Decorate 61 Binding 0
+                              Decorate 61 Binding 10
                               Decorate 70(g_tTex1df1) DescriptorSet 0
-                              Decorate 70(g_tTex1df1) Binding 0
+                              Decorate 70(g_tTex1df1) Binding 1
                               Decorate 83(g_tTex1di1) DescriptorSet 0
-                              Decorate 83(g_tTex1di1) Binding 0
+                              Decorate 83(g_tTex1di1) Binding 2
                               Decorate 91(g_tTex1du1) DescriptorSet 0
-                              Decorate 91(g_tTex1du1) Binding 0
+                              Decorate 91(g_tTex1du1) Binding 3
                               Decorate 99(g_tTex2df1) DescriptorSet 0
-                              Decorate 99(g_tTex2df1) Binding 0
+                              Decorate 99(g_tTex2df1) Binding 4
                               Decorate 109(g_tTex2di1) DescriptorSet 0
-                              Decorate 109(g_tTex2di1) Binding 0
+                              Decorate 109(g_tTex2di1) Binding 5
                               Decorate 117(g_tTex2du1) DescriptorSet 0
-                              Decorate 117(g_tTex2du1) Binding 0
+                              Decorate 117(g_tTex2du1) Binding 6
                               Decorate 125(g_tTex3df1) DescriptorSet 0
-                              Decorate 125(g_tTex3df1) Binding 0
+                              Decorate 125(g_tTex3df1) Binding 7
                               Decorate 135(g_tTex3di1) DescriptorSet 0
-                              Decorate 135(g_tTex3di1) Binding 0
+                              Decorate 135(g_tTex3di1) Binding 8
                               Decorate 143(g_tTex3du1) DescriptorSet 0
-                              Decorate 143(g_tTex3du1) Binding 0
+                              Decorate 143(g_tTex3du1) Binding 9
                               Decorate 547(@entryPointOutput.Color) Location 0
                               Decorate 552(g_sSamp) DescriptorSet 0
                               Decorate 552(g_sSamp) Binding 0
diff --git a/Test/baseResults/hlsl.rw.swizzle.frag.out b/Test/baseResults/hlsl.rw.swizzle.frag.out
index 267d733..71a9e6c 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): 80008
+// Generated by (magic number): 8000a
 // 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 06c24e7..093665c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 605
 
                               Capability Shader
@@ -1858,25 +1858,25 @@
                               MemberDecorate 64($Global) 10 Offset 112
                               Decorate 64($Global) Block
                               Decorate 66 DescriptorSet 0
-                              Decorate 66 Binding 0
+                              Decorate 66 Binding 10
                               Decorate 76(g_tTex1df2) DescriptorSet 0
-                              Decorate 76(g_tTex1df2) Binding 0
+                              Decorate 76(g_tTex1df2) Binding 1
                               Decorate 90(g_tTex1di2) DescriptorSet 0
-                              Decorate 90(g_tTex1di2) Binding 0
+                              Decorate 90(g_tTex1di2) Binding 2
                               Decorate 98(g_tTex1du2) DescriptorSet 0
-                              Decorate 98(g_tTex1du2) Binding 0
+                              Decorate 98(g_tTex1du2) Binding 3
                               Decorate 106(g_tTex2df2) DescriptorSet 0
-                              Decorate 106(g_tTex2df2) Binding 0
+                              Decorate 106(g_tTex2df2) Binding 4
                               Decorate 114(g_tTex2di2) DescriptorSet 0
-                              Decorate 114(g_tTex2di2) Binding 0
+                              Decorate 114(g_tTex2di2) Binding 5
                               Decorate 122(g_tTex2du2) DescriptorSet 0
-                              Decorate 122(g_tTex2du2) Binding 0
+                              Decorate 122(g_tTex2du2) Binding 6
                               Decorate 130(g_tTex3df2) DescriptorSet 0
-                              Decorate 130(g_tTex3df2) Binding 0
+                              Decorate 130(g_tTex3df2) Binding 7
                               Decorate 140(g_tTex3di2) DescriptorSet 0
-                              Decorate 140(g_tTex3di2) Binding 0
+                              Decorate 140(g_tTex3di2) Binding 8
                               Decorate 148(g_tTex3du2) DescriptorSet 0
-                              Decorate 148(g_tTex3du2) Binding 0
+                              Decorate 148(g_tTex3du2) Binding 9
                               Decorate 581(@entryPointOutput.Color) Location 0
                               Decorate 586(g_sSamp) DescriptorSet 0
                               Decorate 586(g_sSamp) Binding 0
diff --git a/Test/baseResults/hlsl.sample.array.dx10.frag.out b/Test/baseResults/hlsl.sample.array.dx10.frag.out
index 2d00531..6ecbcf3 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 146
 
                               Capability Shader
@@ -368,21 +368,21 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 35(g_tTex1di4) DescriptorSet 0
-                              Decorate 35(g_tTex1di4) Binding 0
+                              Decorate 35(g_tTex1di4) Binding 2
                               Decorate 49(g_tTex1du4) DescriptorSet 0
-                              Decorate 49(g_tTex1du4) Binding 0
+                              Decorate 49(g_tTex1du4) Binding 3
                               Decorate 60(g_tTex2df4) DescriptorSet 0
-                              Decorate 60(g_tTex2df4) Binding 0
+                              Decorate 60(g_tTex2df4) Binding 4
                               Decorate 71(g_tTex2di4) DescriptorSet 0
-                              Decorate 71(g_tTex2di4) Binding 0
+                              Decorate 71(g_tTex2di4) Binding 5
                               Decorate 82(g_tTex2du4) DescriptorSet 0
-                              Decorate 82(g_tTex2du4) Binding 0
+                              Decorate 82(g_tTex2du4) Binding 6
                               Decorate 94(g_tTexcdf4) DescriptorSet 0
-                              Decorate 94(g_tTexcdf4) Binding 0
+                              Decorate 94(g_tTexcdf4) Binding 7
                               Decorate 104(g_tTexcdi4) DescriptorSet 0
-                              Decorate 104(g_tTexcdi4) Binding 0
+                              Decorate 104(g_tTexcdi4) Binding 8
                               Decorate 114(g_tTexcdu4) DescriptorSet 0
-                              Decorate 114(g_tTexcdu4) Binding 0
+                              Decorate 114(g_tTexcdu4) Binding 9
                               Decorate 138(@entryPointOutput.Color) Location 0
                               Decorate 142(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 145(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
index 1760902..9d06667 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 198
 
                               Capability Shader
@@ -617,27 +617,27 @@
                               Decorate 49(g_sSamp) DescriptorSet 0
                               Decorate 49(g_sSamp) Binding 0
                               Decorate 60(g_tTex1di4) DescriptorSet 0
-                              Decorate 60(g_tTex1di4) Binding 0
+                              Decorate 60(g_tTex1di4) Binding 2
                               Decorate 73(g_tTex1du4) DescriptorSet 0
-                              Decorate 73(g_tTex1du4) Binding 0
+                              Decorate 73(g_tTex1du4) Binding 3
                               Decorate 83(g_tTex2df4) DescriptorSet 0
-                              Decorate 83(g_tTex2df4) Binding 0
+                              Decorate 83(g_tTex2df4) Binding 4
                               Decorate 94(g_tTex2di4) DescriptorSet 0
-                              Decorate 94(g_tTex2di4) Binding 0
+                              Decorate 94(g_tTex2di4) Binding 5
                               Decorate 105(g_tTex2du4) DescriptorSet 0
-                              Decorate 105(g_tTex2du4) Binding 0
+                              Decorate 105(g_tTex2du4) Binding 6
                               Decorate 117(g_tTex3df4) DescriptorSet 0
-                              Decorate 117(g_tTex3df4) Binding 0
+                              Decorate 117(g_tTex3df4) Binding 7
                               Decorate 128(g_tTex3di4) DescriptorSet 0
-                              Decorate 128(g_tTex3di4) Binding 0
+                              Decorate 128(g_tTex3di4) Binding 8
                               Decorate 138(g_tTex3du4) DescriptorSet 0
-                              Decorate 138(g_tTex3du4) Binding 0
+                              Decorate 138(g_tTex3du4) Binding 9
                               Decorate 151(g_tTexcdf4) DescriptorSet 0
-                              Decorate 151(g_tTexcdf4) Binding 0
+                              Decorate 151(g_tTexcdf4) Binding 10
                               Decorate 160(g_tTexcdi4) DescriptorSet 0
-                              Decorate 160(g_tTexcdi4) Binding 0
+                              Decorate 160(g_tTexcdi4) Binding 11
                               Decorate 169(g_tTexcdu4) DescriptorSet 0
-                              Decorate 169(g_tTexcdu4) Binding 0
+                              Decorate 169(g_tTexcdu4) Binding 12
                               Decorate 188(@entryPointOutput.Color) Location 0
                               Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 195(g_sSamp2d) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.sample.dx9.frag.out b/Test/baseResults/hlsl.sample.dx9.frag.out
index ce6d546..5f2aecd 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): 80008
+// Generated by (magic number): 8000a
 // 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 2b29c0c..0b47bff 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): 80008
+// Generated by (magic number): 8000a
 // 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 b641ad2..fc91699 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 161
 
                               Capability Shader
@@ -412,21 +412,21 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 33(g_tTex1di4) DescriptorSet 0
-                              Decorate 33(g_tTex1di4) Binding 0
+                              Decorate 33(g_tTex1di4) Binding 2
                               Decorate 46(g_tTex1du4) DescriptorSet 0
-                              Decorate 46(g_tTex1du4) Binding 0
+                              Decorate 46(g_tTex1du4) Binding 3
                               Decorate 56(g_tTex2df4) DescriptorSet 0
-                              Decorate 56(g_tTex2df4) Binding 0
+                              Decorate 56(g_tTex2df4) Binding 4
                               Decorate 70(g_tTex2di4) DescriptorSet 0
-                              Decorate 70(g_tTex2di4) Binding 0
+                              Decorate 70(g_tTex2di4) Binding 5
                               Decorate 82(g_tTex2du4) DescriptorSet 0
-                              Decorate 82(g_tTex2du4) Binding 0
+                              Decorate 82(g_tTex2du4) Binding 6
                               Decorate 96(g_tTex3df4) DescriptorSet 0
-                              Decorate 96(g_tTex3df4) Binding 0
+                              Decorate 96(g_tTex3df4) Binding 7
                               Decorate 109(g_tTex3di4) DescriptorSet 0
-                              Decorate 109(g_tTex3di4) Binding 0
+                              Decorate 109(g_tTex3di4) Binding 8
                               Decorate 120(g_tTex3du4) DescriptorSet 0
-                              Decorate 120(g_tTex3du4) Binding 0
+                              Decorate 120(g_tTex3du4) Binding 9
                               Decorate 144(@entryPointOutput.Color) Location 0
                               Decorate 148(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 151(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
index 54dc467..4d53975 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 118
 
                               Capability Shader
@@ -313,15 +313,15 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 36(g_tTex1di4) DescriptorSet 0
-                              Decorate 36(g_tTex1di4) Binding 0
+                              Decorate 36(g_tTex1di4) Binding 2
                               Decorate 51(g_tTex1du4) DescriptorSet 0
-                              Decorate 51(g_tTex1du4) Binding 0
+                              Decorate 51(g_tTex1du4) Binding 3
                               Decorate 63(g_tTex2df4) DescriptorSet 0
-                              Decorate 63(g_tTex2df4) Binding 0
+                              Decorate 63(g_tTex2df4) Binding 4
                               Decorate 76(g_tTex2di4) DescriptorSet 0
-                              Decorate 76(g_tTex2di4) Binding 0
+                              Decorate 76(g_tTex2di4) Binding 5
                               Decorate 87(g_tTex2du4) DescriptorSet 0
-                              Decorate 87(g_tTex2du4) Binding 0
+                              Decorate 87(g_tTex2du4) Binding 6
                               Decorate 110(@entryPointOutput.Color) Location 0
                               Decorate 114(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 117(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
index 8aa0e7f..8754a03 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 72
 
                               Capability Shader
@@ -180,15 +180,15 @@
                               Name 59  "psout"
                               Name 69  "@entryPointOutput.Color"
                               Decorate 16(g_tTex1df1) DescriptorSet 0
-                              Decorate 16(g_tTex1df1) Binding 0
+                              Decorate 16(g_tTex1df1) Binding 1
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 30(g_tTex1df2) DescriptorSet 0
-                              Decorate 30(g_tTex1df2) Binding 0
+                              Decorate 30(g_tTex1df2) Binding 2
                               Decorate 42(g_tTex1df3) DescriptorSet 0
-                              Decorate 42(g_tTex1df3) Binding 0
+                              Decorate 42(g_tTex1df3) Binding 3
                               Decorate 53(g_tTex1df4) DescriptorSet 0
-                              Decorate 53(g_tTex1df4) Binding 0
+                              Decorate 53(g_tTex1df4) Binding 4
                               Decorate 69(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
index aec493d..7990196 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 146
 
                               Capability Shader
@@ -404,21 +404,21 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 36(g_tTex1di4) DescriptorSet 0
-                              Decorate 36(g_tTex1di4) Binding 0
+                              Decorate 36(g_tTex1di4) Binding 2
                               Decorate 50(g_tTex1du4) DescriptorSet 0
-                              Decorate 50(g_tTex1du4) Binding 0
+                              Decorate 50(g_tTex1du4) Binding 3
                               Decorate 61(g_tTex2df4) DescriptorSet 0
-                              Decorate 61(g_tTex2df4) Binding 0
+                              Decorate 61(g_tTex2df4) Binding 4
                               Decorate 72(g_tTex2di4) DescriptorSet 0
-                              Decorate 72(g_tTex2di4) Binding 0
+                              Decorate 72(g_tTex2di4) Binding 5
                               Decorate 82(g_tTex2du4) DescriptorSet 0
-                              Decorate 82(g_tTex2du4) Binding 0
+                              Decorate 82(g_tTex2du4) Binding 6
                               Decorate 94(g_tTexcdf4) DescriptorSet 0
-                              Decorate 94(g_tTexcdf4) Binding 0
+                              Decorate 94(g_tTexcdf4) Binding 7
                               Decorate 104(g_tTexcdi4) DescriptorSet 0
-                              Decorate 104(g_tTexcdi4) Binding 0
+                              Decorate 104(g_tTexcdi4) Binding 8
                               Decorate 114(g_tTexcdu4) DescriptorSet 0
-                              Decorate 114(g_tTexcdu4) Binding 0
+                              Decorate 114(g_tTexcdu4) Binding 9
                               Decorate 138(@entryPointOutput.Color) Location 0
                               Decorate 142(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 145(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
index 9a29c6d..b318306 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 170
 
                               Capability Shader
@@ -475,27 +475,27 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 33(g_tTex1di4) DescriptorSet 0
-                              Decorate 33(g_tTex1di4) Binding 0
+                              Decorate 33(g_tTex1di4) Binding 2
                               Decorate 46(g_tTex1du4) DescriptorSet 0
-                              Decorate 46(g_tTex1du4) Binding 0
+                              Decorate 46(g_tTex1du4) Binding 3
                               Decorate 56(g_tTex2df4) DescriptorSet 0
-                              Decorate 56(g_tTex2df4) Binding 0
+                              Decorate 56(g_tTex2df4) Binding 4
                               Decorate 67(g_tTex2di4) DescriptorSet 0
-                              Decorate 67(g_tTex2di4) Binding 0
+                              Decorate 67(g_tTex2di4) Binding 5
                               Decorate 78(g_tTex2du4) DescriptorSet 0
-                              Decorate 78(g_tTex2du4) Binding 0
+                              Decorate 78(g_tTex2du4) Binding 6
                               Decorate 89(g_tTex3df4) DescriptorSet 0
-                              Decorate 89(g_tTex3df4) Binding 0
+                              Decorate 89(g_tTex3df4) Binding 7
                               Decorate 100(g_tTex3di4) DescriptorSet 0
-                              Decorate 100(g_tTex3di4) Binding 0
+                              Decorate 100(g_tTex3di4) Binding 8
                               Decorate 110(g_tTex3du4) DescriptorSet 0
-                              Decorate 110(g_tTex3du4) Binding 0
+                              Decorate 110(g_tTex3du4) Binding 9
                               Decorate 123(g_tTexcdf4) DescriptorSet 0
-                              Decorate 123(g_tTexcdf4) Binding 0
+                              Decorate 123(g_tTexcdf4) Binding 10
                               Decorate 132(g_tTexcdi4) DescriptorSet 0
-                              Decorate 132(g_tTexcdi4) Binding 0
+                              Decorate 132(g_tTexcdi4) Binding 11
                               Decorate 141(g_tTexcdu4) DescriptorSet 0
-                              Decorate 141(g_tTexcdu4) Binding 0
+                              Decorate 141(g_tTexcdu4) Binding 12
                               Decorate 162(@entryPointOutput.Color) Location 0
                               Decorate 166(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 169(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index fb78b6c..0e073ee 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 161
 
                               Capability Shader
@@ -449,21 +449,21 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 34(g_tTex1di4) DescriptorSet 0
-                              Decorate 34(g_tTex1di4) Binding 0
+                              Decorate 34(g_tTex1di4) Binding 2
                               Decorate 47(g_tTex1du4) DescriptorSet 0
-                              Decorate 47(g_tTex1du4) Binding 0
+                              Decorate 47(g_tTex1du4) Binding 3
                               Decorate 57(g_tTex2df4) DescriptorSet 0
-                              Decorate 57(g_tTex2df4) Binding 0
+                              Decorate 57(g_tTex2df4) Binding 4
                               Decorate 71(g_tTex2di4) DescriptorSet 0
-                              Decorate 71(g_tTex2di4) Binding 0
+                              Decorate 71(g_tTex2di4) Binding 5
                               Decorate 83(g_tTex2du4) DescriptorSet 0
-                              Decorate 83(g_tTex2du4) Binding 0
+                              Decorate 83(g_tTex2du4) Binding 6
                               Decorate 96(g_tTex3df4) DescriptorSet 0
-                              Decorate 96(g_tTex3df4) Binding 0
+                              Decorate 96(g_tTex3df4) Binding 7
                               Decorate 109(g_tTex3di4) DescriptorSet 0
-                              Decorate 109(g_tTex3di4) Binding 0
+                              Decorate 109(g_tTex3di4) Binding 8
                               Decorate 120(g_tTex3du4) DescriptorSet 0
-                              Decorate 120(g_tTex3du4) Binding 0
+                              Decorate 120(g_tTex3du4) Binding 9
                               Decorate 144(@entryPointOutput.Color) Location 0
                               Decorate 148(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 151(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index 8b7bd37..6225c45 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 118
 
                               Capability Shader
@@ -338,15 +338,15 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 37(g_tTex1di4) DescriptorSet 0
-                              Decorate 37(g_tTex1di4) Binding 0
+                              Decorate 37(g_tTex1di4) Binding 2
                               Decorate 52(g_tTex1du4) DescriptorSet 0
-                              Decorate 52(g_tTex1du4) Binding 0
+                              Decorate 52(g_tTex1du4) Binding 3
                               Decorate 64(g_tTex2df4) DescriptorSet 0
-                              Decorate 64(g_tTex2df4) Binding 0
+                              Decorate 64(g_tTex2df4) Binding 4
                               Decorate 77(g_tTex2di4) DescriptorSet 0
-                              Decorate 77(g_tTex2di4) Binding 0
+                              Decorate 77(g_tTex2di4) Binding 5
                               Decorate 87(g_tTex2du4) DescriptorSet 0
-                              Decorate 87(g_tTex2du4) Binding 0
+                              Decorate 87(g_tTex2du4) Binding 6
                               Decorate 110(@entryPointOutput.Color) Location 0
                               Decorate 114(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 117(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
index 8d0ff46..b1c1d6d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 209
 
                               Capability Shader
@@ -452,25 +452,25 @@
                               Name 205  "g_tTexcdi4"
                               Name 208  "g_tTexcdu4"
                               Decorate 16(g_tTex1df4a) DescriptorSet 0
-                              Decorate 16(g_tTex1df4a) Binding 0
+                              Decorate 16(g_tTex1df4a) Binding 1
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 39(g_tTex1di4a) DescriptorSet 0
-                              Decorate 39(g_tTex1di4a) Binding 0
+                              Decorate 39(g_tTex1di4a) Binding 2
                               Decorate 53(g_tTex1du4a) DescriptorSet 0
-                              Decorate 53(g_tTex1du4a) Binding 0
+                              Decorate 53(g_tTex1du4a) Binding 3
                               Decorate 66(g_tTex2df4a) DescriptorSet 0
-                              Decorate 66(g_tTex2df4a) Binding 0
+                              Decorate 66(g_tTex2df4a) Binding 4
                               Decorate 82(g_tTex2di4a) DescriptorSet 0
-                              Decorate 82(g_tTex2di4a) Binding 0
+                              Decorate 82(g_tTex2di4a) Binding 5
                               Decorate 96(g_tTex2du4a) DescriptorSet 0
-                              Decorate 96(g_tTex2du4a) Binding 0
+                              Decorate 96(g_tTex2du4a) Binding 6
                               Decorate 110(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 110(g_tTexcdf4a) Binding 0
+                              Decorate 110(g_tTexcdf4a) Binding 7
                               Decorate 126(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 126(g_tTexcdi4a) Binding 0
+                              Decorate 126(g_tTexcdi4a) Binding 8
                               Decorate 140(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 140(g_tTexcdu4a) Binding 0
+                              Decorate 140(g_tTexcdu4a) Binding 9
                               Decorate 166(@entryPointOutput.Color) Location 0
                               Decorate 170(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 175(g_tTex1df4) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
index c44f16b..e3d5b93 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 198
 
                               Capability Shader
@@ -438,21 +438,21 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 34(g_tTex1di4) DescriptorSet 0
-                              Decorate 34(g_tTex1di4) Binding 0
+                              Decorate 34(g_tTex1di4) Binding 1
                               Decorate 46(g_tTex1du4) DescriptorSet 0
-                              Decorate 46(g_tTex1du4) Binding 0
+                              Decorate 46(g_tTex1du4) Binding 2
                               Decorate 57(g_tTex2df4) DescriptorSet 0
-                              Decorate 57(g_tTex2df4) Binding 0
+                              Decorate 57(g_tTex2df4) Binding 3
                               Decorate 73(g_tTex2di4) DescriptorSet 0
-                              Decorate 73(g_tTex2di4) Binding 0
+                              Decorate 73(g_tTex2di4) Binding 4
                               Decorate 86(g_tTex2du4) DescriptorSet 0
-                              Decorate 86(g_tTex2du4) Binding 0
+                              Decorate 86(g_tTex2du4) Binding 5
                               Decorate 99(g_tTexcdf4) DescriptorSet 0
-                              Decorate 99(g_tTexcdf4) Binding 0
+                              Decorate 99(g_tTexcdf4) Binding 6
                               Decorate 115(g_tTexcdi4) DescriptorSet 0
-                              Decorate 115(g_tTexcdi4) Binding 0
+                              Decorate 115(g_tTexcdi4) Binding 7
                               Decorate 129(g_tTexcdu4) DescriptorSet 0
-                              Decorate 129(g_tTexcdu4) Binding 0
+                              Decorate 129(g_tTexcdu4) Binding 8
                               Decorate 155(@entryPointOutput.Color) Location 0
                               Decorate 159(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 164(g_tTex3df4) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
index fd5dd3e..6859f6d 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): 80008
+// Generated by (magic number): 8000a
 // 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 ca0fb8c..aaa2b74 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 167
 
                               Capability Shader
@@ -381,15 +381,15 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 35(g_tTex1di4) DescriptorSet 0
-                              Decorate 35(g_tTex1di4) Binding 0
+                              Decorate 35(g_tTex1di4) Binding 1
                               Decorate 47(g_tTex1du4) DescriptorSet 0
-                              Decorate 47(g_tTex1du4) Binding 0
+                              Decorate 47(g_tTex1du4) Binding 2
                               Decorate 58(g_tTex2df4) DescriptorSet 0
-                              Decorate 58(g_tTex2df4) Binding 0
+                              Decorate 58(g_tTex2df4) Binding 3
                               Decorate 77(g_tTex2di4) DescriptorSet 0
-                              Decorate 77(g_tTex2di4) Binding 0
+                              Decorate 77(g_tTex2di4) Binding 4
                               Decorate 90(g_tTex2du4) DescriptorSet 0
-                              Decorate 90(g_tTex2du4) Binding 0
+                              Decorate 90(g_tTex2du4) Binding 5
                               Decorate 115(@entryPointOutput.Color) Location 0
                               Decorate 119(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 124(g_tTex3df4) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
index 3d0b8fd..501f4c0 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 178
 
                               Capability Shader
@@ -389,19 +389,19 @@
                               Name 174  "g_tTexcdi4a"
                               Name 177  "g_tTexcdu4a"
                               Decorate 16(g_tTex1df4a) DescriptorSet 0
-                              Decorate 16(g_tTex1df4a) Binding 0
+                              Decorate 16(g_tTex1df4a) Binding 1
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 40(g_tTex1di4a) DescriptorSet 0
-                              Decorate 40(g_tTex1di4a) Binding 0
+                              Decorate 40(g_tTex1di4a) Binding 2
                               Decorate 54(g_tTex1du4a) DescriptorSet 0
-                              Decorate 54(g_tTex1du4a) Binding 0
+                              Decorate 54(g_tTex1du4a) Binding 3
                               Decorate 67(g_tTex2df4a) DescriptorSet 0
-                              Decorate 67(g_tTex2df4a) Binding 0
+                              Decorate 67(g_tTex2df4a) Binding 4
                               Decorate 86(g_tTex2di4a) DescriptorSet 0
-                              Decorate 86(g_tTex2di4a) Binding 0
+                              Decorate 86(g_tTex2di4a) Binding 5
                               Decorate 100(g_tTex2du4a) DescriptorSet 0
-                              Decorate 100(g_tTex2du4a) Binding 0
+                              Decorate 100(g_tTex2du4a) Binding 6
                               Decorate 126(@entryPointOutput.Color) Location 0
                               Decorate 130(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 135(g_tTex1df4) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
index ce13388..ecfeb1b 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 210
 
                               Capability Shader
@@ -488,25 +488,25 @@
                               Name 206  "g_tTexcdi4"
                               Name 209  "g_tTexcdu4"
                               Decorate 16(g_tTex1df4a) DescriptorSet 0
-                              Decorate 16(g_tTex1df4a) Binding 0
+                              Decorate 16(g_tTex1df4a) Binding 1
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 40(g_tTex1di4a) DescriptorSet 0
-                              Decorate 40(g_tTex1di4a) Binding 0
+                              Decorate 40(g_tTex1di4a) Binding 2
                               Decorate 54(g_tTex1du4a) DescriptorSet 0
-                              Decorate 54(g_tTex1du4a) Binding 0
+                              Decorate 54(g_tTex1du4a) Binding 3
                               Decorate 67(g_tTex2df4a) DescriptorSet 0
-                              Decorate 67(g_tTex2df4a) Binding 0
+                              Decorate 67(g_tTex2df4a) Binding 4
                               Decorate 83(g_tTex2di4a) DescriptorSet 0
-                              Decorate 83(g_tTex2di4a) Binding 0
+                              Decorate 83(g_tTex2di4a) Binding 5
                               Decorate 97(g_tTex2du4a) DescriptorSet 0
-                              Decorate 97(g_tTex2du4a) Binding 0
+                              Decorate 97(g_tTex2du4a) Binding 6
                               Decorate 111(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 111(g_tTexcdf4a) Binding 0
+                              Decorate 111(g_tTexcdf4a) Binding 7
                               Decorate 127(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 127(g_tTexcdi4a) Binding 0
+                              Decorate 127(g_tTexcdi4a) Binding 8
                               Decorate 141(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 141(g_tTexcdu4a) Binding 0
+                              Decorate 141(g_tTexcdu4a) Binding 9
                               Decorate 167(@entryPointOutput.Color) Location 0
                               Decorate 171(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 176(g_tTex1df4) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
index 4bf15ec..c852c9f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 199
 
                               Capability Shader
@@ -474,21 +474,21 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 35(g_tTex1di4) DescriptorSet 0
-                              Decorate 35(g_tTex1di4) Binding 0
+                              Decorate 35(g_tTex1di4) Binding 1
                               Decorate 47(g_tTex1du4) DescriptorSet 0
-                              Decorate 47(g_tTex1du4) Binding 0
+                              Decorate 47(g_tTex1du4) Binding 2
                               Decorate 58(g_tTex2df4) DescriptorSet 0
-                              Decorate 58(g_tTex2df4) Binding 0
+                              Decorate 58(g_tTex2df4) Binding 3
                               Decorate 74(g_tTex2di4) DescriptorSet 0
-                              Decorate 74(g_tTex2di4) Binding 0
+                              Decorate 74(g_tTex2di4) Binding 4
                               Decorate 87(g_tTex2du4) DescriptorSet 0
-                              Decorate 87(g_tTex2du4) Binding 0
+                              Decorate 87(g_tTex2du4) Binding 5
                               Decorate 100(g_tTexcdf4) DescriptorSet 0
-                              Decorate 100(g_tTexcdf4) Binding 0
+                              Decorate 100(g_tTexcdf4) Binding 6
                               Decorate 116(g_tTexcdi4) DescriptorSet 0
-                              Decorate 116(g_tTexcdi4) Binding 0
+                              Decorate 116(g_tTexcdi4) Binding 7
                               Decorate 130(g_tTexcdu4) DescriptorSet 0
-                              Decorate 130(g_tTexcdu4) Binding 0
+                              Decorate 130(g_tTexcdu4) Binding 8
                               Decorate 156(@entryPointOutput.Color) Location 0
                               Decorate 160(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 165(g_tTex3df4) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
index b85daf0..95c5c61 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 168
 
                               Capability Shader
@@ -405,15 +405,15 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 36(g_tTex1di4) DescriptorSet 0
-                              Decorate 36(g_tTex1di4) Binding 0
+                              Decorate 36(g_tTex1di4) Binding 1
                               Decorate 48(g_tTex1du4) DescriptorSet 0
-                              Decorate 48(g_tTex1du4) Binding 0
+                              Decorate 48(g_tTex1du4) Binding 2
                               Decorate 59(g_tTex2df4) DescriptorSet 0
-                              Decorate 59(g_tTex2df4) Binding 0
+                              Decorate 59(g_tTex2df4) Binding 3
                               Decorate 78(g_tTex2di4) DescriptorSet 0
-                              Decorate 78(g_tTex2di4) Binding 0
+                              Decorate 78(g_tTex2di4) Binding 4
                               Decorate 91(g_tTex2du4) DescriptorSet 0
-                              Decorate 91(g_tTex2du4) Binding 0
+                              Decorate 91(g_tTex2du4) Binding 5
                               Decorate 116(@entryPointOutput.Color) Location 0
                               Decorate 120(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 125(g_tTex3df4) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
index 6f460d0..89a7bba 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 179
 
                               Capability Shader
@@ -413,19 +413,19 @@
                               Name 175  "g_tTexcdi4a"
                               Name 178  "g_tTexcdu4a"
                               Decorate 16(g_tTex1df4a) DescriptorSet 0
-                              Decorate 16(g_tTex1df4a) Binding 0
+                              Decorate 16(g_tTex1df4a) Binding 1
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 41(g_tTex1di4a) DescriptorSet 0
-                              Decorate 41(g_tTex1di4a) Binding 0
+                              Decorate 41(g_tTex1di4a) Binding 2
                               Decorate 55(g_tTex1du4a) DescriptorSet 0
-                              Decorate 55(g_tTex1du4a) Binding 0
+                              Decorate 55(g_tTex1du4a) Binding 3
                               Decorate 68(g_tTex2df4a) DescriptorSet 0
-                              Decorate 68(g_tTex2df4a) Binding 0
+                              Decorate 68(g_tTex2df4a) Binding 4
                               Decorate 87(g_tTex2di4a) DescriptorSet 0
-                              Decorate 87(g_tTex2di4a) Binding 0
+                              Decorate 87(g_tTex2di4a) Binding 5
                               Decorate 101(g_tTex2du4a) DescriptorSet 0
-                              Decorate 101(g_tTex2du4a) Binding 0
+                              Decorate 101(g_tTex2du4a) Binding 6
                               Decorate 127(@entryPointOutput.Color) Location 0
                               Decorate 131(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 136(g_tTex1df4) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
index b2922a1..8daeb7f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 140
 
                               Capability Shader
@@ -476,21 +476,21 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 37(g_tTex1di4) DescriptorSet 0
-                              Decorate 37(g_tTex1di4) Binding 0
+                              Decorate 37(g_tTex1di4) Binding 2
                               Decorate 49(g_tTex1du4) DescriptorSet 0
-                              Decorate 49(g_tTex1du4) Binding 0
+                              Decorate 49(g_tTex1du4) Binding 3
                               Decorate 58(g_tTex2df4) DescriptorSet 0
-                              Decorate 58(g_tTex2df4) Binding 0
+                              Decorate 58(g_tTex2df4) Binding 4
                               Decorate 71(g_tTex2di4) DescriptorSet 0
-                              Decorate 71(g_tTex2di4) Binding 0
+                              Decorate 71(g_tTex2di4) Binding 5
                               Decorate 80(g_tTex2du4) DescriptorSet 0
-                              Decorate 80(g_tTex2du4) Binding 0
+                              Decorate 80(g_tTex2du4) Binding 6
                               Decorate 89(g_tTexcdf4) DescriptorSet 0
-                              Decorate 89(g_tTexcdf4) Binding 0
+                              Decorate 89(g_tTexcdf4) Binding 7
                               Decorate 102(g_tTexcdi4) DescriptorSet 0
-                              Decorate 102(g_tTexcdi4) Binding 0
+                              Decorate 102(g_tTexcdi4) Binding 8
                               Decorate 111(g_tTexcdu4) DescriptorSet 0
-                              Decorate 111(g_tTexcdu4) Binding 0
+                              Decorate 111(g_tTexcdu4) Binding 9
                               Decorate 132(@entryPointOutput.Color) Location 0
                               Decorate 136(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 139(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
index 161821e..03888b6 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 175
 
                               Capability Shader
@@ -583,27 +583,27 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 34(g_tTex1di4) DescriptorSet 0
-                              Decorate 34(g_tTex1di4) Binding 0
+                              Decorate 34(g_tTex1di4) Binding 2
                               Decorate 47(g_tTex1du4) DescriptorSet 0
-                              Decorate 47(g_tTex1du4) Binding 0
+                              Decorate 47(g_tTex1du4) Binding 3
                               Decorate 57(g_tTex2df4) DescriptorSet 0
-                              Decorate 57(g_tTex2df4) Binding 0
+                              Decorate 57(g_tTex2df4) Binding 4
                               Decorate 69(g_tTex2di4) DescriptorSet 0
-                              Decorate 69(g_tTex2di4) Binding 0
+                              Decorate 69(g_tTex2di4) Binding 5
                               Decorate 80(g_tTex2du4) DescriptorSet 0
-                              Decorate 80(g_tTex2du4) Binding 0
+                              Decorate 80(g_tTex2du4) Binding 6
                               Decorate 92(g_tTex3df4) DescriptorSet 0
-                              Decorate 92(g_tTex3df4) Binding 0
+                              Decorate 92(g_tTex3df4) Binding 7
                               Decorate 105(g_tTex3di4) DescriptorSet 0
-                              Decorate 105(g_tTex3di4) Binding 0
+                              Decorate 105(g_tTex3di4) Binding 8
                               Decorate 115(g_tTex3du4) DescriptorSet 0
-                              Decorate 115(g_tTex3du4) Binding 0
+                              Decorate 115(g_tTex3du4) Binding 9
                               Decorate 128(g_tTexcdf4) DescriptorSet 0
-                              Decorate 128(g_tTexcdf4) Binding 0
+                              Decorate 128(g_tTexcdf4) Binding 10
                               Decorate 137(g_tTexcdi4) DescriptorSet 0
-                              Decorate 137(g_tTexcdi4) Binding 0
+                              Decorate 137(g_tTexcdi4) Binding 11
                               Decorate 146(g_tTexcdu4) DescriptorSet 0
-                              Decorate 146(g_tTexcdu4) Binding 0
+                              Decorate 146(g_tTexcdu4) Binding 12
                               Decorate 167(@entryPointOutput.Color) Location 0
                               Decorate 171(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 174(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
index b683d98..71da245 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 166
 
                               Capability Shader
@@ -540,27 +540,27 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 34(g_tTex1di4) DescriptorSet 0
-                              Decorate 34(g_tTex1di4) Binding 0
+                              Decorate 34(g_tTex1di4) Binding 2
                               Decorate 47(g_tTex1du4) DescriptorSet 0
-                              Decorate 47(g_tTex1du4) Binding 0
+                              Decorate 47(g_tTex1du4) Binding 3
                               Decorate 57(g_tTex2df4) DescriptorSet 0
-                              Decorate 57(g_tTex2df4) Binding 0
+                              Decorate 57(g_tTex2df4) Binding 4
                               Decorate 69(g_tTex2di4) DescriptorSet 0
-                              Decorate 69(g_tTex2di4) Binding 0
+                              Decorate 69(g_tTex2di4) Binding 5
                               Decorate 80(g_tTex2du4) DescriptorSet 0
-                              Decorate 80(g_tTex2du4) Binding 0
+                              Decorate 80(g_tTex2du4) Binding 6
                               Decorate 92(g_tTex3df4) DescriptorSet 0
-                              Decorate 92(g_tTex3df4) Binding 0
+                              Decorate 92(g_tTex3df4) Binding 7
                               Decorate 105(g_tTex3di4) DescriptorSet 0
-                              Decorate 105(g_tTex3di4) Binding 0
+                              Decorate 105(g_tTex3di4) Binding 8
                               Decorate 115(g_tTex3du4) DescriptorSet 0
-                              Decorate 115(g_tTex3du4) Binding 0
+                              Decorate 115(g_tTex3du4) Binding 9
                               Decorate 128(g_tTexcdf4) DescriptorSet 0
-                              Decorate 128(g_tTexcdf4) Binding 0
+                              Decorate 128(g_tTexcdf4) Binding 10
                               Decorate 137(g_tTexcdi4) DescriptorSet 0
-                              Decorate 137(g_tTexcdi4) Binding 0
+                              Decorate 137(g_tTexcdi4) Binding 11
                               Decorate 146(g_tTexcdu4) DescriptorSet 0
-                              Decorate 146(g_tTexcdu4) Binding 0
+                              Decorate 146(g_tTexcdu4) Binding 12
                               Decorate 162(@entryPointOutput.Pos) BuiltIn Position
                               Decorate 165(g_tTex1df4a) DescriptorSet 0
                               Decorate 165(g_tTex1df4a) Binding 1
diff --git a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
index 81fbc0b..63192df 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 166
 
                               Capability Shader
@@ -520,21 +520,21 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 35(g_tTex1di4) DescriptorSet 0
-                              Decorate 35(g_tTex1di4) Binding 0
+                              Decorate 35(g_tTex1di4) Binding 2
                               Decorate 48(g_tTex1du4) DescriptorSet 0
-                              Decorate 48(g_tTex1du4) Binding 0
+                              Decorate 48(g_tTex1du4) Binding 3
                               Decorate 58(g_tTex2df4) DescriptorSet 0
-                              Decorate 58(g_tTex2df4) Binding 0
+                              Decorate 58(g_tTex2df4) Binding 4
                               Decorate 73(g_tTex2di4) DescriptorSet 0
-                              Decorate 73(g_tTex2di4) Binding 0
+                              Decorate 73(g_tTex2di4) Binding 5
                               Decorate 85(g_tTex2du4) DescriptorSet 0
-                              Decorate 85(g_tTex2du4) Binding 0
+                              Decorate 85(g_tTex2du4) Binding 6
                               Decorate 99(g_tTex3df4) DescriptorSet 0
-                              Decorate 99(g_tTex3df4) Binding 0
+                              Decorate 99(g_tTex3df4) Binding 7
                               Decorate 114(g_tTex3di4) DescriptorSet 0
-                              Decorate 114(g_tTex3di4) Binding 0
+                              Decorate 114(g_tTex3di4) Binding 8
                               Decorate 125(g_tTex3du4) DescriptorSet 0
-                              Decorate 125(g_tTex3du4) Binding 0
+                              Decorate 125(g_tTex3du4) Binding 9
                               Decorate 149(@entryPointOutput.Color) Location 0
                               Decorate 153(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 156(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
index 01ca547..fb8513b 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 120
 
                               Capability Shader
@@ -383,15 +383,15 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 38(g_tTex1di4) DescriptorSet 0
-                              Decorate 38(g_tTex1di4) Binding 0
+                              Decorate 38(g_tTex1di4) Binding 2
                               Decorate 50(g_tTex1du4) DescriptorSet 0
-                              Decorate 50(g_tTex1du4) Binding 0
+                              Decorate 50(g_tTex1du4) Binding 3
                               Decorate 59(g_tTex2df4) DescriptorSet 0
-                              Decorate 59(g_tTex2df4) Binding 0
+                              Decorate 59(g_tTex2df4) Binding 4
                               Decorate 75(g_tTex2di4) DescriptorSet 0
-                              Decorate 75(g_tTex2di4) Binding 0
+                              Decorate 75(g_tTex2di4) Binding 5
                               Decorate 84(g_tTex2du4) DescriptorSet 0
-                              Decorate 84(g_tTex2du4) Binding 0
+                              Decorate 84(g_tTex2du4) Binding 6
                               Decorate 103(@entryPointOutput.Color) Location 0
                               Decorate 107(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 110(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
index a5ff45a..95a1a54 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 147
 
                               Capability Shader
@@ -404,21 +404,21 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 36(g_tTex1di4a) DescriptorSet 0
-                              Decorate 36(g_tTex1di4a) Binding 0
+                              Decorate 36(g_tTex1di4a) Binding 2
                               Decorate 50(g_tTex1du4a) DescriptorSet 0
-                              Decorate 50(g_tTex1du4a) Binding 0
+                              Decorate 50(g_tTex1du4a) Binding 3
                               Decorate 61(g_tTex2df4a) DescriptorSet 0
-                              Decorate 61(g_tTex2df4a) Binding 0
+                              Decorate 61(g_tTex2df4a) Binding 4
                               Decorate 72(g_tTex2di4a) DescriptorSet 0
-                              Decorate 72(g_tTex2di4a) Binding 0
+                              Decorate 72(g_tTex2di4a) Binding 5
                               Decorate 83(g_tTex2du4a) DescriptorSet 0
-                              Decorate 83(g_tTex2du4a) Binding 0
+                              Decorate 83(g_tTex2du4a) Binding 6
                               Decorate 95(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 95(g_tTexcdf4a) Binding 0
+                              Decorate 95(g_tTexcdf4a) Binding 7
                               Decorate 105(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 105(g_tTexcdi4a) Binding 0
+                              Decorate 105(g_tTexcdi4a) Binding 8
                               Decorate 115(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 115(g_tTexcdu4a) Binding 0
+                              Decorate 115(g_tTexcdu4a) Binding 9
                               Decorate 139(@entryPointOutput.Color) Location 0
                               Decorate 143(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 146(g_tTex1df4) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
index 6b91c17..99e252c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 172
 
                               Capability Shader
@@ -478,27 +478,27 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 33(g_tTex1di4) DescriptorSet 0
-                              Decorate 33(g_tTex1di4) Binding 0
+                              Decorate 33(g_tTex1di4) Binding 2
                               Decorate 46(g_tTex1du4) DescriptorSet 0
-                              Decorate 46(g_tTex1du4) Binding 0
+                              Decorate 46(g_tTex1du4) Binding 3
                               Decorate 56(g_tTex2df4) DescriptorSet 0
-                              Decorate 56(g_tTex2df4) Binding 0
+                              Decorate 56(g_tTex2df4) Binding 4
                               Decorate 67(g_tTex2di4) DescriptorSet 0
-                              Decorate 67(g_tTex2di4) Binding 0
+                              Decorate 67(g_tTex2di4) Binding 5
                               Decorate 78(g_tTex2du4) DescriptorSet 0
-                              Decorate 78(g_tTex2du4) Binding 0
+                              Decorate 78(g_tTex2du4) Binding 6
                               Decorate 90(g_tTex3df4) DescriptorSet 0
-                              Decorate 90(g_tTex3df4) Binding 0
+                              Decorate 90(g_tTex3df4) Binding 7
                               Decorate 101(g_tTex3di4) DescriptorSet 0
-                              Decorate 101(g_tTex3di4) Binding 0
+                              Decorate 101(g_tTex3di4) Binding 8
                               Decorate 111(g_tTex3du4) DescriptorSet 0
-                              Decorate 111(g_tTex3du4) Binding 0
+                              Decorate 111(g_tTex3du4) Binding 9
                               Decorate 124(g_tTexcdf4) DescriptorSet 0
-                              Decorate 124(g_tTexcdf4) Binding 0
+                              Decorate 124(g_tTexcdf4) Binding 10
                               Decorate 133(g_tTexcdi4) DescriptorSet 0
-                              Decorate 133(g_tTexcdi4) Binding 0
+                              Decorate 133(g_tTexcdi4) Binding 11
                               Decorate 142(g_tTexcdu4) DescriptorSet 0
-                              Decorate 142(g_tTexcdu4) Binding 0
+                              Decorate 142(g_tTexcdu4) Binding 12
                               Decorate 163(@entryPointOutput.Color) Location 0
                               Decorate 167(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 170(g_sSamp2d) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
index 8f395ed..d4d720b 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 162
 
                               Capability Shader
@@ -432,27 +432,27 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 33(g_tTex1di4) DescriptorSet 0
-                              Decorate 33(g_tTex1di4) Binding 0
+                              Decorate 33(g_tTex1di4) Binding 2
                               Decorate 46(g_tTex1du4) DescriptorSet 0
-                              Decorate 46(g_tTex1du4) Binding 0
+                              Decorate 46(g_tTex1du4) Binding 3
                               Decorate 56(g_tTex2df4) DescriptorSet 0
-                              Decorate 56(g_tTex2df4) Binding 0
+                              Decorate 56(g_tTex2df4) Binding 4
                               Decorate 67(g_tTex2di4) DescriptorSet 0
-                              Decorate 67(g_tTex2di4) Binding 0
+                              Decorate 67(g_tTex2di4) Binding 5
                               Decorate 78(g_tTex2du4) DescriptorSet 0
-                              Decorate 78(g_tTex2du4) Binding 0
+                              Decorate 78(g_tTex2du4) Binding 6
                               Decorate 90(g_tTex3df4) DescriptorSet 0
-                              Decorate 90(g_tTex3df4) Binding 0
+                              Decorate 90(g_tTex3df4) Binding 7
                               Decorate 101(g_tTex3di4) DescriptorSet 0
-                              Decorate 101(g_tTex3di4) Binding 0
+                              Decorate 101(g_tTex3di4) Binding 8
                               Decorate 111(g_tTex3du4) DescriptorSet 0
-                              Decorate 111(g_tTex3du4) Binding 0
+                              Decorate 111(g_tTex3du4) Binding 9
                               Decorate 124(g_tTexcdf4) DescriptorSet 0
-                              Decorate 124(g_tTexcdf4) Binding 0
+                              Decorate 124(g_tTexcdf4) Binding 10
                               Decorate 133(g_tTexcdi4) DescriptorSet 0
-                              Decorate 133(g_tTexcdi4) Binding 0
+                              Decorate 133(g_tTexcdi4) Binding 11
                               Decorate 142(g_tTexcdu4) DescriptorSet 0
-                              Decorate 142(g_tTexcdu4) Binding 0
+                              Decorate 142(g_tTexcdu4) Binding 12
                               Decorate 158(@entryPointOutput.Pos) BuiltIn Position
                               Decorate 161(g_tTex1df4a) DescriptorSet 0
                               Decorate 161(g_tTex1df4a) Binding 1
diff --git a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
index 10b48ec..dda4238 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 162
 
                               Capability Shader
@@ -448,21 +448,21 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 34(g_tTex1di4) DescriptorSet 0
-                              Decorate 34(g_tTex1di4) Binding 0
+                              Decorate 34(g_tTex1di4) Binding 2
                               Decorate 47(g_tTex1du4) DescriptorSet 0
-                              Decorate 47(g_tTex1du4) Binding 0
+                              Decorate 47(g_tTex1du4) Binding 3
                               Decorate 57(g_tTex2df4) DescriptorSet 0
-                              Decorate 57(g_tTex2df4) Binding 0
+                              Decorate 57(g_tTex2df4) Binding 4
                               Decorate 71(g_tTex2di4) DescriptorSet 0
-                              Decorate 71(g_tTex2di4) Binding 0
+                              Decorate 71(g_tTex2di4) Binding 5
                               Decorate 83(g_tTex2du4) DescriptorSet 0
-                              Decorate 83(g_tTex2du4) Binding 0
+                              Decorate 83(g_tTex2du4) Binding 6
                               Decorate 97(g_tTex3df4) DescriptorSet 0
-                              Decorate 97(g_tTex3df4) Binding 0
+                              Decorate 97(g_tTex3df4) Binding 7
                               Decorate 110(g_tTex3di4) DescriptorSet 0
-                              Decorate 110(g_tTex3di4) Binding 0
+                              Decorate 110(g_tTex3di4) Binding 8
                               Decorate 121(g_tTex3du4) DescriptorSet 0
-                              Decorate 121(g_tTex3du4) Binding 0
+                              Decorate 121(g_tTex3du4) Binding 9
                               Decorate 145(@entryPointOutput.Color) Location 0
                               Decorate 149(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 152(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
index 5fb25a0..c0c27e4 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 119
 
                               Capability Shader
@@ -337,15 +337,15 @@
                               Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
                               Decorate 37(g_tTex1di4) DescriptorSet 0
-                              Decorate 37(g_tTex1di4) Binding 0
+                              Decorate 37(g_tTex1di4) Binding 2
                               Decorate 52(g_tTex1du4) DescriptorSet 0
-                              Decorate 52(g_tTex1du4) Binding 0
+                              Decorate 52(g_tTex1du4) Binding 3
                               Decorate 64(g_tTex2df4) DescriptorSet 0
-                              Decorate 64(g_tTex2df4) Binding 0
+                              Decorate 64(g_tTex2df4) Binding 4
                               Decorate 77(g_tTex2di4) DescriptorSet 0
-                              Decorate 77(g_tTex2di4) Binding 0
+                              Decorate 77(g_tTex2di4) Binding 5
                               Decorate 88(g_tTex2du4) DescriptorSet 0
-                              Decorate 88(g_tTex2du4) Binding 0
+                              Decorate 88(g_tTex2du4) Binding 6
                               Decorate 111(@entryPointOutput.Color) Location 0
                               Decorate 115(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 118(g_tTex1df4a) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.scalar-length.frag.out b/Test/baseResults/hlsl.scalar-length.frag.out
index ec80897..c09216a 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): 80008
+// Generated by (magic number): 8000a
 // 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 cb996f6..8a1413f 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): 80008
+// Generated by (magic number): 8000a
 // 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 40f0f20..17356f9 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): 80008
+// Generated by (magic number): 8000a
 // 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 882158e..5d73bba 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): 80008
+// Generated by (magic number): 8000a
 // 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 6f0e1dd..ad4252b 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): 80008
+// Generated by (magic number): 8000a
 // 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 96c14a9..e0786f0 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): 80008
+// Generated by (magic number): 8000a
 // 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 29ec235..0aba000 100644
--- a/Test/baseResults/hlsl.semantic.geom.out
+++ b/Test/baseResults/hlsl.semantic.geom.out
@@ -261,7 +261,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 88
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.semantic.vert.out b/Test/baseResults/hlsl.semantic.vert.out
index 144df05..c17969a 100644
--- a/Test/baseResults/hlsl.semantic.vert.out
+++ b/Test/baseResults/hlsl.semantic.vert.out
@@ -209,8 +209,9 @@
 0:?     '@entryPointOutput.clip1' ( out 2-element array of float ClipDistance)
 0:?     '@entryPointOutput.cull1' ( out 2-element array of float CullDistance)
 
+Validation failed
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // 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 b45f59d..1afcd5b 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): 80008
+// Generated by (magic number): 8000a
 // 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 8da8d48..d3b17f0 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 127
 
                               Capability Shader
@@ -432,7 +432,7 @@
               65:    6(float) Load 12(f)
               66:    7(fvec4) CompositeConstruct 65 65 65 65
               67:    7(fvec4) Load 15(v)
-              68:   62(bvec4) FOrdNotEqual 66 67
+              68:   62(bvec4) FUnordNotEqual 66 67
               69:    41(bool) Any 68
               71:    6(float) Load 70(f1)
               72:    7(fvec4) CompositeConstruct 71 71 71 71
diff --git a/Test/baseResults/hlsl.shapeConvRet.frag.out b/Test/baseResults/hlsl.shapeConvRet.frag.out
index efcbe04..e3e27a2 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 35
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.shift.per-set.frag.out b/Test/baseResults/hlsl.shift.per-set.frag.out
index 60e2ecc..ad0b7e0 100644
--- a/Test/baseResults/hlsl.shift.per-set.frag.out
+++ b/Test/baseResults/hlsl.shift.per-set.frag.out
@@ -219,12 +219,12 @@
 ts6: offset -1, type 8b5f, size 1, index -1, binding 71, stages 16
 
 Uniform block reflection:
-t4: offset -1, type ffffffff, size 0, index -1, binding 21, stages 16, numMembers 1
-t5: offset -1, type ffffffff, size 0, index -1, binding 22, stages 16, numMembers 1
-u5: offset -1, type ffffffff, size 0, index -1, binding 44, stages 16, numMembers 1
-u6: offset -1, type ffffffff, size 0, index -1, binding 34, stages 16, numMembers 1
-cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 16, numMembers 1
-tb: offset -1, type ffffffff, size 4, index -1, binding 27, stages 16, numMembers 1
+t4: offset -1, type ffffffff, size 16, index 0, binding 21, stages 16, numMembers 1
+t5: offset -1, type ffffffff, size 4, index 1, binding 22, stages 16, numMembers 1
+u5: offset -1, type ffffffff, size 4, index 2, binding 44, stages 16, numMembers 1
+u6: offset -1, type ffffffff, size 4, index 3, binding 34, stages 16, numMembers 1
+cb: offset -1, type ffffffff, size 4, index 4, binding 51, stages 16, numMembers 1
+tb: offset -1, type ffffffff, size 4, index 5, binding 27, stages 16, numMembers 1
 
 Buffer variable reflection:
 
diff --git a/Test/baseResults/hlsl.sin.frag.out b/Test/baseResults/hlsl.sin.frag.out
index 3128cec..bf88ce8 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 26
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.singleArgIntPromo.vert.out b/Test/baseResults/hlsl.singleArgIntPromo.vert.out
index 71c1bb2..1da9d5b 100755
--- a/Test/baseResults/hlsl.singleArgIntPromo.vert.out
+++ b/Test/baseResults/hlsl.singleArgIntPromo.vert.out
@@ -194,7 +194,7 @@
 0:?     '@entryPointOutput' (layout( location=0) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 75
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.snorm.uav.comp.out b/Test/baseResults/hlsl.snorm.uav.comp.out
index 739d77d..7b8cd41 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 54
 
                               Capability Shader
@@ -141,7 +141,7 @@
                               MemberDecorate 25($Global) 0 Offset 0
                               Decorate 25($Global) Block
                               Decorate 27 DescriptorSet 0
-                              Decorate 27 Binding 0
+                              Decorate 27 Binding 2
                               Decorate 34(ResultOutS) DescriptorSet 0
                               Decorate 34(ResultOutS) Binding 1
                               Decorate 39(ResultInU) DescriptorSet 0
diff --git a/Test/baseResults/hlsl.specConstant.frag.out b/Test/baseResults/hlsl.specConstant.frag.out
index fdcc2a0..eb62242 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): 80008
+// Generated by (magic number): 8000a
 // 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 04924ed..586dace 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): 80008
+// Generated by (magic number): 8000a
 // 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 5ae189d..0d27dba 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): 80008
+// Generated by (magic number): 8000a
 // 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 f5e004d..e518821 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): 80008
+// Generated by (magic number): 8000a
 // 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 6ee1945..047f413 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): 80008
+// Generated by (magic number): 8000a
 // 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 1b6e0a8..18d32e0 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): 80008
+// Generated by (magic number): 8000a
 // 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 a255b36..7330f56 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): 80008
+// Generated by (magic number): 8000a
 // 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 8c25ca2..f204bd5 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): 80008
+// Generated by (magic number): 8000a
 // 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 c489ffb..3d75fb8 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): 80008
+// Generated by (magic number): 8000a
 // 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 3209ab7..c40dbd6 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): 80008
+// Generated by (magic number): 8000a
 // 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 7c65c06..2570552 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): 80008
+// Generated by (magic number): 8000a
 // 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 a4090d8..642152b 100644
--- a/Test/baseResults/hlsl.struct.split.nested.geom.out
+++ b/Test/baseResults/hlsl.struct.split.nested.geom.out
@@ -430,7 +430,7 @@
 0:?     'ts.contains_no_builtin_io.m1' (layout( location=3) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 99
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.struct.split.trivial.geom.out b/Test/baseResults/hlsl.struct.split.trivial.geom.out
index ecb929e..89c02bf 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): 80008
+// Generated by (magic number): 8000a
 // 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 f516ea0..f1470ab 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): 80008
+// Generated by (magic number): 8000a
 // 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 ae47037..fd1a8bb 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): 80008
+// Generated by (magic number): 8000a
 // 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 6e767e4..3fdbca9 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): 80008
+// Generated by (magic number): 8000a
 // 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 b654c32..97e57b1 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 80
 
                               Capability Shader
@@ -199,38 +199,52 @@
                               Name 78  "g_texdata_array2[2].tex"
                               Name 79  "g_texdata_array2[2].nonopaque_thing"
                               Decorate 18(g_texdata.tex) DescriptorSet 0
-                              Decorate 18(g_texdata.tex) Binding 0
+                              Decorate 18(g_texdata.tex) Binding 1
                               Decorate 22(g_texdata.samp) DescriptorSet 0
                               Decorate 22(g_texdata.samp) Binding 0
                               Decorate 28(g_texdata_array[1].tex) DescriptorSet 0
-                              Decorate 28(g_texdata_array[1].tex) Binding 0
+                              Decorate 28(g_texdata_array[1].tex) Binding 3
                               Decorate 30(g_texdata_array[1].samp) DescriptorSet 0
-                              Decorate 30(g_texdata_array[1].samp) Binding 0
+                              Decorate 30(g_texdata_array[1].samp) Binding 2
                               Decorate 40(g_texdata_array2[1].tex) DescriptorSet 0
-                              Decorate 40(g_texdata_array2[1].tex) Binding 0
+                              Decorate 40(g_texdata_array2[1].tex) Binding 5
                               Decorate 45(g_texdata_array2[1].samp) DescriptorSet 0
-                              Decorate 45(g_texdata_array2[1].samp) Binding 0
+                              Decorate 45(g_texdata_array2[1].samp) Binding 4
                               Decorate 59(ps_output.color) Location 0
                               Decorate 62(g_samp) DescriptorSet 0
                               Decorate 62(g_samp) Binding 0
                               Decorate 63(g_tex) DescriptorSet 0
                               Decorate 63(g_tex) Binding 0
+                              Decorate 65(g_texdata.nonopaque_thing) Location 0
+                              Decorate 65(g_texdata.nonopaque_thing) DescriptorSet 0
                               Decorate 66(g_texdata_array[0].samp) DescriptorSet 0
                               Decorate 66(g_texdata_array[0].samp) Binding 0
                               Decorate 67(g_texdata_array[0].tex) DescriptorSet 0
                               Decorate 67(g_texdata_array[0].tex) Binding 0
+                              Decorate 68(g_texdata_array[0].nonopaque_thing) Location 1
+                              Decorate 68(g_texdata_array[0].nonopaque_thing) DescriptorSet 0
+                              Decorate 69(g_texdata_array[1].nonopaque_thing) Location 2
+                              Decorate 69(g_texdata_array[1].nonopaque_thing) DescriptorSet 0
                               Decorate 70(g_texdata_array[2].samp) DescriptorSet 0
                               Decorate 70(g_texdata_array[2].samp) Binding 0
                               Decorate 71(g_texdata_array[2].tex) DescriptorSet 0
                               Decorate 71(g_texdata_array[2].tex) Binding 0
+                              Decorate 72(g_texdata_array[2].nonopaque_thing) Location 3
+                              Decorate 72(g_texdata_array[2].nonopaque_thing) DescriptorSet 0
                               Decorate 73(g_texdata_array2[0].samp) DescriptorSet 0
                               Decorate 73(g_texdata_array2[0].samp) Binding 0
                               Decorate 74(g_texdata_array2[0].tex) DescriptorSet 0
                               Decorate 74(g_texdata_array2[0].tex) Binding 0
+                              Decorate 75(g_texdata_array2[0].nonopaque_thing) Location 4
+                              Decorate 75(g_texdata_array2[0].nonopaque_thing) DescriptorSet 0
+                              Decorate 76(g_texdata_array2[1].nonopaque_thing) Location 5
+                              Decorate 76(g_texdata_array2[1].nonopaque_thing) DescriptorSet 0
                               Decorate 77(g_texdata_array2[2].samp) DescriptorSet 0
                               Decorate 77(g_texdata_array2[2].samp) Binding 0
                               Decorate 78(g_texdata_array2[2].tex) DescriptorSet 0
                               Decorate 78(g_texdata_array2[2].tex) Binding 0
+                              Decorate 79(g_texdata_array2[2].nonopaque_thing) Location 6
+                              Decorate 79(g_texdata_array2[2].nonopaque_thing) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.structarray.flatten.geom.out b/Test/baseResults/hlsl.structarray.flatten.geom.out
index 8f29897..619dccf 100644
--- a/Test/baseResults/hlsl.structarray.flatten.geom.out
+++ b/Test/baseResults/hlsl.structarray.flatten.geom.out
@@ -314,7 +314,7 @@
 0:?     'outStream.uv' (layout( location=1) out 2-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 82
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
index c61b1d8..6a239da 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 70
 
                               Capability Shader
@@ -190,13 +190,13 @@
                               Decorate 9 BufferBlock
                               Decorate 12 BufferBlock
                               Decorate 49(sbuf_a) DescriptorSet 0
-                              Decorate 49(sbuf_a) Binding 0
+                              Decorate 49(sbuf_a) Binding 4
                               Decorate 50(sbuf_a@count) DescriptorSet 0
-                              Decorate 50(sbuf_a@count) Binding 0
+                              Decorate 50(sbuf_a@count) Binding 6
                               Decorate 51(sbuf_c) DescriptorSet 0
-                              Decorate 51(sbuf_c) Binding 0
+                              Decorate 51(sbuf_c) Binding 5
                               Decorate 52(sbuf_c@count) DescriptorSet 0
-                              Decorate 52(sbuf_c@count) Binding 0
+                              Decorate 52(sbuf_c@count) Binding 7
                               Decorate 58(pos) Flat
                               Decorate 58(pos) Location 0
                               Decorate 61(@entryPointOutput) Location 0
diff --git a/Test/baseResults/hlsl.structbuffer.append.frag.out b/Test/baseResults/hlsl.structbuffer.append.frag.out
index e213b4b..5631624 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 56
 
                               Capability Shader
@@ -157,11 +157,11 @@
                               MemberDecorate 20(sbuf_a@count) 0 Offset 0
                               Decorate 20(sbuf_a@count) BufferBlock
                               Decorate 22(sbuf_a@count) DescriptorSet 0
-                              Decorate 22(sbuf_a@count) Binding 0
+                              Decorate 22(sbuf_a@count) Binding 1
                               Decorate 35(sbuf_c) DescriptorSet 0
-                              Decorate 35(sbuf_c) Binding 0
+                              Decorate 35(sbuf_c) Binding 2
                               Decorate 36(sbuf_c@count) DescriptorSet 0
-                              Decorate 36(sbuf_c@count) Binding 0
+                              Decorate 36(sbuf_c@count) Binding 3
                               Decorate 48(pos) Flat
                               Decorate 48(pos) Location 0
                               Decorate 51(@entryPointOutput) Location 0
diff --git a/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
index d038fbd..ba874ee 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): 80008
+// Generated by (magic number): 8000a
 // 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 e0f1131..40e8d9e 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): 80008
+// Generated by (magic number): 8000a
 // 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 34b029b..95a9e67 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 78
 
                               Capability Shader
@@ -208,7 +208,7 @@
                               MemberDecorate 15(sbuf2) 0 Offset 0
                               Decorate 15(sbuf2) BufferBlock
                               Decorate 17(sbuf2) DescriptorSet 0
-                              Decorate 17(sbuf2) Binding 0
+                              Decorate 17(sbuf2) Binding 1
                               MemberDecorate 28(sb_t) 0 Offset 0
                               MemberDecorate 28(sb_t) 1 Offset 12
                               Decorate 29 ArrayStride 16
diff --git a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
index e1c5466..a7668a7 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 85
 
                               Capability Shader
@@ -224,14 +224,14 @@
                               MemberDecorate 26(csb@count) 0 Offset 0
                               Decorate 26(csb@count) BufferBlock
                               Decorate 28(csb@count) DescriptorSet 0
-                              Decorate 28(csb@count) Binding 0
+                              Decorate 28(csb@count) Binding 2
                               Decorate 58(outtx) DescriptorSet 0
                               Decorate 58(outtx) Binding 0
                               Decorate 63 ArrayStride 16
                               MemberDecorate 64(rwsb) 0 Offset 0
                               Decorate 64(rwsb) BufferBlock
                               Decorate 66(rwsb) DescriptorSet 0
-                              Decorate 66(rwsb) Binding 0
+                              Decorate 66(rwsb) Binding 3
                               Decorate 80(nThreadId) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.structbuffer.fn.frag.out b/Test/baseResults/hlsl.structbuffer.fn.frag.out
index 1df5880..c5afd35 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 78
 
                               Capability Shader
@@ -191,9 +191,9 @@
                               Decorate 18 BufferBlock
                               Decorate 20 BufferBlock
                               Decorate 47(sbuf2) DescriptorSet 0
-                              Decorate 47(sbuf2) Binding 0
+                              Decorate 47(sbuf2) Binding 2
                               Decorate 48(sbuf2@count) DescriptorSet 0
-                              Decorate 48(sbuf2@count) Binding 0
+                              Decorate 48(sbuf2@count) Binding 3
                               Decorate 50(sbuf) DescriptorSet 0
                               Decorate 50(sbuf) Binding 10
                               Decorate 63(pos) Flat
diff --git a/Test/baseResults/hlsl.structbuffer.fn2.comp.out b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
index d25446b..3409a5f 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): 80008
+// Generated by (magic number): 8000a
 // 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 38e915d..5979ff2 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 96
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
index 57f387c..23b2125 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): 80008
+// Generated by (magic number): 8000a
 // 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 b9c1630..8ae9767 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 70
 
                               Capability Shader
@@ -238,15 +238,15 @@
                               Decorate 22(sbuf_rw_i) DescriptorSet 0
                               Decorate 22(sbuf_rw_i) Binding 0
                               Decorate 26(sbuf_rw_d) DescriptorSet 0
-                              Decorate 26(sbuf_rw_d) Binding 0
+                              Decorate 26(sbuf_rw_d) Binding 2
                               Decorate 27(sbuf_rw_nocounter) DescriptorSet 0
-                              Decorate 27(sbuf_rw_nocounter) Binding 0
+                              Decorate 27(sbuf_rw_nocounter) Binding 4
                               MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0
                               Decorate 34(sbuf_rw_i@count) BufferBlock
                               Decorate 36(sbuf_rw_i@count) DescriptorSet 0
-                              Decorate 36(sbuf_rw_i@count) Binding 0
+                              Decorate 36(sbuf_rw_i@count) Binding 1
                               Decorate 42(sbuf_rw_d@count) DescriptorSet 0
-                              Decorate 42(sbuf_rw_d@count) Binding 0
+                              Decorate 42(sbuf_rw_d@count) Binding 3
                               Decorate 63(pos) Flat
                               Decorate 63(pos) Location 0
                               Decorate 66(@entryPointOutput) Location 0
diff --git a/Test/baseResults/hlsl.structbuffer.rw.frag.out b/Test/baseResults/hlsl.structbuffer.rw.frag.out
index fbd48a2..d6eb8f3 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 78
 
                               Capability Shader
@@ -207,7 +207,7 @@
                               MemberDecorate 15(sbuf2) 0 Offset 0
                               Decorate 15(sbuf2) BufferBlock
                               Decorate 17(sbuf2) DescriptorSet 0
-                              Decorate 17(sbuf2) Binding 0
+                              Decorate 17(sbuf2) Binding 1
                               MemberDecorate 28(sb_t) 0 Offset 0
                               MemberDecorate 28(sb_t) 1 Offset 12
                               Decorate 29 ArrayStride 16
diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
index a061eac..337442d 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): 80008
+// Generated by (magic number): 8000a
 // 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 ad9c0d4..85f6346 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): 80008
+// Generated by (magic number): 8000a
 // 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 8d48028..2aca628 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 204
 
                               Capability Shader
@@ -500,73 +500,73 @@
                               Decorate 27(subpass_i4) Binding 0
                               Decorate 27(subpass_i4) InputAttachmentIndex 2
                               Decorate 36(subpass_u4) DescriptorSet 0
-                              Decorate 36(subpass_u4) Binding 0
+                              Decorate 36(subpass_u4) Binding 2
                               Decorate 36(subpass_u4) InputAttachmentIndex 3
                               Decorate 42(subpass_ms_f4) DescriptorSet 0
-                              Decorate 42(subpass_ms_f4) Binding 0
+                              Decorate 42(subpass_ms_f4) Binding 3
                               Decorate 42(subpass_ms_f4) InputAttachmentIndex 4
                               Decorate 49(subpass_ms_i4) DescriptorSet 0
-                              Decorate 49(subpass_ms_i4) Binding 0
+                              Decorate 49(subpass_ms_i4) Binding 4
                               Decorate 49(subpass_ms_i4) InputAttachmentIndex 5
                               Decorate 55(subpass_ms_u4) DescriptorSet 0
-                              Decorate 55(subpass_ms_u4) Binding 0
+                              Decorate 55(subpass_ms_u4) Binding 5
                               Decorate 55(subpass_ms_u4) InputAttachmentIndex 6
                               Decorate 61(subpass_f3) DescriptorSet 0
-                              Decorate 61(subpass_f3) Binding 0
+                              Decorate 61(subpass_f3) Binding 6
                               Decorate 61(subpass_f3) InputAttachmentIndex 1
                               Decorate 71(subpass_i3) DescriptorSet 0
-                              Decorate 71(subpass_i3) Binding 0
+                              Decorate 71(subpass_i3) Binding 7
                               Decorate 71(subpass_i3) InputAttachmentIndex 2
                               Decorate 81(subpass_u3) DescriptorSet 0
-                              Decorate 81(subpass_u3) Binding 0
+                              Decorate 81(subpass_u3) Binding 8
                               Decorate 81(subpass_u3) InputAttachmentIndex 3
                               Decorate 89(subpass_ms_f3) DescriptorSet 0
-                              Decorate 89(subpass_ms_f3) Binding 0
+                              Decorate 89(subpass_ms_f3) Binding 9
                               Decorate 89(subpass_ms_f3) InputAttachmentIndex 4
                               Decorate 97(subpass_ms_i3) DescriptorSet 0
-                              Decorate 97(subpass_ms_i3) Binding 0
+                              Decorate 97(subpass_ms_i3) Binding 10
                               Decorate 97(subpass_ms_i3) InputAttachmentIndex 5
                               Decorate 105(subpass_ms_u3) DescriptorSet 0
-                              Decorate 105(subpass_ms_u3) Binding 0
+                              Decorate 105(subpass_ms_u3) Binding 11
                               Decorate 105(subpass_ms_u3) InputAttachmentIndex 6
                               Decorate 115(subpass_f2) DescriptorSet 0
-                              Decorate 115(subpass_f2) Binding 0
+                              Decorate 115(subpass_f2) Binding 12
                               Decorate 115(subpass_f2) InputAttachmentIndex 1
                               Decorate 123(subpass_i2) DescriptorSet 0
-                              Decorate 123(subpass_i2) Binding 0
+                              Decorate 123(subpass_i2) Binding 13
                               Decorate 123(subpass_i2) InputAttachmentIndex 2
                               Decorate 132(subpass_u2) DescriptorSet 0
-                              Decorate 132(subpass_u2) Binding 0
+                              Decorate 132(subpass_u2) Binding 14
                               Decorate 132(subpass_u2) InputAttachmentIndex 3
                               Decorate 139(subpass_ms_f2) DescriptorSet 0
-                              Decorate 139(subpass_ms_f2) Binding 0
+                              Decorate 139(subpass_ms_f2) Binding 15
                               Decorate 139(subpass_ms_f2) InputAttachmentIndex 4
                               Decorate 147(subpass_ms_i2) DescriptorSet 0
-                              Decorate 147(subpass_ms_i2) Binding 0
+                              Decorate 147(subpass_ms_i2) Binding 16
                               Decorate 147(subpass_ms_i2) InputAttachmentIndex 5
                               Decorate 154(subpass_ms_u2) DescriptorSet 0
-                              Decorate 154(subpass_ms_u2) Binding 0
+                              Decorate 154(subpass_ms_u2) Binding 17
                               Decorate 154(subpass_ms_u2) InputAttachmentIndex 6
                               Decorate 162(subpass_f) DescriptorSet 0
-                              Decorate 162(subpass_f) Binding 0
+                              Decorate 162(subpass_f) Binding 18
                               Decorate 162(subpass_f) InputAttachmentIndex 1
                               Decorate 168(subpass_i) DescriptorSet 0
-                              Decorate 168(subpass_i) Binding 0
+                              Decorate 168(subpass_i) Binding 19
                               Decorate 168(subpass_i) InputAttachmentIndex 2
                               Decorate 174(subpass_u) DescriptorSet 0
-                              Decorate 174(subpass_u) Binding 0
+                              Decorate 174(subpass_u) Binding 20
                               Decorate 174(subpass_u) InputAttachmentIndex 3
                               Decorate 179(subpass_ms_f) DescriptorSet 0
-                              Decorate 179(subpass_ms_f) Binding 0
+                              Decorate 179(subpass_ms_f) Binding 21
                               Decorate 179(subpass_ms_f) InputAttachmentIndex 4
                               Decorate 184(subpass_ms_i) DescriptorSet 0
-                              Decorate 184(subpass_ms_i) Binding 0
+                              Decorate 184(subpass_ms_i) Binding 22
                               Decorate 184(subpass_ms_i) InputAttachmentIndex 5
                               Decorate 189(subpass_ms_u) DescriptorSet 0
-                              Decorate 189(subpass_ms_u) Binding 0
+                              Decorate 189(subpass_ms_u) Binding 23
                               Decorate 189(subpass_ms_u) InputAttachmentIndex 6
                               Decorate 194(subpass_2) DescriptorSet 0
-                              Decorate 194(subpass_2) Binding 0
+                              Decorate 194(subpass_2) Binding 24
                               Decorate 194(subpass_2) InputAttachmentIndex 7
                               Decorate 202(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.switch.frag.out b/Test/baseResults/hlsl.switch.frag.out
index b94187d..c239640 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): 80008
+// Generated by (magic number): 8000a
 // 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 87ccdc7..28f295d 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): 80008
+// Generated by (magic number): 8000a
 // 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 31f7b7a..2c1ef1d 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): 80008
+// Generated by (magic number): 8000a
 // 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 0ab23e8..8bfaa2b 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): 80008
+// Generated by (magic number): 8000a
 // 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 93d787c..6db5eb4 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): 80008
+// Generated by (magic number): 8000a
 // 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 0fae66f..051d267 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): 80008
+// Generated by (magic number): 8000a
 // 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 1dcfc46..1ffb263 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): 80008
+// Generated by (magic number): 8000a
 // 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 7835d32..3d718de 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 240
 
                               Capability Shader
@@ -907,17 +907,17 @@
                               Decorate 30(g_sSamp) DescriptorSet 0
                               Decorate 30(g_sSamp) Binding 0
                               Decorate 90(g_tTex2s1) DescriptorSet 0
-                              Decorate 90(g_tTex2s1) Binding 0
+                              Decorate 90(g_tTex2s1) Binding 1
                               Decorate 114(g_tTex2s2) DescriptorSet 0
-                              Decorate 114(g_tTex2s2) Binding 0
+                              Decorate 114(g_tTex2s2) Binding 2
                               Decorate 140(g_tTex2s3) DescriptorSet 0
-                              Decorate 140(g_tTex2s3) Binding 0
+                              Decorate 140(g_tTex2s3) Binding 3
                               Decorate 168(g_tTex2s4) DescriptorSet 0
-                              Decorate 168(g_tTex2s4) Binding 0
+                              Decorate 168(g_tTex2s4) Binding 4
                               Decorate 202(g_tTex2s5) DescriptorSet 0
-                              Decorate 202(g_tTex2s5) Binding 0
+                              Decorate 202(g_tTex2s5) Binding 5
                               Decorate 229(g_tTex2s1a) DescriptorSet 0
-                              Decorate 229(g_tTex2s1a) Binding 0
+                              Decorate 229(g_tTex2s1a) Binding 6
                               Decorate 238(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.texture.subvec4.frag.out b/Test/baseResults/hlsl.texture.subvec4.frag.out
index 01f32da..8ba67cf 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 130
 
                               Capability Shader
@@ -388,21 +388,21 @@
                               Decorate 17(g_tTex2dmsf1) DescriptorSet 0
                               Decorate 17(g_tTex2dmsf1) Binding 0
                               Decorate 33(g_tTex2dmsf2) DescriptorSet 0
-                              Decorate 33(g_tTex2dmsf2) Binding 0
+                              Decorate 33(g_tTex2dmsf2) Binding 1
                               Decorate 43(g_tTex2dmsf3) DescriptorSet 0
-                              Decorate 43(g_tTex2dmsf3) Binding 0
+                              Decorate 43(g_tTex2dmsf3) Binding 2
                               Decorate 53(g_tTex2dmsf4) DescriptorSet 0
-                              Decorate 53(g_tTex2dmsf4) Binding 0
+                              Decorate 53(g_tTex2dmsf4) Binding 3
                               Decorate 88(g_tTex2df1) DescriptorSet 0
-                              Decorate 88(g_tTex2df1) Binding 0
+                              Decorate 88(g_tTex2df1) Binding 4
                               Decorate 92(g_sSamp) DescriptorSet 0
-                              Decorate 92(g_sSamp) Binding 0
+                              Decorate 92(g_sSamp) Binding 8
                               Decorate 101(g_tTex2df2) DescriptorSet 0
-                              Decorate 101(g_tTex2df2) Binding 0
+                              Decorate 101(g_tTex2df2) Binding 5
                               Decorate 109(g_tTex2df3) DescriptorSet 0
-                              Decorate 109(g_tTex2df3) Binding 0
+                              Decorate 109(g_tTex2df3) Binding 6
                               Decorate 118(g_tTex2df4) DescriptorSet 0
-                              Decorate 118(g_tTex2df4) Binding 0
+                              Decorate 118(g_tTex2df4) Binding 7
                               Decorate 128(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.texturebuffer.frag.out b/Test/baseResults/hlsl.texturebuffer.frag.out
index 1aa9dbc..37e19c2 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 39
 
                               Capability Shader
@@ -107,7 +107,7 @@
                               MemberDecorate 22(tbuf2) 1 Offset 16
                               Decorate 22(tbuf2) BufferBlock
                               Decorate 24 DescriptorSet 0
-                              Decorate 24 Binding 0
+                              Decorate 24 Binding 1
                               Decorate 32(pos) BuiltIn FragCoord
                               Decorate 35(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.this.frag.out b/Test/baseResults/hlsl.this.frag.out
index f32f109..47022ec 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): 80008
+// Generated by (magic number): 8000a
 // 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 2d1e8a3..53e8c04 100644
--- a/Test/baseResults/hlsl.tristream-append.geom.out
+++ b/Test/baseResults/hlsl.tristream-append.geom.out
@@ -157,7 +157,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 66
 
                               Capability Geometry
diff --git a/Test/baseResults/hlsl.tx.bracket.frag.out b/Test/baseResults/hlsl.tx.bracket.frag.out
index 0e8fb5c..424b848 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 188
 
                               Capability Shader
@@ -493,25 +493,25 @@
                               MemberDecorate 45($Global) 7 Offset 80
                               Decorate 45($Global) Block
                               Decorate 47 DescriptorSet 0
-                              Decorate 47 Binding 0
+                              Decorate 47 Binding 9
                               Decorate 57(g_tTex1df4) DescriptorSet 0
                               Decorate 57(g_tTex1df4) Binding 0
                               Decorate 72(g_tTex1di4) DescriptorSet 0
-                              Decorate 72(g_tTex1di4) Binding 0
+                              Decorate 72(g_tTex1di4) Binding 1
                               Decorate 80(g_tTex1du4) DescriptorSet 0
-                              Decorate 80(g_tTex1du4) Binding 0
+                              Decorate 80(g_tTex1du4) Binding 2
                               Decorate 88(g_tTex2df4) DescriptorSet 0
-                              Decorate 88(g_tTex2df4) Binding 0
+                              Decorate 88(g_tTex2df4) Binding 3
                               Decorate 98(g_tTex2di4) DescriptorSet 0
-                              Decorate 98(g_tTex2di4) Binding 0
+                              Decorate 98(g_tTex2di4) Binding 4
                               Decorate 106(g_tTex2du4) DescriptorSet 0
-                              Decorate 106(g_tTex2du4) Binding 0
+                              Decorate 106(g_tTex2du4) Binding 5
                               Decorate 114(g_tTex3df4) DescriptorSet 0
-                              Decorate 114(g_tTex3df4) Binding 0
+                              Decorate 114(g_tTex3df4) Binding 6
                               Decorate 124(g_tTex3di4) DescriptorSet 0
-                              Decorate 124(g_tTex3di4) Binding 0
+                              Decorate 124(g_tTex3di4) Binding 7
                               Decorate 132(g_tTex3du4) DescriptorSet 0
-                              Decorate 132(g_tTex3du4) Binding 0
+                              Decorate 132(g_tTex3du4) Binding 8
                               Decorate 164(@entryPointOutput.Color) Location 0
                               Decorate 169(g_sSamp) DescriptorSet 0
                               Decorate 169(g_sSamp) Binding 0
diff --git a/Test/baseResults/hlsl.tx.overload.frag.out b/Test/baseResults/hlsl.tx.overload.frag.out
index 8556b9e..de8b38b 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 73
 
                               Capability Shader
@@ -165,11 +165,11 @@
                               Decorate 45(tf1) DescriptorSet 0
                               Decorate 45(tf1) Binding 0
                               Decorate 49(tf4) DescriptorSet 0
-                              Decorate 49(tf4) Binding 0
+                              Decorate 49(tf4) Binding 1
                               Decorate 56(twf1) DescriptorSet 0
-                              Decorate 56(twf1) Binding 0
+                              Decorate 56(twf1) Binding 2
                               Decorate 63(twf4) DescriptorSet 0
-                              Decorate 63(twf4) Binding 0
+                              Decorate 63(twf4) Binding 3
                               Decorate 71(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.type.half.frag.out b/Test/baseResults/hlsl.type.half.frag.out
index 719b139..ec7e46d 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): 80008
+// Generated by (magic number): 8000a
 // 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 adec4a3..5705fb7 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 105
 
                               Capability Shader
@@ -372,9 +372,9 @@
      89(half2x3):     88(ptr) Variable Function
                               Store 19(float) 20
               27:    6(float) Load 19(float)
-              29:    21(bool) FOrdNotEqual 27 28
+              29:    21(bool) FUnordNotEqual 27 28
               30:    6(float) Load 19(float)
-              31:    21(bool) FOrdNotEqual 30 28
+              31:    21(bool) FUnordNotEqual 30 28
               32:          24 CompositeConstruct 29 31
                               Store 26(bool) 32
               38:     37(ptr) AccessChain 26(bool) 36
diff --git a/Test/baseResults/hlsl.type.type.conversion.valid.frag.out b/Test/baseResults/hlsl.type.type.conversion.valid.frag.out
index 3e511ff..407caf3 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): 80008
+// Generated by (magic number): 8000a
 // 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 1ca93bb..cedf601 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): 80008
+// Generated by (magic number): 8000a
 // 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 d4ab66e..d925124 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): 80008
+// Generated by (magic number): 8000a
 // 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 99de9d9..f93cca0 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): 80008
+// Generated by (magic number): 8000a
 // 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 a9fc9b4..573195d 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): 80008
+// Generated by (magic number): 8000a
 // 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 3fc8497..1d79f17 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): 80008
+// Generated by (magic number): 8000a
 // 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 e237e15..1647c7d 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): 80008
+// Generated by (magic number): 8000a
 // 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 09cba4d..dcd11ae 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): 80008
+// Generated by (magic number): 8000a
 // 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 8848a15..59f3050 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 30
 
                               Capability Shader
diff --git a/Test/baseResults/hlsl.wavereduction.comp.out b/Test/baseResults/hlsl.wavereduction.comp.out
index c31f7f5..a898612 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): 80008
+// Generated by (magic number): 8000a
 // 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 b5c095d..83140a2 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): 80008
+// Generated by (magic number): 8000a
 // 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 a63d006..23825e8 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 52
 
                               Capability Shader
@@ -149,7 +149,7 @@
               17:             Label
               18:    7(fvec4) Load 10(input)
               19:    7(fvec4) Load 10(input)
-              22:   21(bvec4) FOrdNotEqual 18 19
+              22:   21(bvec4) FUnordNotEqual 18 19
               23:    20(bool) Any 22
                               BranchConditional 23 14 15
               14:               Label
diff --git a/Test/baseResults/hlsl.y-negate-1.vert.out b/Test/baseResults/hlsl.y-negate-1.vert.out
index 08413d2..aefde04 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): 80008
+// Generated by (magic number): 8000a
 // 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 9e90d3b..4a9ef61 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): 80008
+// Generated by (magic number): 8000a
 // 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 29f63f1..3544910 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 50
 
                               Capability Shader
diff --git a/Test/baseResults/link.vk.matchingPC.0.0.frag.out b/Test/baseResults/link.vk.matchingPC.0.0.frag.out
index 1d6875a..c434b66 100755
--- a/Test/baseResults/link.vk.matchingPC.0.0.frag.out
+++ b/Test/baseResults/link.vk.matchingPC.0.0.frag.out
@@ -90,7 +90,7 @@
 0:?     'uPC' (layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale})
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 39
 
                               Capability Shader
diff --git a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
index 6440a3b..ddb856d 100755
--- a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
+++ b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
@@ -173,7 +173,7 @@
 0:?     'P' ( in highp 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 73
 
                               Capability Shader
@@ -211,6 +211,7 @@
                               Name 70  "BufferBlock"
                               MemberName 70(BufferBlock) 0  "p"
                               Name 72  "uBuf"
+                              Decorate 14(oColor) Location 4
                               MemberDecorate 16(ColorBlock) 0 Offset 0
                               MemberDecorate 16(ColorBlock) 1 Offset 16
                               MemberDecorate 16(ColorBlock) 2 Offset 32
@@ -223,6 +224,7 @@
                               Decorate 28(uColorBuf) DescriptorSet 0
                               Decorate 28(uColorBuf) Binding 0
                               Decorate 32(Vertex) Block
+                              Decorate 34(oV) Location 2
                               MemberDecorate 40(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 40(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 40(gl_PerVertex) 2 BuiltIn ClipDistance
@@ -236,6 +238,7 @@
                               Decorate 44(MatrixBlock) Block
                               Decorate 46(uM) DescriptorSet 0
                               Decorate 46(uM) Binding 0
+                              Decorate 65(P) Location 0
                               MemberDecorate 70(BufferBlock) 0 ColMajor
                               MemberDecorate 70(BufferBlock) 0 Offset 0
                               MemberDecorate 70(BufferBlock) 0 MatrixStride 16
diff --git a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
index 413da7e..63be728 100755
--- a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
+++ b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
@@ -258,7 +258,7 @@
 0:?     'P' ( in 3-element array of highp 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 101
 
                               Capability Geometry
@@ -304,6 +304,7 @@
                               MemberName 95(BufferBlock) 0  "p"
                               Name 97  "uBuf"
                               Name 100  "P"
+                              Decorate 18(oColor) Location 2
                               MemberDecorate 20(ColorBlock) 0 Offset 0
                               MemberDecorate 20(ColorBlock) 1 Offset 16
                               MemberDecorate 20(ColorBlock) 2 Offset 32
@@ -325,13 +326,16 @@
                               Decorate 50(uM) DescriptorSet 0
                               Decorate 50(uM) Binding 0
                               Decorate 59(Vertex) Block
+                              Decorate 61(oV) Location 1
                               Decorate 64(Vertex) Block
+                              Decorate 68(iV) Location 0
                               MemberDecorate 95(BufferBlock) 0 ColMajor
                               MemberDecorate 95(BufferBlock) 0 Offset 0
                               MemberDecorate 95(BufferBlock) 0 MatrixStride 16
                               Decorate 95(BufferBlock) BufferBlock
                               Decorate 97(uBuf) DescriptorSet 0
                               Decorate 97(uBuf) Binding 1
+                              Decorate 100(P) Location 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
index c9dba15..e1d5c88 100755
--- a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
+++ b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
@@ -108,7 +108,7 @@
 0:?     'P' (layout( location=0) in highp 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 53
 
                               Capability Shader
diff --git a/Test/baseResults/link1.vk.frag.out b/Test/baseResults/link1.vk.frag.out
index 94debe1..fa1d48e 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 70
 
                               Capability Shader
diff --git a/Test/baseResults/rayQuery-allOps.comp.out b/Test/baseResults/rayQuery-allOps.comp.out
index 2ac7cd3..c0cc8aa 100644
--- a/Test/baseResults/rayQuery-allOps.comp.out
+++ b/Test/baseResults/rayQuery-allOps.comp.out
@@ -1,6 +1,6 @@
 rayQuery-allOps.comp
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 258
 
                               Capability Shader
diff --git a/Test/baseResults/rayQuery-allOps.frag.out b/Test/baseResults/rayQuery-allOps.frag.out
index 3160c2b..8182da3 100644
--- a/Test/baseResults/rayQuery-allOps.frag.out
+++ b/Test/baseResults/rayQuery-allOps.frag.out
@@ -1,6 +1,6 @@
 rayQuery-allOps.frag
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 257
 
                               Capability Shader
diff --git a/Test/baseResults/rayQuery-allOps.rgen.out b/Test/baseResults/rayQuery-allOps.rgen.out
index a61769e..01b8f1d 100644
--- a/Test/baseResults/rayQuery-allOps.rgen.out
+++ b/Test/baseResults/rayQuery-allOps.rgen.out
@@ -1,6 +1,6 @@
 rayQuery-allOps.rgen
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 257
 
                               Capability RayQueryProvisionalKHR
diff --git a/Test/baseResults/rayQuery-initialize.rgen.out b/Test/baseResults/rayQuery-initialize.rgen.out
index 7824930..f97287f 100644
--- a/Test/baseResults/rayQuery-initialize.rgen.out
+++ b/Test/baseResults/rayQuery-initialize.rgen.out
@@ -1,6 +1,6 @@
 rayQuery-initialize.rgen
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 103
 
                               Capability RayQueryProvisionalKHR
diff --git a/Test/baseResults/rayQuery-no-cse.rgen.out b/Test/baseResults/rayQuery-no-cse.rgen.out
index c09e348..23c8b51 100644
--- a/Test/baseResults/rayQuery-no-cse.rgen.out
+++ b/Test/baseResults/rayQuery-no-cse.rgen.out
@@ -1,6 +1,6 @@
 rayQuery-no-cse.rgen
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 107
 
                               Capability RayQueryProvisionalKHR
diff --git a/Test/baseResults/rayQuery.rgen.out b/Test/baseResults/rayQuery.rgen.out
index 4658338..bf142a3 100644
--- a/Test/baseResults/rayQuery.rgen.out
+++ b/Test/baseResults/rayQuery.rgen.out
@@ -1,6 +1,6 @@
 rayQuery.rgen
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 44
 
                               Capability RayQueryProvisionalKHR
@@ -28,6 +28,8 @@
                               MemberDecorate 26(block) 0 Offset 0
                               MemberDecorate 26(block) 1 Offset 16
                               Decorate 26(block) BufferBlock
+                              Decorate 28 DescriptorSet 0
+                              Decorate 28 Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/reflection.linked.options.out b/Test/baseResults/reflection.linked.options.out
index af07bbd..a0e45ed 100644
--- a/Test/baseResults/reflection.linked.options.out
+++ b/Test/baseResults/reflection.linked.options.out
@@ -7,7 +7,7 @@
 ubo_block.fsonly_uniform: offset 12, type 1406, size 1, index 0, binding -1, stages 16
 
 Uniform block reflection:
-ubo_block: offset -1, type ffffffff, size 16, index -1, binding 0, stages 17, numMembers 4
+ubo_block: offset -1, type ffffffff, size 16, index 0, binding 0, stages 17, numMembers 4
 
 Buffer variable reflection:
 
@@ -15,6 +15,8 @@
 
 Pipeline input reflection:
 vertin: offset 0, type 1406, size 1, index 0, binding -1, stages 1
+gl_VertexID: offset 0, type 1404, size 1, index 0, binding -1, stages 1
+gl_InstanceID: offset 0, type 1404, size 1, index 0, binding -1, stages 1
 
 Pipeline output reflection:
 fragout: offset 0, type 1406, size 1, index 0, binding -1, stages 16
diff --git a/Test/baseResults/reflection.linked.out b/Test/baseResults/reflection.linked.out
index b1b2b3c..3874218 100644
--- a/Test/baseResults/reflection.linked.out
+++ b/Test/baseResults/reflection.linked.out
@@ -6,7 +6,7 @@
 ubo_block.fsonly_uniform: offset 12, type 1406, size 1, index 0, binding -1, stages 16
 
 Uniform block reflection:
-ubo_block: offset -1, type ffffffff, size 16, index -1, binding 0, stages 17, numMembers 4
+ubo_block: offset -1, type ffffffff, size 16, index 0, binding 0, stages 17, numMembers 4
 
 Buffer variable reflection:
 
diff --git a/Test/baseResults/reflection.options.vert.out b/Test/baseResults/reflection.options.vert.out
index 3f4a271..d68bf37 100644
--- a/Test/baseResults/reflection.options.vert.out
+++ b/Test/baseResults/reflection.options.vert.out
@@ -32,7 +32,7 @@
 uniform_multi[3][2][0]: offset -1, type 1406, size 2, index -1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
 
 Uniform block reflection:
-UBO: offset -1, type ffffffff, size 192, index -1, binding -1, stages 1, numMembers 7
+UBO: offset -1, type ffffffff, size 192, index 0, binding -1, stages 1, numMembers 7
 
 Buffer variable reflection:
 t[0].v[0].position[0]: offset 0, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
@@ -51,18 +51,19 @@
 MultipleArrays.vert[0].position[0]: offset 360, type 1406, size 3, index 1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24
 MultipleArrays.vert[0].normal[0]: offset 372, type 1406, size 3, index 1, binding -1, stages 0, arrayStride 4, topLevelArrayStride 24
 MultipleArrays.f[0]: offset 480, type 1406, size 5, index 1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4
-ArrayedBind[0].a: offset 0, type 1406, size 1, index 4, binding -1, stages 0
-ArrayedBind[0].b: offset 4, type 1406, size 1, index 4, binding -1, stages 1
+ArrayedBind.a: offset 0, type 1406, size 1, index 2, binding -1, stages 0
+ArrayedBind.b: offset 4, type 1406, size 1, index 2, binding -1, stages 1
 
 Buffer block reflection:
-VertexCollection: offset -1, type ffffffff, size 400, index -1, binding -1, stages 1, numMembers 7
-MultipleArrays: offset -1, type ffffffff, size 500, index -1, binding -1, stages 1, numMembers 9
-ArrayedBind[0]: offset -1, type ffffffff, size 8, index -1, binding -1, stages 1, numMembers 2
-ArrayedBind[1]: offset -1, type ffffffff, size 8, index -1, binding -1, stages 1, numMembers 2
-ArrayedBind[2]: offset -1, type ffffffff, size 8, index -1, binding -1, stages 1, numMembers 2
+VertexCollection: offset -1, type ffffffff, size 400, index 0, binding -1, stages 1, numMembers 7
+MultipleArrays: offset -1, type ffffffff, size 500, index 1, binding -1, stages 1, numMembers 9
+ArrayedBind[0]: offset -1, type ffffffff, size 8, index 2, binding -1, stages 1, numMembers 2
+ArrayedBind[1]: offset -1, type ffffffff, size 8, index 3, binding -1, stages 1, numMembers 2
+ArrayedBind[2]: offset -1, type ffffffff, size 8, index 4, binding -1, stages 1, numMembers 2
 
 Pipeline input reflection:
 gl_InstanceID: offset 0, type 1404, size 1, index 0, binding -1, stages 1
+gl_VertexID: offset 0, type 1404, size 1, index 0, binding -1, stages 1
 
 Pipeline output reflection:
 outval.val: offset 0, type 1406, size 1, index 0, binding -1, stages 1
diff --git a/Test/baseResults/reflection.vert.out b/Test/baseResults/reflection.vert.out
index 612a0b9..84f690f 100644
--- a/Test/baseResults/reflection.vert.out
+++ b/Test/baseResults/reflection.vert.out
@@ -90,8 +90,8 @@
 deepA[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176
 deepA[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176
 ufDead3: offset -1, type 1406, size 1, index -1, binding -1, stages 1
-abl.foo: offset 0, type 1406, size 1, index 7, binding -1, stages 1
-abl2.foo: offset 0, type 1406, size 1, index 11, binding -1, stages 1
+abl.foo: offset 0, type 1406, size 1, index 4, binding -1, stages 1
+abl2.foo: offset 0, type 1406, size 1, index 8, binding -1, stages 1
 buf1.runtimeArray: offset 4, type 1406, size 4, index 12, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4
 buf2.runtimeArray.c: offset 8, type 1406, size 1, index 13, binding -1, stages 1, topLevelArrayStride 12
 buf3.runtimeArray: offset 4, type 1406, size 0, index 14, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4
@@ -145,24 +145,24 @@
 t[4].v[2].normal: offset 348, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72
 
 Uniform block reflection:
-named: offset -1, type ffffffff, size 304, index -1, binding -1, stages 1, numMembers 10
-nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 1, numMembers 9
-c_nameless: offset -1, type ffffffff, size 112, index -1, binding -1, stages 1, numMembers 5
-nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 1, numMembers 4
-abl[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
-abl[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
-abl[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
-abl[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
-abl2[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
-abl2[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
-abl2[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
-abl2[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 1
-buf1: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 2
-buf2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 4
-buf3: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 2
-buf4: offset -1, type ffffffff, size 4, index -1, binding -1, stages 1, numMembers 4
-nested2: offset -1, type ffffffff, size 208, index -1, binding -1, stages 1, numMembers 15
-VertexCollection: offset -1, type ffffffff, size 400, index -1, binding -1, stages 1, numMembers 31
+named: offset -1, type ffffffff, size 304, index 0, binding -1, stages 1, numMembers 10
+nameless: offset -1, type ffffffff, size 496, index 1, binding -1, stages 1, numMembers 9
+c_nameless: offset -1, type ffffffff, size 112, index 2, binding -1, stages 1, numMembers 5
+nested: offset -1, type ffffffff, size 32, index 3, binding -1, stages 1, numMembers 4
+abl[0]: offset -1, type ffffffff, size 4, index 4, binding -1, stages 1, numMembers 1
+abl[1]: offset -1, type ffffffff, size 4, index 5, binding -1, stages 1, numMembers 1
+abl[2]: offset -1, type ffffffff, size 4, index 6, binding -1, stages 1, numMembers 1
+abl[3]: offset -1, type ffffffff, size 4, index 7, binding -1, stages 1, numMembers 1
+abl2[0]: offset -1, type ffffffff, size 4, index 8, binding -1, stages 1, numMembers 1
+abl2[1]: offset -1, type ffffffff, size 4, index 9, binding -1, stages 1, numMembers 1
+abl2[2]: offset -1, type ffffffff, size 4, index 10, binding -1, stages 1, numMembers 1
+abl2[3]: offset -1, type ffffffff, size 4, index 11, binding -1, stages 1, numMembers 1
+buf1: offset -1, type ffffffff, size 8, index 12, binding -1, stages 1, numMembers 2
+buf2: offset -1, type ffffffff, size 16, index 13, binding -1, stages 1, numMembers 4
+buf3: offset -1, type ffffffff, size 8, index 14, binding -1, stages 1, numMembers 2
+buf4: offset -1, type ffffffff, size 16, index 15, binding -1, stages 1, numMembers 4
+nested2: offset -1, type ffffffff, size 208, index 16, binding -1, stages 1, numMembers 15
+VertexCollection: offset -1, type ffffffff, size 400, index 17, binding -1, stages 1, numMembers 31
 
 Buffer variable reflection:
 
diff --git a/Test/baseResults/remap.basic.dcefunc.frag.out b/Test/baseResults/remap.basic.dcefunc.frag.out
index e985def..c531eba 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 22
 
                               Capability Shader
@@ -12,6 +12,8 @@
                               Name 4  "main"
                               Name 17  "outf4"
                               Name 19  "inf"
+                              Decorate 17(outf4) Location 0
+                              Decorate 19(inf) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/remap.basic.everything.frag.out b/Test/baseResults/remap.basic.everything.frag.out
index 0f7034a..d483f20 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 24969
 
                               Capability Shader
@@ -8,6 +8,8 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 5663  "main" 4539 3773
                               ExecutionMode 5663 OriginUpperLeft
+                              Decorate 4539 Location 0
+                              Decorate 3773 Location 0
                8:             TypeVoid
             1282:             TypeFunction 8
               13:             TypeFloat 32
diff --git a/Test/baseResults/remap.basic.none.frag.out b/Test/baseResults/remap.basic.none.frag.out
index 44790dd..34f64c8 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 22
 
                               Capability Shader
@@ -13,6 +13,8 @@
                               Name 9  "dead_fn("
                               Name 17  "outf4"
                               Name 19  "inf"
+                              Decorate 17(outf4) Location 0
+                              Decorate 19(inf) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/remap.basic.strip.frag.out b/Test/baseResults/remap.basic.strip.frag.out
index 05f16ba..f1d7769 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 22
 
                               Capability Shader
@@ -8,6 +8,8 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 4  "main" 17 19
                               ExecutionMode 4 OriginUpperLeft
+                              Decorate 17 Location 0
+                              Decorate 19 Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
index b9ce55e..88c516f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 24878
 
                               Capability Shader
@@ -17,27 +17,27 @@
                               Decorate 3305 DescriptorSet 0
                               Decorate 3305 Binding 0
                               Decorate 4743 DescriptorSet 0
-                              Decorate 4743 Binding 0
+                              Decorate 4743 Binding 2
                               Decorate 4807 DescriptorSet 0
-                              Decorate 4807 Binding 0
+                              Decorate 4807 Binding 3
                               Decorate 5042 DescriptorSet 0
-                              Decorate 5042 Binding 0
+                              Decorate 5042 Binding 4
                               Decorate 5058 DescriptorSet 0
-                              Decorate 5058 Binding 0
+                              Decorate 5058 Binding 5
                               Decorate 5122 DescriptorSet 0
-                              Decorate 5122 Binding 0
+                              Decorate 5122 Binding 6
                               Decorate 3967 DescriptorSet 0
-                              Decorate 3967 Binding 0
+                              Decorate 3967 Binding 7
                               Decorate 3983 DescriptorSet 0
-                              Decorate 3983 Binding 0
+                              Decorate 3983 Binding 8
                               Decorate 4047 DescriptorSet 0
-                              Decorate 4047 Binding 0
+                              Decorate 4047 Binding 9
                               Decorate 3789 DescriptorSet 0
-                              Decorate 3789 Binding 0
+                              Decorate 3789 Binding 10
                               Decorate 3805 DescriptorSet 0
-                              Decorate 3805 Binding 0
+                              Decorate 3805 Binding 11
                               Decorate 3869 DescriptorSet 0
-                              Decorate 3869 Binding 0
+                              Decorate 3869 Binding 12
                               Decorate 4253 Location 0
                               Decorate 3709 BuiltIn FragDepth
                8:             TypeVoid
diff --git a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
index 71b7de0..465b024 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 198
 
                               Capability Shader
@@ -69,27 +69,27 @@
                               Decorate 49(g_sSamp) DescriptorSet 0
                               Decorate 49(g_sSamp) Binding 0
                               Decorate 60(g_tTex1di4) DescriptorSet 0
-                              Decorate 60(g_tTex1di4) Binding 0
+                              Decorate 60(g_tTex1di4) Binding 2
                               Decorate 73(g_tTex1du4) DescriptorSet 0
-                              Decorate 73(g_tTex1du4) Binding 0
+                              Decorate 73(g_tTex1du4) Binding 3
                               Decorate 83(g_tTex2df4) DescriptorSet 0
-                              Decorate 83(g_tTex2df4) Binding 0
+                              Decorate 83(g_tTex2df4) Binding 4
                               Decorate 94(g_tTex2di4) DescriptorSet 0
-                              Decorate 94(g_tTex2di4) Binding 0
+                              Decorate 94(g_tTex2di4) Binding 5
                               Decorate 105(g_tTex2du4) DescriptorSet 0
-                              Decorate 105(g_tTex2du4) Binding 0
+                              Decorate 105(g_tTex2du4) Binding 6
                               Decorate 117(g_tTex3df4) DescriptorSet 0
-                              Decorate 117(g_tTex3df4) Binding 0
+                              Decorate 117(g_tTex3df4) Binding 7
                               Decorate 128(g_tTex3di4) DescriptorSet 0
-                              Decorate 128(g_tTex3di4) Binding 0
+                              Decorate 128(g_tTex3di4) Binding 8
                               Decorate 138(g_tTex3du4) DescriptorSet 0
-                              Decorate 138(g_tTex3du4) Binding 0
+                              Decorate 138(g_tTex3du4) Binding 9
                               Decorate 151(g_tTexcdf4) DescriptorSet 0
-                              Decorate 151(g_tTexcdf4) Binding 0
+                              Decorate 151(g_tTexcdf4) Binding 10
                               Decorate 160(g_tTexcdi4) DescriptorSet 0
-                              Decorate 160(g_tTexcdi4) Binding 0
+                              Decorate 160(g_tTexcdi4) Binding 11
                               Decorate 169(g_tTexcdu4) DescriptorSet 0
-                              Decorate 169(g_tTexcdu4) Binding 0
+                              Decorate 169(g_tTexcdu4) Binding 12
                               Decorate 188(@entryPointOutput.Color) Location 0
                               Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 195(g_sSamp2d) DescriptorSet 0
diff --git a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
index c65d237..4fb9218 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 198
 
                               Capability Shader
@@ -17,27 +17,27 @@
                               Decorate 49 DescriptorSet 0
                               Decorate 49 Binding 0
                               Decorate 60 DescriptorSet 0
-                              Decorate 60 Binding 0
+                              Decorate 60 Binding 2
                               Decorate 73 DescriptorSet 0
-                              Decorate 73 Binding 0
+                              Decorate 73 Binding 3
                               Decorate 83 DescriptorSet 0
-                              Decorate 83 Binding 0
+                              Decorate 83 Binding 4
                               Decorate 94 DescriptorSet 0
-                              Decorate 94 Binding 0
+                              Decorate 94 Binding 5
                               Decorate 105 DescriptorSet 0
-                              Decorate 105 Binding 0
+                              Decorate 105 Binding 6
                               Decorate 117 DescriptorSet 0
-                              Decorate 117 Binding 0
+                              Decorate 117 Binding 7
                               Decorate 128 DescriptorSet 0
-                              Decorate 128 Binding 0
+                              Decorate 128 Binding 8
                               Decorate 138 DescriptorSet 0
-                              Decorate 138 Binding 0
+                              Decorate 138 Binding 9
                               Decorate 151 DescriptorSet 0
-                              Decorate 151 Binding 0
+                              Decorate 151 Binding 10
                               Decorate 160 DescriptorSet 0
-                              Decorate 160 Binding 0
+                              Decorate 160 Binding 11
                               Decorate 169 DescriptorSet 0
-                              Decorate 169 Binding 0
+                              Decorate 169 Binding 12
                               Decorate 188 Location 0
                               Decorate 192 BuiltIn FragDepth
                               Decorate 195 DescriptorSet 0
diff --git a/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out b/Test/baseResults/remap.hlsl.templatetypes.everything.frag.out
index ea390b5..f1e3535 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): 80008
+// Generated by (magic number): 8000a
 // 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 32b4e7b..226f2c6 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): 80008
+// Generated by (magic number): 8000a
 // 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 26cc3dc..3a521be 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 22855
 
                               Capability Shader
@@ -8,6 +8,8 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 5663  "main" 3773 4539
                               ExecutionMode 5663 OriginUpperLeft
+                              Decorate 3773 Location 0
+                              Decorate 4539 Location 0
                8:             TypeVoid
             1282:             TypeFunction 8
               13:             TypeFloat 32
diff --git a/Test/baseResults/remap.if.none.frag.out b/Test/baseResults/remap.if.none.frag.out
index 48e8587..cb2d31b 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 25
 
                               Capability Shader
@@ -12,6 +12,8 @@
                               Name 4  "main"
                               Name 8  "inf"
                               Name 17  "outf4"
+                              Decorate 8(inf) Location 0
+                              Decorate 17(outf4) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/remap.similar_1a.everything.frag.out b/Test/baseResults/remap.similar_1a.everything.frag.out
index 6d5ce1c..993dc1c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 24916
 
                               Capability Shader
@@ -9,6 +9,9 @@
                               EntryPoint Fragment 5663  "main" 4201 4539 3773
                               ExecutionMode 5663 OriginUpperLeft
                               Decorate 4201 Flat
+                              Decorate 4201 Location 1
+                              Decorate 4539 Location 0
+                              Decorate 3773 Location 0
                8:             TypeVoid
             1282:             TypeFunction 8
               12:             TypeInt 32 1
diff --git a/Test/baseResults/remap.similar_1a.none.frag.out b/Test/baseResults/remap.similar_1a.none.frag.out
index 457f1be..e46b8e1 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 86
 
                               Capability Shader
@@ -23,6 +23,9 @@
                               Name 78  "param"
                               Name 82  "param"
                               Decorate 53(ini4) Flat
+                              Decorate 53(ini4) Location 1
+                              Decorate 73(outf4) Location 0
+                              Decorate 75(inf) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/remap.similar_1b.everything.frag.out b/Test/baseResults/remap.similar_1b.everything.frag.out
index 67425c6..ffe5446 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 24916
 
                               Capability Shader
@@ -9,6 +9,9 @@
                               EntryPoint Fragment 5663  "main" 4201 4539 3773
                               ExecutionMode 5663 OriginUpperLeft
                               Decorate 4201 Flat
+                              Decorate 4201 Location 0
+                              Decorate 4539 Location 0
+                              Decorate 3773 Location 1
                8:             TypeVoid
             1282:             TypeFunction 8
               12:             TypeInt 32 1
diff --git a/Test/baseResults/remap.similar_1b.none.frag.out b/Test/baseResults/remap.similar_1b.none.frag.out
index fe021e0..5f5241c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 91
 
                               Capability Shader
@@ -23,6 +23,9 @@
                               Name 83  "param"
                               Name 87  "param"
                               Decorate 58(ini4) Flat
+                              Decorate 58(ini4) Location 0
+                              Decorate 78(outf4) Location 0
+                              Decorate 80(inf) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/remap.specconst.comp.out b/Test/baseResults/remap.specconst.comp.out
index 80d13b2..2bed3cf 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): 80008
+// Generated by (magic number): 8000a
 // 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 2362f67..443fe68 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): 80008
+// Generated by (magic number): 8000a
 // 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 f8737b9..3347dce 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): 80008
+// Generated by (magic number): 8000a
 // 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 40429f2..bebff93 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 25030
 
                               Capability Shader
@@ -8,6 +8,9 @@
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 5663  "main" 3608 4957 4339 5139
                               ExecutionMode 5663 OriginUpperLeft
+                              Decorate 3608 Location 1
+                              Decorate 4957 Location 0
+                              Decorate 4339 Location 7
                               Decorate 5139 Location 0
                8:             TypeVoid
             1282:             TypeFunction 8
diff --git a/Test/baseResults/remap.uniformarray.none.frag.out b/Test/baseResults/remap.uniformarray.none.frag.out
index 42d55b9..6bd58d2 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 53
 
                               Capability Shader
@@ -16,6 +16,9 @@
                               Name 35  "alpha"
                               Name 47  "gl_FragColor"
                               Name 52  "texSampler2D"
+                              Decorate 14(color) Location 1
+                              Decorate 25(inColor) Location 0
+                              Decorate 35(alpha) Location 7
                               Decorate 47(gl_FragColor) Location 0
                               Decorate 52(texSampler2D) DescriptorSet 0
                               Decorate 52(texSampler2D) Binding 0
diff --git a/Test/baseResults/size b/Test/baseResults/size
index 47364a5..a7b99b9 100644
--- a/Test/baseResults/size
+++ b/Test/baseResults/size
@@ -1 +1 @@
-396288 ../build/install/bin/glslangValidator.exe
+399360 ../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 105bbdb..d512639 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): 80008
+// Generated by (magic number): 8000a
 // 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 77c1565..1dce1ea 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): 80008
+// Generated by (magic number): 8000a
 // 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 29d914f..d7a9d5e 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): 80008
+// Generated by (magic number): 8000a
 // 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 008ef47..0ffffd6 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): 80008
+// Generated by (magic number): 8000a
 // 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 0207ed2..da3b52c 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): 80008
+// Generated by (magic number): 8000a
 // 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 53e672f..018fd0a 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): 80008
+// Generated by (magic number): 8000a
 // 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 d7509b1..68f7e52 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): 80008
+// Generated by (magic number): 8000a
 // 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 2b60625..7dcda62 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): 80008
+// Generated by (magic number): 8000a
 // 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 f06960c..cf5d98a 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 64
 
                               Capability Shader
diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out b/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out
new file mode 100755
index 0000000..835ab13
--- /dev/null
+++ b/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out
@@ -0,0 +1,72 @@
+spv.1.4.OpEntryPoint.opaqueParams.vert
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 45
+
+                              Capability Shader
+                              Capability ImageQuery
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 41 42 43
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 18  "funOpaque(s21;t21;p1;"
+                              Name 15  "s2D"
+                              Name 16  "t2D"
+                              Name 17  "s"
+                              Name 40  "size"
+                              Name 41  "s2D"
+                              Name 42  "t2D"
+                              Name 43  "s"
+                              Decorate 41(s2D) DescriptorSet 0
+                              Decorate 41(s2D) Binding 0
+                              Decorate 42(t2D) DescriptorSet 0
+                              Decorate 42(t2D) Binding 1
+                              Decorate 43(s) DescriptorSet 0
+                              Decorate 43(s) Binding 3
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeImage 6(float) 2D sampled format:Unknown
+               8:             TypeSampledImage 7
+               9:             TypePointer UniformConstant 8
+              10:             TypePointer UniformConstant 7
+              11:             TypeSampler
+              12:             TypePointer UniformConstant 11
+              13:             TypeVector 6(float) 2
+              14:             TypeFunction 13(fvec2) 9(ptr) 10(ptr) 12(ptr)
+              21:             TypeInt 32 1
+              22:     21(int) Constant 0
+              24:             TypeVector 21(int) 2
+              30:    6(float) Constant 1056964608
+              31:   13(fvec2) ConstantComposite 30 30
+              32:             TypeVector 6(float) 4
+              33:    6(float) Constant 0
+              39:             TypePointer Function 13(fvec2)
+         41(s2D):      9(ptr) Variable UniformConstant
+         42(t2D):     10(ptr) Variable UniformConstant
+           43(s):     12(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+        40(size):     39(ptr) Variable Function
+              44:   13(fvec2) FunctionCall 18(funOpaque(s21;t21;p1;) 41(s2D) 42(t2D) 43(s)
+                              Store 40(size) 44
+                              Return
+                              FunctionEnd
+18(funOpaque(s21;t21;p1;):   13(fvec2) Function None 14
+         15(s2D):      9(ptr) FunctionParameter
+         16(t2D):     10(ptr) FunctionParameter
+           17(s):     12(ptr) FunctionParameter
+              19:             Label
+              20:           8 Load 15(s2D)
+              23:           7 Image 20
+              25:   24(ivec2) ImageQuerySizeLod 23 22
+              26:   13(fvec2) ConvertSToF 25
+              27:           7 Load 16(t2D)
+              28:          11 Load 17(s)
+              29:           8 SampledImage 27 28
+              34:   32(fvec4) ImageSampleExplicitLod 29 31 Lod 33
+              35:   13(fvec2) VectorShuffle 34 34 0 1
+              36:   13(fvec2) FMul 26 35
+                              ReturnValue 36
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.4.OpSelect.frag.out b/Test/baseResults/spv.1.4.OpSelect.frag.out
index 6ba00a4..b3a5b4d 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): 80008
+// Generated by (magic number): 8000a
 // 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 e514286..cbec381 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): 80008
+// Generated by (magic number): 8000a
 // 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 98ffdcb..fadde97 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 104
 
                               Capability Shader
@@ -26,6 +26,7 @@
                               Decorate 26(i2D) DescriptorSet 0
                               Decorate 26(i2D) Binding 1
                               Decorate 30(ic2D) Flat
+                              Decorate 30(ic2D) Location 0
                               Decorate 40(ii2D) DescriptorSet 0
                               Decorate 40(ii2D) Binding 12
                               Decorate 52(ui2D) DescriptorSet 0
@@ -36,7 +37,9 @@
                               Decorate 77(ii2DMS) Binding 13
                               Decorate 89(ui2DMS) DescriptorSet 0
                               Decorate 89(ui2DMS) Binding 13
+                              Decorate 100(fragData) Location 0
                               Decorate 103(value) Flat
+                              Decorate 103(value) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.1.4.sparseTexture.frag.out b/Test/baseResults/spv.1.4.sparseTexture.frag.out
index 3b566c7..965f4c8 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 213
 
                               Capability Shader
@@ -49,19 +49,26 @@
                               Name 212  "offsets"
                               Decorate 29(s2D) DescriptorSet 0
                               Decorate 29(s2D) Binding 0
+                              Decorate 33(c2) Location 0
                               Decorate 46(is2D) DescriptorSet 0
-                              Decorate 46(is2D) Binding 0
+                              Decorate 46(is2D) Binding 1
                               Decorate 63(us2D) DescriptorSet 0
-                              Decorate 63(us2D) Binding 0
+                              Decorate 63(us2D) Binding 2
                               Decorate 149(i2D) DescriptorSet 0
-                              Decorate 149(i2D) Binding 0
+                              Decorate 149(i2D) Binding 3
                               Decorate 152(ic2) Flat
+                              Decorate 152(ic2) Location 3
                               Decorate 162(ii2DMS) DescriptorSet 0
-                              Decorate 162(ii2DMS) Binding 0
+                              Decorate 162(ii2DMS) Binding 4
                               Decorate 177(ui3D) DescriptorSet 0
-                              Decorate 177(ui3D) Binding 0
+                              Decorate 177(ui3D) Binding 5
                               Decorate 181(ic3) Flat
+                              Decorate 181(ic3) Location 4
+                              Decorate 189(outColor) Location 0
+                              Decorate 206(c3) Location 1
+                              Decorate 208(c4) Location 2
                               Decorate 212(offsets) Flat
+                              Decorate 212(offsets) Location 5
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.1.4.texture.frag.out b/Test/baseResults/spv.1.4.texture.frag.out
index da3a24f..ac9f72f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 79
 
                               Capability Shader
@@ -21,12 +21,17 @@
                               Name 78  "color"
                               Decorate 15(texSampler2D) DescriptorSet 0
                               Decorate 15(texSampler2D) Binding 0
+                              Decorate 19(coords2D) Location 1
                               Decorate 28(itexSampler2D) DescriptorSet 0
-                              Decorate 28(itexSampler2D) Binding 0
+                              Decorate 28(itexSampler2D) Binding 1
                               Decorate 40(utexSampler2D) DescriptorSet 0
-                              Decorate 40(utexSampler2D) Binding 0
+                              Decorate 40(utexSampler2D) Binding 2
                               Decorate 51(iCoords2D) Flat
+                              Decorate 51(iCoords2D) Location 2
                               Decorate 54(iLod) Flat
+                              Decorate 54(iLod) Location 3
+                              Decorate 76(t) Location 0
+                              Decorate 78(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.100ops.frag.out b/Test/baseResults/spv.100ops.frag.out
index d2b8f3e..42c9995 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 49
 
                               Capability Shader
@@ -22,14 +22,17 @@
                               Decorate 13(face2) RelaxedPrecision
                               Decorate 17(z) RelaxedPrecision
                               Decorate 21(low) RelaxedPrecision
+                              Decorate 21(low) Location 0
                               Decorate 22 RelaxedPrecision
                               Decorate 23 RelaxedPrecision
                               Decorate 25 RelaxedPrecision
                               Decorate 26(high) RelaxedPrecision
+                              Decorate 26(high) Location 1
                               Decorate 27 RelaxedPrecision
                               Decorate 32 RelaxedPrecision
                               Decorate 34 RelaxedPrecision
                               Decorate 37(Color) RelaxedPrecision
+                              Decorate 37(Color) Location 0
                               Decorate 38 RelaxedPrecision
                               Decorate 39 RelaxedPrecision
                               Decorate 40 RelaxedPrecision
diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out
index ca1f9e3..29c7d85 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 205
 
                               Capability Shader
@@ -58,27 +58,34 @@
                               Name 199  "s2DRS"
                               Name 203  "s1D"
                               Name 204  "s2DS"
+                              Decorate 17(o) Location 0
                               Decorate 21(samp2D) DescriptorSet 0
-                              Decorate 21(samp2D) Binding 0
+                              Decorate 21(samp2D) Binding 2
                               Decorate 37(samp2DA) DescriptorSet 0
-                              Decorate 37(samp2DA) Binding 0
+                              Decorate 37(samp2DA) Binding 5
                               Decorate 47(samp2DR) DescriptorSet 0
-                              Decorate 47(samp2DR) Binding 0
+                              Decorate 47(samp2DR) Binding 4
                               Decorate 55(samp2DS) DescriptorSet 0
-                              Decorate 55(samp2DS) Binding 0
+                              Decorate 55(samp2DS) Binding 3
+                              Decorate 68(io) Location 1
                               Decorate 72(Sca) DescriptorSet 0
-                              Decorate 72(Sca) Binding 0
+                              Decorate 72(Sca) Binding 6
+                              Decorate 79(i) Location 0
                               Decorate 87(Isca) DescriptorSet 0
-                              Decorate 87(Isca) Binding 0
+                              Decorate 87(Isca) Binding 7
+                              Decorate 99(uo) Location 2
                               Decorate 103(Usca) DescriptorSet 0
-                              Decorate 103(Usca) Binding 0
+                              Decorate 103(Usca) Binding 8
                               Decorate 118(Scas) DescriptorSet 0
-                              Decorate 118(Scas) Binding 0
+                              Decorate 118(Scas) Binding 9
                               Decorate 167(sampC) DescriptorSet 0
-                              Decorate 167(sampC) Binding 0
+                              Decorate 167(sampC) Binding 1
                               Decorate 173(gl_ClipDistance) BuiltIn ClipDistance
                               Decorate 184(fflat) Flat
+                              Decorate 184(fflat) Location 1
+                              Decorate 185(fsmooth) Location 2
                               Decorate 186(fnop) NoPerspective
+                              Decorate 186(fnop) Location 3
                               Decorate 193(bounds) DescriptorSet 0
                               Decorate 193(bounds) Binding 0
                               Decorate 194(s2D) DescriptorSet 0
diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out
index 45b7510..a517882 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 96
 
                               Capability Shader
@@ -14,6 +14,7 @@
                               EntryPoint Fragment 4  "main" 14 23 28 38
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 140
+                              SourceExtension  "GL_ARB_enhanced_layouts"
                               Name 4  "main"
                               Name 8  "foo("
                               Name 11  "i1"
@@ -36,11 +37,13 @@
                               MemberName 92(bi) 0  "v"
                               Name 95  "bname"
                               Decorate 14(gl_FrontFacing) BuiltIn FrontFacing
+                              Decorate 23(o) Location 0
                               Decorate 28(gl_ClipDistance) BuiltIn ClipDistance
+                              Decorate 38(k) Location 0
                               Decorate 50(sampR) DescriptorSet 0
                               Decorate 50(sampR) Binding 0
                               Decorate 58(sampB) DescriptorSet 0
-                              Decorate 58(sampB) Binding 0
+                              Decorate 58(sampB) Binding 1
                               Decorate 82(samp2Da) DescriptorSet 0
                               Decorate 82(samp2Da) Binding 0
                               Decorate 85 ArrayStride 64
diff --git a/Test/baseResults/spv.150.geom.out b/Test/baseResults/spv.150.geom.out
index ab05846..0ad3337 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 71
 
                               Capability Geometry
@@ -38,8 +38,10 @@
                               MemberName 68(toFragment) 0  "color"
                               Name 70  "toF"
                               Decorate 8(fromVertex) Block
+                              Decorate 10 Location 1
                               Decorate 10 Stream 3
                               Decorate 13(fromVertex) Block
+                              Decorate 18(fromV) Location 0
                               MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
@@ -55,6 +57,7 @@
                               Decorate 51(gl_Layer) Stream 0
                               Decorate 51(gl_Layer) BuiltIn Layer
                               Decorate 68(toFragment) Block
+                              Decorate 70(toF) Location 0
                               Decorate 70(toF) Stream 3
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.150.vert.out b/Test/baseResults/spv.150.vert.out
index 9e1c9f4..2b09f4b 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 63
 
                               Capability Shader
@@ -33,8 +33,12 @@
                               MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
                               Decorate 11(gl_PerVertex) Block
+                              Decorate 17(iv4) Location 0
+                              Decorate 23(ps) Location 1
+                              Decorate 38(s2out) Location 0
                               Decorate 47(s2D) DescriptorSet 0
                               Decorate 47(s2D) Binding 0
+                              Decorate 62(ui) Location 2
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.16bitstorage-int.frag.out b/Test/baseResults/spv.16bitstorage-int.frag.out
index 80733ce..a91b4e4 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 171
 
                               Capability Shader
@@ -93,7 +93,7 @@
                               MemberDecorate 17(B2) 7 Offset 472
                               Decorate 17(B2) BufferBlock
                               Decorate 19(b2) DescriptorSet 0
-                              Decorate 19(b2) Binding 0
+                              Decorate 19(b2) Binding 1
                               Decorate 22 ArrayStride 16
                               MemberDecorate 23(S) 0 Offset 0
                               MemberDecorate 23(S) 1 Offset 4
@@ -126,7 +126,7 @@
                               MemberDecorate 49(B5) 7 Offset 1696
                               Decorate 49(B5) Block
                               Decorate 51(b5) DescriptorSet 0
-                              Decorate 51(b5) Binding 0
+                              Decorate 51(b5) Binding 2
                               MemberDecorate 88(S2) 0 ColMajor
                               MemberDecorate 88(S2) 0 Offset 0
                               MemberDecorate 88(S2) 0 MatrixStride 16
@@ -137,7 +137,7 @@
                               MemberDecorate 90(B4) 1 Offset 80
                               Decorate 90(B4) BufferBlock
                               Decorate 92(b4) DescriptorSet 0
-                              Decorate 92(b4) Binding 0
+                              Decorate 92(b4) Binding 4
                               MemberDecorate 93(S2) 0 RowMajor
                               MemberDecorate 93(S2) 0 Offset 0
                               MemberDecorate 93(S2) 0 MatrixStride 16
@@ -146,7 +146,7 @@
                               MemberDecorate 94(B3) 0 Offset 0
                               Decorate 94(B3) BufferBlock
                               Decorate 96(b3) DescriptorSet 0
-                              Decorate 96(b3) Binding 0
+                              Decorate 96(b3) Binding 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 16 1
diff --git a/Test/baseResults/spv.16bitstorage-uint.frag.out b/Test/baseResults/spv.16bitstorage-uint.frag.out
index d4b1b75..f90d0c1 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 173
 
                               Capability Shader
@@ -93,7 +93,7 @@
                               MemberDecorate 17(B2) 7 Offset 472
                               Decorate 17(B2) BufferBlock
                               Decorate 19(b2) DescriptorSet 0
-                              Decorate 19(b2) Binding 0
+                              Decorate 19(b2) Binding 1
                               Decorate 22 ArrayStride 16
                               MemberDecorate 23(S) 0 Offset 0
                               MemberDecorate 23(S) 1 Offset 4
@@ -126,7 +126,7 @@
                               MemberDecorate 49(B5) 7 Offset 1696
                               Decorate 49(B5) Block
                               Decorate 51(b5) DescriptorSet 0
-                              Decorate 51(b5) Binding 0
+                              Decorate 51(b5) Binding 2
                               MemberDecorate 89(S2) 0 ColMajor
                               MemberDecorate 89(S2) 0 Offset 0
                               MemberDecorate 89(S2) 0 MatrixStride 16
@@ -137,7 +137,7 @@
                               MemberDecorate 91(B4) 1 Offset 80
                               Decorate 91(B4) BufferBlock
                               Decorate 93(b4) DescriptorSet 0
-                              Decorate 93(b4) Binding 0
+                              Decorate 93(b4) Binding 4
                               MemberDecorate 94(S2) 0 RowMajor
                               MemberDecorate 94(S2) 0 Offset 0
                               MemberDecorate 94(S2) 0 MatrixStride 16
@@ -146,7 +146,7 @@
                               MemberDecorate 95(B3) 0 Offset 0
                               Decorate 95(B3) BufferBlock
                               Decorate 97(b3) DescriptorSet 0
-                              Decorate 97(b3) Binding 0
+                              Decorate 97(b3) Binding 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 16 0
diff --git a/Test/baseResults/spv.16bitstorage.frag.out b/Test/baseResults/spv.16bitstorage.frag.out
index c73eb59..2d934f4 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 173
 
                               Capability Shader
@@ -93,7 +93,7 @@
                               MemberDecorate 17(B2) 7 Offset 472
                               Decorate 17(B2) BufferBlock
                               Decorate 19(b2) DescriptorSet 0
-                              Decorate 19(b2) Binding 0
+                              Decorate 19(b2) Binding 1
                               Decorate 22 ArrayStride 16
                               MemberDecorate 23(S) 0 Offset 0
                               MemberDecorate 23(S) 1 Offset 4
@@ -126,7 +126,7 @@
                               MemberDecorate 50(B5) 7 Offset 1696
                               Decorate 50(B5) Block
                               Decorate 52(b5) DescriptorSet 0
-                              Decorate 52(b5) Binding 0
+                              Decorate 52(b5) Binding 2
                               MemberDecorate 88(S2) 0 ColMajor
                               MemberDecorate 88(S2) 0 Offset 0
                               MemberDecorate 88(S2) 0 MatrixStride 16
@@ -137,7 +137,7 @@
                               MemberDecorate 90(B4) 1 Offset 80
                               Decorate 90(B4) BufferBlock
                               Decorate 92(b4) DescriptorSet 0
-                              Decorate 92(b4) Binding 0
+                              Decorate 92(b4) Binding 4
                               MemberDecorate 93(S2) 0 RowMajor
                               MemberDecorate 93(S2) 0 Offset 0
                               MemberDecorate 93(S2) 0 MatrixStride 16
@@ -146,7 +146,7 @@
                               MemberDecorate 94(B3) 0 Offset 0
                               Decorate 94(B3) BufferBlock
                               Decorate 96(b3) DescriptorSet 0
-                              Decorate 96(b3) Binding 0
+                              Decorate 96(b3) Binding 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 16
diff --git a/Test/baseResults/spv.16bitxfb.vert.out b/Test/baseResults/spv.16bitxfb.vert.out
index 96cff79..f4d66ef 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): 80008
+// Generated by (magic number): 8000a
 // 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 2633645..2201788 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 42
 
                               Capability Shader
@@ -21,6 +21,7 @@
                               MemberDecorate 8(gl_PerVertex) 1 BuiltIn PointSize
                               Decorate 8(gl_PerVertex) Block
                               Decorate 14(ps) RelaxedPrecision
+                              Decorate 14(ps) Location 0
                               Decorate 15 RelaxedPrecision
                               Decorate 21(gl_VertexIndex) BuiltIn VertexIndex
                               Decorate 30 RelaxedPrecision
diff --git a/Test/baseResults/spv.300layout.frag.out b/Test/baseResults/spv.300layout.frag.out
index db06955..3b691e2 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 37
 
                               Capability Shader
@@ -21,14 +21,17 @@
                               Decorate 9(c) RelaxedPrecision
                               Decorate 9(c) Location 7
                               Decorate 11(color) RelaxedPrecision
+                              Decorate 11(color) Location 1
                               Decorate 12 RelaxedPrecision
                               MemberDecorate 13(S) 0 RelaxedPrecision
                               MemberDecorate 13(S) 1 RelaxedPrecision
+                              Decorate 15(s) Location 2
                               Decorate 19 RelaxedPrecision
                               Decorate 20 RelaxedPrecision
                               Decorate 26(p) RelaxedPrecision
                               Decorate 26(p) Location 3
                               Decorate 29(pos) RelaxedPrecision
+                              Decorate 29(pos) Location 0
                               Decorate 30 RelaxedPrecision
                               Decorate 33 RelaxedPrecision
                               Decorate 34 RelaxedPrecision
diff --git a/Test/baseResults/spv.300layout.vert.out b/Test/baseResults/spv.300layout.vert.out
index c97d217..3db50b0 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 163
 
                               Capability Shader
@@ -36,6 +36,7 @@
                               MemberName 126(S) 0  "c"
                               MemberName 126(S) 1  "f"
                               Name 128  "s"
+                              Decorate 9(pos) Location 0
                               Decorate 11(p) Location 3
                               MemberDecorate 17(Transform) 0 RowMajor
                               MemberDecorate 17(Transform) 0 Offset 0
@@ -63,17 +64,21 @@
                               MemberDecorate 45(T3) 3 Offset 2048
                               Decorate 45(T3) Block
                               Decorate 47 DescriptorSet 0
-                              Decorate 47 Binding 0
+                              Decorate 47 Binding 2
                               MemberDecorate 78(T2) 0 Offset 0
                               MemberDecorate 78(T2) 1 RowMajor
                               MemberDecorate 78(T2) 1 Offset 16
                               MemberDecorate 78(T2) 1 MatrixStride 16
                               Decorate 78(T2) Block
                               Decorate 80 DescriptorSet 0
-                              Decorate 80 Binding 0
+                              Decorate 80 Binding 1
+                              Decorate 98(color) Location 1
                               Decorate 100(c) Location 7
                               Decorate 108(iout) Flat
+                              Decorate 108(iout) Location 2
+                              Decorate 114(uiuin) Location 0
                               Decorate 120(aiv2) Location 9
+                              Decorate 128(s) Location 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -224,7 +229,7 @@
                               Store 136 134
              139:    138(ptr) AccessChain 47 102 24
              140:   14(fvec3) Load 139
-             144:  143(bvec3) FOrdNotEqual 140 142
+             144:  143(bvec3) FUnordNotEqual 140 142
              145:   137(bool) Any 144
              146:   137(bool) LogicalNot 145
                               SelectionMerge 148 None
diff --git a/Test/baseResults/spv.300layoutp.vert.out b/Test/baseResults/spv.300layoutp.vert.out
index 2b1ef83..315605d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 115
 
                               Capability Shader
@@ -36,6 +36,7 @@
                               MemberName 78(S) 0  "c"
                               MemberName 78(S) 1  "f"
                               Name 80  "s"
+                              Decorate 9(pos) Location 0
                               Decorate 11(p) Location 3
                               MemberDecorate 17(Transform) 0 RowMajor
                               MemberDecorate 17(Transform) 0 Offset 0
@@ -63,17 +64,20 @@
                               MemberDecorate 33(T3) 3 Offset 160
                               Decorate 33(T3) Block
                               Decorate 35 DescriptorSet 0
-                              Decorate 35 Binding 0
+                              Decorate 35 Binding 2
                               MemberDecorate 42(T2) 0 Offset 0
                               MemberDecorate 42(T2) 1 RowMajor
                               MemberDecorate 42(T2) 1 Offset 16
                               MemberDecorate 42(T2) 1 MatrixStride 16
                               Decorate 42(T2) Block
                               Decorate 44 DescriptorSet 0
-                              Decorate 44 Binding 0
+                              Decorate 44 Binding 1
+                              Decorate 50(color) Location 1
                               Decorate 52(c) Location 7
                               Decorate 60(iout) Flat
+                              Decorate 60(iout) Location 2
                               Decorate 72(aiv2) Location 9
+                              Decorate 80(s) Location 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -176,7 +180,7 @@
                               Store 88 86
               91:     90(ptr) AccessChain 35 54 24
               92:   14(fvec3) Load 91
-              96:   95(bvec3) FOrdNotEqual 92 94
+              96:   95(bvec3) FUnordNotEqual 92 94
               97:    89(bool) Any 96
               98:    89(bool) LogicalNot 97
                               SelectionMerge 100 None
diff --git a/Test/baseResults/spv.310.bitcast.frag.out b/Test/baseResults/spv.310.bitcast.frag.out
index e4f62b4..b7f823d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 153
 
                               Capability Shader
@@ -26,34 +26,46 @@
                               Name 139  "u3"
                               Name 148  "u4"
                               Decorate 14(f1) RelaxedPrecision
+                              Decorate 14(f1) Location 8
                               Decorate 15 RelaxedPrecision
                               Decorate 26(f2) RelaxedPrecision
+                              Decorate 26(f2) Location 9
                               Decorate 27 RelaxedPrecision
                               Decorate 37(f3) RelaxedPrecision
+                              Decorate 37(f3) Location 10
                               Decorate 38 RelaxedPrecision
+                              Decorate 48(f4) Location 11
                               Decorate 57 RelaxedPrecision
                               Decorate 64 RelaxedPrecision
                               Decorate 72 RelaxedPrecision
                               Decorate 89(i1) RelaxedPrecision
                               Decorate 89(i1) Flat
+                              Decorate 89(i1) Location 0
                               Decorate 90 RelaxedPrecision
                               Decorate 98(i2) RelaxedPrecision
                               Decorate 98(i2) Flat
+                              Decorate 98(i2) Location 1
                               Decorate 99 RelaxedPrecision
                               Decorate 107(i3) RelaxedPrecision
                               Decorate 107(i3) Flat
+                              Decorate 107(i3) Location 2
                               Decorate 108 RelaxedPrecision
                               Decorate 116(i4) Flat
+                              Decorate 116(i4) Location 3
                               Decorate 122(u1) RelaxedPrecision
                               Decorate 122(u1) Flat
+                              Decorate 122(u1) Location 4
                               Decorate 123 RelaxedPrecision
                               Decorate 130(u2) RelaxedPrecision
                               Decorate 130(u2) Flat
+                              Decorate 130(u2) Location 5
                               Decorate 131 RelaxedPrecision
                               Decorate 139(u3) RelaxedPrecision
                               Decorate 139(u3) Flat
+                              Decorate 139(u3) Location 6
                               Decorate 140 RelaxedPrecision
                               Decorate 148(u4) Flat
+                              Decorate 148(u4) Location 7
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
index 3b90d41..931d038 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 72
 
                               Capability Shader
@@ -43,13 +43,13 @@
                               MemberDecorate 23(outbna) 1 Offset 16
                               Decorate 23(outbna) BufferBlock
                               Decorate 25(outbnamena) DescriptorSet 0
-                              Decorate 25(outbnamena) Binding 0
+                              Decorate 25(outbnamena) Binding 1
                               Decorate 47 ArrayStride 16
                               MemberDecorate 48(outs) 0 Offset 0
                               MemberDecorate 48(outs) 1 Offset 16
                               Decorate 48(outs) BufferBlock
                               Decorate 50(outnames) DescriptorSet 0
-                              Decorate 50(outnames) Binding 0
+                              Decorate 50(outnames) Binding 2
                               Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 65(gl_DeviceIndex) BuiltIn DeviceIndex
                               Decorate 71 BuiltIn WorkgroupSize
diff --git a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
index 6881084..9bc86d0 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): 80008
+// Generated by (magic number): 8000a
 // 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 79e03b6..1166508 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): 80008
+// Generated by (magic number): 8000a
 // 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 448aa5e..57f4365 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): 80008
+// Generated by (magic number): 8000a
 // 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 b2f4a16..2e7b2f5 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 1118
 
                               Capability Shader
@@ -53,19 +53,26 @@
                               Name 1107  "u"
                               Name 1115  "id"
                               Name 1116  "gl_PrimitiveID"
+                              Decorate 13(outp) Location 1
                               Decorate 17(u2drs) DescriptorSet 0
-                              Decorate 17(u2drs) Binding 0
+                              Decorate 17(u2drs) Binding 3
                               Decorate 1025(arrayedSampler) DescriptorSet 0
                               Decorate 1025(arrayedSampler) Binding 0
                               Decorate 1027(i) Flat
+                              Decorate 1027(i) Location 1
+                              Decorate 1033(c2D) Location 0
                               Decorate 1038(gl_ClipDistance) BuiltIn ClipDistance
+                              Decorate 1050(uoutp) Location 3
                               Decorate 1054(samp2dr) DescriptorSet 0
-                              Decorate 1054(samp2dr) Binding 0
+                              Decorate 1054(samp2dr) Binding 1
+                              Decorate 1076(ioutp) Location 2
                               Decorate 1080(isamp2DA) DescriptorSet 0
-                              Decorate 1080(isamp2DA) Binding 0
+                              Decorate 1080(isamp2DA) Binding 2
                               Decorate 1097(gl_FragCoord) BuiltIn FragCoord
                               Decorate 1099(vl2) Location 6
+                              Decorate 1105(uo) Location 0
                               Decorate 1107(u) Flat
+                              Decorate 1107(u) Location 2
                               Decorate 1116(gl_PrimitiveID) Flat
                               Decorate 1116(gl_PrimitiveID) BuiltIn PrimitiveId
                2:             TypeVoid
diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
index e84b420..a07c9b1 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 92
 
                               Capability Tessellation
@@ -59,6 +59,9 @@
                               Decorate 72(gl_TessLevelInner) Patch
                               Decorate 72(gl_TessLevelInner) BuiltIn TessLevelInner
                               Decorate 78(patchOut) Patch
+                              Decorate 78(patchOut) Location 0
+                              Decorate 82(inb) Location 0
+                              Decorate 83(ind) Location 1
                               Decorate 86(ivla) Location 3
                               Decorate 87(ivlb) Location 4
                               Decorate 90(ovla) Location 3
diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out
index 5705fbd..58f4b97 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 96
 
                               Capability Tessellation
@@ -68,8 +68,13 @@
                               MemberDecorate 64(gl_PerVertex) 2 BuiltIn ClipDistance
                               Decorate 64(gl_PerVertex) Block
                               Decorate 75(patchIn) Patch
+                              Decorate 75(patchIn) Location 0
+                              Decorate 79(inb) Location 1
+                              Decorate 80(ind) Location 2
                               Decorate 81(testblb) Block
+                              Decorate 84(blb) Location 3
                               Decorate 85(testbld) Block
+                              Decorate 88(bld) Location 4
                               Decorate 91(ivla) Location 23
                               Decorate 92(ivlb) Location 24
                               Decorate 95(ovla) Location 23
diff --git a/Test/baseResults/spv.420.geom.out b/Test/baseResults/spv.420.geom.out
index c75ae5d..17f2749 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 72
 
                               Capability Geometry
@@ -42,6 +42,7 @@
                               Decorate 33(gl_InvocationID) BuiltIn InvocationId
                               Decorate 41(s2D) DescriptorSet 0
                               Decorate 41(s2D) Binding 0
+                              Decorate 46(coord) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.430.frag.out b/Test/baseResults/spv.430.frag.out
index 96ab1e9..15da382 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 24
 
                               Capability Shader
@@ -15,6 +15,7 @@
                               Name 9  "color"
                               Name 14  "gl_Layer"
                               Name 19  "gl_ViewportIndex"
+                              Decorate 9(color) Location 0
                               Decorate 14(gl_Layer) Flat
                               Decorate 14(gl_Layer) BuiltIn Layer
                               Decorate 19(gl_ViewportIndex) Flat
diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out
index 89e5b16..a6b2e34 100644
--- a/Test/baseResults/spv.430.vert.out
+++ b/Test/baseResults/spv.430.vert.out
@@ -1,6 +1,7 @@
 spv.430.vert
+Validation failed
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 66
 
                               Capability Shader
@@ -41,7 +42,12 @@
                               Name 65  "outMS"
                               MemberDecorate 10(gl_PerVertex) 0 BuiltIn ClipDistance
                               Decorate 10(gl_PerVertex) Block
+                              Decorate 23(bad) Location 0
                               Decorate 34(badorder3) Flat
+                              Decorate 34(badorder3) Location 1
+                              Decorate 38(f) Location 11
+                              Decorate 41(badorder) Location 10
+                              Decorate 42(badorder2) Location 0
                               Decorate 42(badorder2) Invariant
                               MemberDecorate 43(boundblock) 0 Offset 0
                               Decorate 43(boundblock) Block
@@ -62,6 +68,7 @@
                               Decorate 62(var) Location 0
                               MemberDecorate 63(MS) 0 Location 17
                               Decorate 63(MS) Block
+                              Decorate 65(outMS) Location 2
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.450.geom.out b/Test/baseResults/spv.450.geom.out
index 1e7e8c5..3e7ac45 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): 80008
+// Generated by (magic number): 8000a
 // 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 31c7b4d..0925119 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 21
 
                               Capability Tessellation
@@ -24,6 +24,7 @@
                               MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
                               Decorate 11(gl_PerVertex) Block
                               Decorate 20(patchOut) Patch
+                              Decorate 20(patchOut) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.450.tesc.out b/Test/baseResults/spv.450.tesc.out
index 0c22d9a..c18ab3f 100644
--- a/Test/baseResults/spv.450.tesc.out
+++ b/Test/baseResults/spv.450.tesc.out
@@ -1,6 +1,7 @@
 spv.450.tesc
+Validation failed
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 45
 
                               Capability Tessellation
@@ -72,6 +73,7 @@
                               MemberDecorate 42(bn) 2 Patch
                               MemberDecorate 42(bn) 2 Location 25
                               Decorate 42(bn) Block
+                              Decorate 44 Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.460.comp.out b/Test/baseResults/spv.460.comp.out
index 0925674..d53efde 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): 80008
+// Generated by (magic number): 8000a
 // 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 067bd43..a8bec34 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 32
 
                               Capability Shader
@@ -16,6 +16,7 @@
                               Name 8  "aui"
                               Name 10  "ui"
                               Decorate 8(aui) Offset 0
+                              Decorate 8(aui) DescriptorSet 0
                               Decorate 8(aui) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.460.vert.out b/Test/baseResults/spv.460.vert.out
index a73b7e1..e15f364 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.8bit-16bit-construction.frag.out b/Test/baseResults/spv.8bit-16bit-construction.frag.out
index 6cb9dc1..4eb9021 100644
--- a/Test/baseResults/spv.8bit-16bit-construction.frag.out
+++ b/Test/baseResults/spv.8bit-16bit-construction.frag.out
@@ -1,7 +1,7 @@
 spv.8bit-16bit-construction.frag
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 43
 
                               Capability Shader
diff --git a/Test/baseResults/spv.8bitstorage-int.frag.out b/Test/baseResults/spv.8bitstorage-int.frag.out
index 54a47af..00ef309 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 171
 
                               Capability Shader
@@ -92,7 +92,7 @@
                               MemberDecorate 17(B2) 7 Offset 236
                               Decorate 17(B2) BufferBlock
                               Decorate 19(b2) DescriptorSet 0
-                              Decorate 19(b2) Binding 0
+                              Decorate 19(b2) Binding 1
                               Decorate 22 ArrayStride 16
                               MemberDecorate 23(S) 0 Offset 0
                               MemberDecorate 23(S) 1 Offset 2
@@ -125,7 +125,7 @@
                               MemberDecorate 49(B5) 7 Offset 1696
                               Decorate 49(B5) Block
                               Decorate 51(b5) DescriptorSet 0
-                              Decorate 51(b5) Binding 0
+                              Decorate 51(b5) Binding 2
                               MemberDecorate 88(S2) 0 ColMajor
                               MemberDecorate 88(S2) 0 Offset 0
                               MemberDecorate 88(S2) 0 MatrixStride 16
@@ -136,7 +136,7 @@
                               MemberDecorate 90(B4) 1 Offset 80
                               Decorate 90(B4) BufferBlock
                               Decorate 92(b4) DescriptorSet 0
-                              Decorate 92(b4) Binding 0
+                              Decorate 92(b4) Binding 4
                               MemberDecorate 93(S2) 0 RowMajor
                               MemberDecorate 93(S2) 0 Offset 0
                               MemberDecorate 93(S2) 0 MatrixStride 16
@@ -145,7 +145,7 @@
                               MemberDecorate 94(B3) 0 Offset 0
                               Decorate 94(B3) BufferBlock
                               Decorate 96(b3) DescriptorSet 0
-                              Decorate 96(b3) Binding 0
+                              Decorate 96(b3) Binding 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 8 1
diff --git a/Test/baseResults/spv.8bitstorage-ssbo.vert.out b/Test/baseResults/spv.8bitstorage-ssbo.vert.out
index 274639b..863eb68 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): 80008
+// Generated by (magic number): 8000a
 // 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 af95a76..c64945f 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): 80008
+// Generated by (magic number): 8000a
 // 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 6565882..5809991 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 173
 
                               Capability Shader
@@ -92,7 +92,7 @@
                               MemberDecorate 17(B2) 7 Offset 236
                               Decorate 17(B2) BufferBlock
                               Decorate 19(b2) DescriptorSet 0
-                              Decorate 19(b2) Binding 0
+                              Decorate 19(b2) Binding 1
                               Decorate 22 ArrayStride 16
                               MemberDecorate 23(S) 0 Offset 0
                               MemberDecorate 23(S) 1 Offset 2
@@ -125,7 +125,7 @@
                               MemberDecorate 49(B5) 7 Offset 1696
                               Decorate 49(B5) Block
                               Decorate 51(b5) DescriptorSet 0
-                              Decorate 51(b5) Binding 0
+                              Decorate 51(b5) Binding 2
                               MemberDecorate 89(S2) 0 ColMajor
                               MemberDecorate 89(S2) 0 Offset 0
                               MemberDecorate 89(S2) 0 MatrixStride 16
@@ -136,7 +136,7 @@
                               MemberDecorate 91(B4) 1 Offset 80
                               Decorate 91(B4) BufferBlock
                               Decorate 93(b4) DescriptorSet 0
-                              Decorate 93(b4) Binding 0
+                              Decorate 93(b4) Binding 4
                               MemberDecorate 94(S2) 0 RowMajor
                               MemberDecorate 94(S2) 0 Offset 0
                               MemberDecorate 94(S2) 0 MatrixStride 16
@@ -145,7 +145,7 @@
                               MemberDecorate 95(B3) 0 Offset 0
                               Decorate 95(B3) BufferBlock
                               Decorate 97(b3) DescriptorSet 0
-                              Decorate 97(b3) Binding 0
+                              Decorate 97(b3) Binding 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 8 0
diff --git a/Test/baseResults/spv.AnyHitShader.rahit.out b/Test/baseResults/spv.AnyHitShader.rahit.out
index 6bef52d..755d60e 100644
--- a/Test/baseResults/spv.AnyHitShader.rahit.out
+++ b/Test/baseResults/spv.AnyHitShader.rahit.out
@@ -1,6 +1,6 @@
 spv.AnyHitShader.rahit
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 81
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.AofA.frag.out b/Test/baseResults/spv.AofA.frag.out
index c9f8b46..57cdcb0 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 104
 
                               Capability Shader
@@ -30,9 +30,15 @@
                               Name 94  "uAofA"
                               MemberName 94(uAofA) 0  "f"
                               Name 98  "nameAofA"
+                              Decorate 39(outfloat) Location 0
+                              Decorate 44(g5) Location 1
                               Decorate 68(i) Flat
+                              Decorate 68(i) Location 36
                               Decorate 70(j) Flat
+                              Decorate 70(j) Location 37
                               Decorate 72(k) Flat
+                              Decorate 72(k) Location 38
+                              Decorate 78(infloat) Location 0
                               Decorate 92 ArrayStride 16
                               Decorate 93 ArrayStride 64
                               MemberDecorate 94(uAofA) 0 Offset 0
diff --git a/Test/baseResults/spv.ClosestHitShader.rchit.out b/Test/baseResults/spv.ClosestHitShader.rchit.out
index cefdc50..63039dd 100644
--- a/Test/baseResults/spv.ClosestHitShader.rchit.out
+++ b/Test/baseResults/spv.ClosestHitShader.rchit.out
@@ -1,6 +1,6 @@
 spv.ClosestHitShader.rchit
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 88
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.GeometryShaderPassthrough.geom.out b/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
index 7e62c57..4b29238 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 15
 
                               Capability Geometry
@@ -27,6 +27,7 @@
                               Decorate 8(gl_PerVertex) Block
                               Decorate 10 PassthroughNV
                               Decorate 12(Inputs) Block
+                              Decorate 14 Location 0
                               Decorate 14 PassthroughNV
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.IntersectShader.rint.out b/Test/baseResults/spv.IntersectShader.rint.out
index bf99241..7b0058c 100644
--- a/Test/baseResults/spv.IntersectShader.rint.out
+++ b/Test/baseResults/spv.IntersectShader.rint.out
@@ -1,6 +1,6 @@
 spv.IntersectShader.rint
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 71
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.MissShader.rmiss.out b/Test/baseResults/spv.MissShader.rmiss.out
index b811044..d0eeb01 100644
--- a/Test/baseResults/spv.MissShader.rmiss.out
+++ b/Test/baseResults/spv.MissShader.rmiss.out
@@ -1,6 +1,6 @@
 spv.MissShader.rmiss
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 60
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.OVR_multiview.vert.out b/Test/baseResults/spv.OVR_multiview.vert.out
index 66168dc..90afed2 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): 80008
+// Generated by (magic number): 8000a
 // 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 ad54f6c..a856e6e 100644
--- a/Test/baseResults/spv.Operations.frag.out
+++ b/Test/baseResults/spv.Operations.frag.out
@@ -1,6 +1,6 @@
 spv.Operations.frag
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 583
 
                               Capability Shader
@@ -33,10 +33,17 @@
                               Name 564  "m2"
                               Name 580  "uiv4"
                               Name 582  "ub"
+                              Decorate 11(uv4) Location 1
                               Decorate 22(ui) Flat
+                              Decorate 22(ui) Location 3
+                              Decorate 220(uf) Location 2
                               Decorate 296(uui) Flat
+                              Decorate 296(uui) Location 5
                               Decorate 314(uuv4) Flat
+                              Decorate 314(uuv4) Location 4
+                              Decorate 539(FragColor) Location 0
                               Decorate 580(uiv4) Flat
+                              Decorate 580(uiv4) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -681,9 +688,9 @@
              502:               Label
              504:    6(float)   Load 196(f)
              505:    6(float)   Load 220(uf)
-             506:   186(bool)   FOrdNotEqual 504 505
+             506:   186(bool)   FUnordNotEqual 504 505
              507:    6(float)   Load 196(f)
-             509:   186(bool)   FOrdNotEqual 507 508
+             509:   186(bool)   FUnordNotEqual 507 508
              510:   186(bool)   LogicalAnd 506 509
                                 Branch 503
              503:             Label
diff --git a/Test/baseResults/spv.RayCallable.rcall.out b/Test/baseResults/spv.RayCallable.rcall.out
index b5e25be..f59d36f 100644
--- a/Test/baseResults/spv.RayCallable.rcall.out
+++ b/Test/baseResults/spv.RayCallable.rcall.out
@@ -1,6 +1,6 @@
 spv.RayCallable.rcall
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 30
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.RayConstants.rgen.out b/Test/baseResults/spv.RayConstants.rgen.out
index 97b47b7..c4085fe 100644
--- a/Test/baseResults/spv.RayConstants.rgen.out
+++ b/Test/baseResults/spv.RayConstants.rgen.out
@@ -1,6 +1,6 @@
 spv.RayConstants.rgen
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 27
 
                               Capability RayTracingNV
diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out
index 47b7c92..363b3dd 100644
--- a/Test/baseResults/spv.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.RayGenShader.rgen.out
@@ -1,6 +1,6 @@
 spv.RayGenShader.rgen
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 54
 
                               Capability RayTracingNV
@@ -31,6 +31,8 @@
                               MemberDecorate 37(block) 0 Offset 0
                               MemberDecorate 37(block) 1 Offset 16
                               Decorate 37(block) BufferBlock
+                              Decorate 39 DescriptorSet 0
+                              Decorate 39 Binding 2
                               Decorate 50(accNV1) DescriptorSet 0
                               Decorate 50(accNV1) Binding 1
                               Decorate 53(payload) Location 0
diff --git a/Test/baseResults/spv.RayGenShader11.rgen.out b/Test/baseResults/spv.RayGenShader11.rgen.out
index 0bbcab9..195071f 100755
--- a/Test/baseResults/spv.RayGenShader11.rgen.out
+++ b/Test/baseResults/spv.RayGenShader11.rgen.out
@@ -1,6 +1,6 @@
 spv.RayGenShader11.rgen
 // Module Version 10300
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 53
 
                               Capability RayTracingNV
@@ -30,6 +30,8 @@
                               MemberDecorate 37(block) 0 Offset 0
                               MemberDecorate 37(block) 1 Offset 16
                               Decorate 37(block) Block
+                              Decorate 39 DescriptorSet 0
+                              Decorate 39 Binding 1
                               Decorate 52(payload) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.RayGenShaderArray.rgen.out b/Test/baseResults/spv.RayGenShaderArray.rgen.out
index ce5f016..fef54aa 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 89
 
                               Capability ShaderNonUniformEXT
@@ -37,6 +37,8 @@
                               MemberDecorate 34(block) 1 Offset 16
                               MemberDecorate 34(block) 2 Offset 28
                               Decorate 34(block) BufferBlock
+                              Decorate 36 DescriptorSet 0
+                              Decorate 36 Binding 2
                               Decorate 60(accNV1) DescriptorSet 0
                               Decorate 60(accNV1) Binding 1
                               Decorate 75 DecorationNonUniformEXT
diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out
index c5c71a5..753688f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 222
 
                               Capability Shader
@@ -71,6 +71,7 @@
                               Name 219  "param"
                               Decorate 69(OutColor) Location 0
                               Decorate 170(u) Flat
+                              Decorate 170(u) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.aggOps.frag.out b/Test/baseResults/spv.aggOps.frag.out
index 976c747..05b14ea 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 215
 
                               Capability Shader
@@ -44,6 +44,8 @@
                               Name 97  "samp2D"
                               Name 101  "coord"
                               Name 213  "color"
+                              Decorate 16(u) Location 1
+                              Decorate 41(w) Location 2
                               MemberDecorate 55(s1) 0 Offset 0
                               MemberDecorate 55(s1) 1 Offset 4
                               MemberDecorate 56(s2) 0 Offset 0
@@ -52,7 +54,7 @@
                               MemberDecorate 57(ub1) 0 Offset 0
                               Decorate 57(ub1) Block
                               Decorate 59(uName1) DescriptorSet 0
-                              Decorate 59(uName1) Binding 0
+                              Decorate 59(uName1) Binding 1
                               MemberDecorate 64(s1) 0 Offset 0
                               MemberDecorate 64(s1) 1 Offset 4
                               MemberDecorate 65(s2) 0 Offset 0
@@ -61,14 +63,16 @@
                               MemberDecorate 66(ub2) 0 Offset 0
                               Decorate 66(ub2) BufferBlock
                               Decorate 68(uName2) DescriptorSet 0
-                              Decorate 68(uName2) Binding 0
+                              Decorate 68(uName2) Binding 2
                               Decorate 97(samp2D) DescriptorSet 0
                               Decorate 97(samp2D) Binding 0
                               Decorate 101(coord) RelaxedPrecision
+                              Decorate 101(coord) Location 0
                               Decorate 102 RelaxedPrecision
                               Decorate 107 RelaxedPrecision
                               Decorate 108 RelaxedPrecision
                               Decorate 129 RelaxedPrecision
+                              Decorate 213(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -208,7 +212,7 @@
              116:             Label
              120:   14(fvec4) Load 16(u)
              121:   14(fvec4) Load 93(v)
-             122:  112(bvec4) FOrdNotEqual 120 121
+             122:  112(bvec4) FUnordNotEqual 120 121
              123:    72(bool) Any 122
                               SelectionMerge 125 None
                               BranchConditional 123 124 125
@@ -279,7 +283,7 @@
              182:    72(bool) INotEqual 180 181
              183:    7(float) CompositeExtract 178 1
              184:    7(float) CompositeExtract 179 1
-             185:    72(bool) FOrdNotEqual 183 184
+             185:    72(bool) FUnordNotEqual 183 184
              186:    72(bool) LogicalOr 182 185
              187:       8(s1) CompositeExtract 176 1
              188:       8(s1) CompositeExtract 177 1
@@ -288,7 +292,7 @@
              191:    72(bool) INotEqual 189 190
              192:    7(float) CompositeExtract 187 1
              193:    7(float) CompositeExtract 188 1
-             194:    72(bool) FOrdNotEqual 192 193
+             194:    72(bool) FUnordNotEqual 192 193
              195:    72(bool) LogicalOr 191 194
              196:    72(bool) LogicalOr 186 195
              197:       8(s1) CompositeExtract 176 2
@@ -298,7 +302,7 @@
              201:    72(bool) INotEqual 199 200
              202:    7(float) CompositeExtract 197 1
              203:    7(float) CompositeExtract 198 1
-             204:    72(bool) FOrdNotEqual 202 203
+             204:    72(bool) FUnordNotEqual 202 203
              205:    72(bool) LogicalOr 201 204
              206:    72(bool) LogicalOr 196 205
                               SelectionMerge 208 None
diff --git a/Test/baseResults/spv.always-discard.frag.out b/Test/baseResults/spv.always-discard.frag.out
index fb4529e..ed21b38 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 84
 
                               Capability Shader
@@ -18,6 +18,7 @@
                               Name 30  "y"
                               Name 36  "radius"
                               Name 59  "gl_FragColor"
+                              Decorate 21(tex_coord) Location 0
                               Decorate 59(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.always-discard2.frag.out b/Test/baseResults/spv.always-discard2.frag.out
index 2d8f66e..5e7ac9f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 40
 
                               Capability Shader
@@ -17,6 +17,7 @@
                               Name 21  "tex_coord"
                               Name 30  "y"
                               Name 38  "gl_FragColor"
+                              Decorate 21(tex_coord) Location 0
                               Decorate 38(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.arbPostDepthCoverage.frag.out b/Test/baseResults/spv.arbPostDepthCoverage.frag.out
index d62c677..9b911cf 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): 80008
+// Generated by (magic number): 8000a
 // 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 08bd830..e74066c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 74
 
                               Capability Shader
@@ -30,8 +30,10 @@
                               Name 72  "arrY"
                               Name 73  "arrZ"
                               Decorate 20(counter) Offset 0
+                              Decorate 20(counter) DescriptorSet 0
                               Decorate 20(counter) Binding 0
                               Decorate 27(countArr) Offset 4
+                              Decorate 27(countArr) DescriptorSet 0
                               Decorate 27(countArr) Binding 0
                               MemberDecorate 62(dataSSB) 0 Restrict
                               MemberDecorate 62(dataSSB) 0 Offset 0
diff --git a/Test/baseResults/spv.atomicFloat.comp.out b/Test/baseResults/spv.atomicFloat.comp.out
new file mode 100755
index 0000000..3799557
--- /dev/null
+++ b/Test/baseResults/spv.atomicFloat.comp.out
@@ -0,0 +1,658 @@
+spv.atomicFloat.comp
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 470
+
+                              Capability Shader
+                              Capability Float64
+                              Capability ImageCubeArray
+                              Capability ImageRect
+                              Capability Image1D
+                              Capability VulkanMemoryModelKHR
+                              Capability VulkanMemoryModelDeviceScopeKHR
+                              Capability AtomicFloat32AddEXT
+                              Capability AtomicFloat64AddEXT
+                              Extension  "SPV_EXT_shader_atomic_float_add"
+                              Extension  "SPV_KHR_vulkan_memory_model"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical VulkanKHR
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 16 16 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_atomic_float"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              Name 4  "main"
+                              Name 8  "resultf"
+                              Name 11  "atomf"
+                              Name 25  "Buffer"
+                              MemberName 25(Buffer) 0  "dataf"
+                              MemberName 25(Buffer) 1  "datad"
+                              Name 27  "buf"
+                              Name 34  "resultd"
+                              Name 37  "atomd"
+                              Name 143  "fimage1D"
+                              Name 189  "fimage1DArray"
+                              Name 232  "fimage2D"
+                              Name 270  "fimage2DRect"
+                              Name 308  "fimage2DArray"
+                              Name 352  "fimageCube"
+                              Name 392  "fimageCubeArray"
+                              Name 430  "fimage3D"
+                              MemberDecorate 25(Buffer) 0 Offset 0
+                              MemberDecorate 25(Buffer) 1 Offset 8
+                              Decorate 25(Buffer) BufferBlock
+                              Decorate 27(buf) DescriptorSet 0
+                              Decorate 27(buf) Binding 0
+                              Decorate 143(fimage1D) Location 0
+                              Decorate 143(fimage1D) DescriptorSet 0
+                              Decorate 143(fimage1D) Binding 0
+                              Decorate 189(fimage1DArray) Location 1
+                              Decorate 189(fimage1DArray) DescriptorSet 0
+                              Decorate 189(fimage1DArray) Binding 1
+                              Decorate 232(fimage2D) Location 2
+                              Decorate 232(fimage2D) DescriptorSet 0
+                              Decorate 232(fimage2D) Binding 2
+                              Decorate 270(fimage2DRect) Location 4
+                              Decorate 270(fimage2DRect) DescriptorSet 0
+                              Decorate 270(fimage2DRect) Binding 4
+                              Decorate 308(fimage2DArray) Location 3
+                              Decorate 308(fimage2DArray) DescriptorSet 0
+                              Decorate 308(fimage2DArray) Binding 3
+                              Decorate 352(fimageCube) Location 5
+                              Decorate 352(fimageCube) DescriptorSet 0
+                              Decorate 352(fimageCube) Binding 5
+                              Decorate 392(fimageCubeArray) Location 6
+                              Decorate 392(fimageCubeArray) DescriptorSet 0
+                              Decorate 392(fimageCubeArray) Binding 6
+                              Decorate 430(fimage3D) Location 7
+                              Decorate 430(fimage3D) DescriptorSet 0
+                              Decorate 430(fimage3D) Binding 9
+                              Decorate 469 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:    6(float) Constant 0
+              10:             TypePointer Workgroup 6(float)
+       11(atomf):     10(ptr) Variable Workgroup
+              12:    6(float) Constant 1077936128
+              13:             TypeInt 32 0
+              14:     13(int) Constant 5
+              15:     13(int) Constant 0
+              17:    6(float) Constant 1083179008
+              18:             TypeInt 32 1
+              19:     18(int) Constant 1
+              20:     18(int) Constant 64
+              21:     18(int) Constant 0
+              22:     13(int) Constant 64
+              24:             TypeFloat 64
+      25(Buffer):             TypeStruct 6(float) 24(float64_t)
+              26:             TypePointer Uniform 25(Buffer)
+         27(buf):     26(ptr) Variable Uniform
+              28:             TypePointer Uniform 6(float)
+              33:             TypePointer Function 24(float64_t)
+              35:24(float64_t) Constant 0 0
+              36:             TypePointer Workgroup 24(float64_t)
+       37(atomd):     36(ptr) Variable Workgroup
+              38:24(float64_t) Constant 0 1074266112
+              40:24(float64_t) Constant 0 1074921472
+              42:             TypePointer Uniform 24(float64_t)
+              57:     18(int) Constant 256
+              58:     13(int) Constant 256
+             141:             TypeImage 6(float) 1D nonsampled format:R32f
+             142:             TypePointer UniformConstant 141
+   143(fimage1D):    142(ptr) Variable UniformConstant
+             144:    6(float) Constant 1073741824
+             145:             TypePointer Image 6(float)
+             147:     13(int) Constant 32768
+             149:     13(int) Constant 2
+             155:     18(int) Constant 2048
+             157:     13(int) Constant 2048
+             164:    6(float) Constant 1082130432
+             179:     18(int) Constant 2
+             187:             TypeImage 6(float) 1D array nonsampled format:R32f
+             188:             TypePointer UniformConstant 187
+189(fimage1DArray):    188(ptr) Variable UniformConstant
+             190:             TypeVector 18(int) 2
+             191:  190(ivec2) ConstantComposite 21 21
+             199:  190(ivec2) ConstantComposite 19 19
+             207:  190(ivec2) ConstantComposite 19 21
+             222:  190(ivec2) ConstantComposite 179 179
+             230:             TypeImage 6(float) 2D nonsampled format:R32f
+             231:             TypePointer UniformConstant 230
+   232(fimage2D):    231(ptr) Variable UniformConstant
+             268:             TypeImage 6(float) Rect nonsampled format:R32f
+             269:             TypePointer UniformConstant 268
+270(fimage2DRect):    269(ptr) Variable UniformConstant
+             306:             TypeImage 6(float) 2D array nonsampled format:R32f
+             307:             TypePointer UniformConstant 306
+308(fimage2DArray):    307(ptr) Variable UniformConstant
+             309:             TypeVector 18(int) 3
+             310:  309(ivec3) ConstantComposite 21 21 21
+             318:  309(ivec3) ConstantComposite 19 19 21
+             326:  309(ivec3) ConstantComposite 19 21 19
+             334:  309(ivec3) ConstantComposite 19 19 19
+             342:  309(ivec3) ConstantComposite 179 179 21
+             350:             TypeImage 6(float) Cube nonsampled format:R32f
+             351:             TypePointer UniformConstant 350
+ 352(fimageCube):    351(ptr) Variable UniformConstant
+             367:  309(ivec3) ConstantComposite 19 21 21
+             382:  309(ivec3) ConstantComposite 179 179 19
+             390:             TypeImage 6(float) Cube array nonsampled format:R32f
+             391:             TypePointer UniformConstant 390
+392(fimageCubeArray):    391(ptr) Variable UniformConstant
+             428:             TypeImage 6(float) 3D nonsampled format:R32f
+             429:             TypePointer UniformConstant 428
+   430(fimage3D):    429(ptr) Variable UniformConstant
+             466:             TypeVector 13(int) 3
+             467:     13(int) Constant 16
+             468:     13(int) Constant 1
+             469:  466(ivec3) ConstantComposite 467 467 468
+         4(main):           2 Function None 3
+               5:             Label
+      8(resultf):      7(ptr) Variable Function
+     34(resultd):     33(ptr) Variable Function
+                              Store 8(resultf) 9
+              16:    6(float) AtomicFAddEXT 11(atomf) 14 15 12
+                              Store 8(resultf) 16
+              23:    6(float) AtomicFAddEXT 11(atomf) 19 22 17
+                              Store 8(resultf) 23
+              29:     28(ptr) AccessChain 27(buf) 21
+              30:    6(float) AtomicFAddEXT 29 14 15 12
+                              Store 8(resultf) 30
+              31:     28(ptr) AccessChain 27(buf) 21
+              32:    6(float) AtomicFAddEXT 31 19 22 17
+                              Store 8(resultf) 32
+                              Store 34(resultd) 35
+              39:24(float64_t) AtomicFAddEXT 37(atomd) 14 15 38
+                              Store 34(resultd) 39
+              41:24(float64_t) AtomicFAddEXT 37(atomd) 19 22 40
+                              Store 34(resultd) 41
+              43:     42(ptr) AccessChain 27(buf) 19
+              44:24(float64_t) AtomicFAddEXT 43 14 15 38
+                              Store 34(resultd) 44
+              45:     42(ptr) AccessChain 27(buf) 19
+              46:24(float64_t) AtomicFAddEXT 45 19 22 40
+                              Store 34(resultd) 46
+              47:     28(ptr) AccessChain 27(buf) 21
+              48:    6(float) Load 8(resultf)
+              49:    6(float) AtomicExchange 47 14 15 48
+                              Store 8(resultf) 49
+              50:    6(float) Load 8(resultf)
+              51:     28(ptr) AccessChain 27(buf) 21
+              52:    6(float) Load 51
+              53:    6(float) FAdd 52 50
+              54:     28(ptr) AccessChain 27(buf) 21
+                              Store 54 53
+              55:     28(ptr) AccessChain 27(buf) 21
+              56:    6(float) Load 8(resultf)
+              59:    6(float) AtomicExchange 55 19 58 56
+                              Store 8(resultf) 59
+              60:    6(float) Load 8(resultf)
+              61:     28(ptr) AccessChain 27(buf) 21
+              62:    6(float) Load 61
+              63:    6(float) FAdd 62 60
+              64:     28(ptr) AccessChain 27(buf) 21
+                              Store 64 63
+              65:    6(float) Load 8(resultf)
+              66:    6(float) AtomicExchange 11(atomf) 14 15 65
+                              Store 8(resultf) 66
+              67:    6(float) Load 8(resultf)
+              68:     28(ptr) AccessChain 27(buf) 21
+              69:    6(float) Load 68
+              70:    6(float) FAdd 69 67
+              71:     28(ptr) AccessChain 27(buf) 21
+                              Store 71 70
+              72:    6(float) Load 8(resultf)
+              73:    6(float) AtomicExchange 11(atomf) 19 58 72
+                              Store 8(resultf) 73
+              74:    6(float) Load 8(resultf)
+              75:     28(ptr) AccessChain 27(buf) 21
+              76:    6(float) Load 75
+              77:    6(float) FAdd 76 74
+              78:     28(ptr) AccessChain 27(buf) 21
+                              Store 78 77
+              79:     42(ptr) AccessChain 27(buf) 19
+              80:24(float64_t) Load 34(resultd)
+              81:24(float64_t) AtomicExchange 79 14 15 80
+                              Store 34(resultd) 81
+              82:24(float64_t) Load 34(resultd)
+              83:     42(ptr) AccessChain 27(buf) 19
+              84:24(float64_t) Load 83
+              85:24(float64_t) FAdd 84 82
+              86:     42(ptr) AccessChain 27(buf) 19
+                              Store 86 85
+              87:     42(ptr) AccessChain 27(buf) 19
+              88:24(float64_t) Load 34(resultd)
+              89:24(float64_t) AtomicExchange 87 19 58 88
+                              Store 34(resultd) 89
+              90:24(float64_t) Load 34(resultd)
+              91:     42(ptr) AccessChain 27(buf) 19
+              92:24(float64_t) Load 91
+              93:24(float64_t) FAdd 92 90
+              94:     42(ptr) AccessChain 27(buf) 19
+                              Store 94 93
+              95:24(float64_t) Load 34(resultd)
+              96:24(float64_t) AtomicExchange 37(atomd) 14 15 95
+                              Store 34(resultd) 96
+              97:24(float64_t) Load 34(resultd)
+              98:     42(ptr) AccessChain 27(buf) 19
+              99:24(float64_t) Load 98
+             100:24(float64_t) FAdd 99 97
+             101:     42(ptr) AccessChain 27(buf) 19
+                              Store 101 100
+             102:24(float64_t) Load 34(resultd)
+             103:24(float64_t) AtomicExchange 37(atomd) 19 58 102
+                              Store 34(resultd) 103
+             104:24(float64_t) Load 34(resultd)
+             105:     42(ptr) AccessChain 27(buf) 19
+             106:24(float64_t) Load 105
+             107:24(float64_t) FAdd 106 104
+             108:     42(ptr) AccessChain 27(buf) 19
+                              Store 108 107
+             109:     28(ptr) AccessChain 27(buf) 21
+             110:    6(float) AtomicLoad 109 19 58
+                              Store 8(resultf) 110
+             111:     28(ptr) AccessChain 27(buf) 21
+             112:    6(float) Load 8(resultf)
+                              AtomicStore 111 19 58 112
+             113:    6(float) Load 8(resultf)
+             114:     28(ptr) AccessChain 27(buf) 21
+             115:    6(float) Load 114
+             116:    6(float) FAdd 115 113
+             117:     28(ptr) AccessChain 27(buf) 21
+                              Store 117 116
+             118:    6(float) AtomicLoad 11(atomf) 19 58
+                              Store 8(resultf) 118
+             119:    6(float) Load 8(resultf)
+                              AtomicStore 11(atomf) 19 58 119
+             120:    6(float) Load 8(resultf)
+             121:     28(ptr) AccessChain 27(buf) 21
+             122:    6(float) Load 121
+             123:    6(float) FAdd 122 120
+             124:     28(ptr) AccessChain 27(buf) 21
+                              Store 124 123
+             125:     42(ptr) AccessChain 27(buf) 19
+             126:24(float64_t) AtomicLoad 125 19 58
+                              Store 34(resultd) 126
+             127:     42(ptr) AccessChain 27(buf) 19
+             128:24(float64_t) Load 34(resultd)
+                              AtomicStore 127 19 58 128
+             129:24(float64_t) Load 34(resultd)
+             130:     42(ptr) AccessChain 27(buf) 19
+             131:24(float64_t) Load 130
+             132:24(float64_t) FAdd 131 129
+             133:     42(ptr) AccessChain 27(buf) 19
+                              Store 133 132
+             134:24(float64_t) AtomicLoad 37(atomd) 19 58
+                              Store 34(resultd) 134
+             135:24(float64_t) Load 34(resultd)
+                              AtomicStore 37(atomd) 19 58 135
+             136:24(float64_t) Load 34(resultd)
+             137:     42(ptr) AccessChain 27(buf) 19
+             138:24(float64_t) Load 137
+             139:24(float64_t) FAdd 138 136
+             140:     42(ptr) AccessChain 27(buf) 19
+                              Store 140 139
+             146:    145(ptr) ImageTexelPointer 143(fimage1D) 21 15
+             148:    6(float) AtomicFAddEXT 146 14 147 144
+                              Store 11(atomf) 148 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             150:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             151:     28(ptr) AccessChain 27(buf) 21
+             152:    6(float) Load 151
+             153:    6(float) FAdd 152 150
+             154:     28(ptr) AccessChain 27(buf) 21
+                              Store 154 153
+             156:    145(ptr) ImageTexelPointer 143(fimage1D) 19 15
+             158:    6(float) AtomicFAddEXT 156 19 157 12
+                              Store 11(atomf) 158 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             159:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             160:     28(ptr) AccessChain 27(buf) 21
+             161:    6(float) Load 160
+             162:    6(float) FAdd 161 159
+             163:     28(ptr) AccessChain 27(buf) 21
+                              Store 163 162
+             165:    145(ptr) ImageTexelPointer 143(fimage1D) 19 15
+             166:    6(float) AtomicExchange 165 19 157 164
+                              Store 11(atomf) 166 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             167:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             168:     28(ptr) AccessChain 27(buf) 21
+             169:    6(float) Load 168
+             170:    6(float) FAdd 169 167
+             171:     28(ptr) AccessChain 27(buf) 21
+                              Store 171 170
+             172:    145(ptr) ImageTexelPointer 143(fimage1D) 19 15
+             173:    6(float) AtomicLoad 172 19 157
+                              Store 11(atomf) 173 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             174:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             175:     28(ptr) AccessChain 27(buf) 21
+             176:    6(float) Load 175
+             177:    6(float) FAdd 176 174
+             178:     28(ptr) AccessChain 27(buf) 21
+                              Store 178 177
+             180:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             181:    145(ptr) ImageTexelPointer 143(fimage1D) 179 15
+                              AtomicStore 181 19 157 180
+             182:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             183:     28(ptr) AccessChain 27(buf) 21
+             184:    6(float) Load 183
+             185:    6(float) FAdd 184 182
+             186:     28(ptr) AccessChain 27(buf) 21
+                              Store 186 185
+             192:    145(ptr) ImageTexelPointer 189(fimage1DArray) 191 15
+             193:    6(float) AtomicFAddEXT 192 14 147 144
+                              Store 11(atomf) 193 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             194:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             195:     28(ptr) AccessChain 27(buf) 21
+             196:    6(float) Load 195
+             197:    6(float) FAdd 196 194
+             198:     28(ptr) AccessChain 27(buf) 21
+                              Store 198 197
+             200:    145(ptr) ImageTexelPointer 189(fimage1DArray) 199 15
+             201:    6(float) AtomicFAddEXT 200 19 157 12
+                              Store 11(atomf) 201 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             202:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             203:     28(ptr) AccessChain 27(buf) 21
+             204:    6(float) Load 203
+             205:    6(float) FAdd 204 202
+             206:     28(ptr) AccessChain 27(buf) 21
+                              Store 206 205
+             208:    145(ptr) ImageTexelPointer 189(fimage1DArray) 207 15
+             209:    6(float) AtomicExchange 208 19 157 164
+                              Store 11(atomf) 209 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             210:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             211:     28(ptr) AccessChain 27(buf) 21
+             212:    6(float) Load 211
+             213:    6(float) FAdd 212 210
+             214:     28(ptr) AccessChain 27(buf) 21
+                              Store 214 213
+             215:    145(ptr) ImageTexelPointer 189(fimage1DArray) 199 15
+             216:    6(float) AtomicLoad 215 19 157
+                              Store 11(atomf) 216 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             217:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             218:     28(ptr) AccessChain 27(buf) 21
+             219:    6(float) Load 218
+             220:    6(float) FAdd 219 217
+             221:     28(ptr) AccessChain 27(buf) 21
+                              Store 221 220
+             223:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             224:    145(ptr) ImageTexelPointer 189(fimage1DArray) 222 15
+                              AtomicStore 224 19 157 223
+             225:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             226:     28(ptr) AccessChain 27(buf) 21
+             227:    6(float) Load 226
+             228:    6(float) FAdd 227 225
+             229:     28(ptr) AccessChain 27(buf) 21
+                              Store 229 228
+             233:    145(ptr) ImageTexelPointer 232(fimage2D) 191 15
+             234:    6(float) AtomicFAddEXT 233 14 147 144
+                              Store 11(atomf) 234 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             235:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             236:     28(ptr) AccessChain 27(buf) 21
+             237:    6(float) Load 236
+             238:    6(float) FAdd 237 235
+             239:     28(ptr) AccessChain 27(buf) 21
+                              Store 239 238
+             240:    145(ptr) ImageTexelPointer 232(fimage2D) 199 15
+             241:    6(float) AtomicFAddEXT 240 19 157 12
+                              Store 11(atomf) 241 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             242:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             243:     28(ptr) AccessChain 27(buf) 21
+             244:    6(float) Load 243
+             245:    6(float) FAdd 244 242
+             246:     28(ptr) AccessChain 27(buf) 21
+                              Store 246 245
+             247:    145(ptr) ImageTexelPointer 232(fimage2D) 207 15
+             248:    6(float) AtomicExchange 247 19 157 164
+                              Store 11(atomf) 248 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             249:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             250:     28(ptr) AccessChain 27(buf) 21
+             251:    6(float) Load 250
+             252:    6(float) FAdd 251 249
+             253:     28(ptr) AccessChain 27(buf) 21
+                              Store 253 252
+             254:    145(ptr) ImageTexelPointer 232(fimage2D) 199 15
+             255:    6(float) AtomicLoad 254 19 157
+                              Store 11(atomf) 255 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             256:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             257:     28(ptr) AccessChain 27(buf) 21
+             258:    6(float) Load 257
+             259:    6(float) FAdd 258 256
+             260:     28(ptr) AccessChain 27(buf) 21
+                              Store 260 259
+             261:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             262:    145(ptr) ImageTexelPointer 232(fimage2D) 222 15
+                              AtomicStore 262 19 157 261
+             263:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             264:     28(ptr) AccessChain 27(buf) 21
+             265:    6(float) Load 264
+             266:    6(float) FAdd 265 263
+             267:     28(ptr) AccessChain 27(buf) 21
+                              Store 267 266
+             271:    145(ptr) ImageTexelPointer 270(fimage2DRect) 191 15
+             272:    6(float) AtomicFAddEXT 271 14 147 144
+                              Store 11(atomf) 272 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             273:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             274:     28(ptr) AccessChain 27(buf) 21
+             275:    6(float) Load 274
+             276:    6(float) FAdd 275 273
+             277:     28(ptr) AccessChain 27(buf) 21
+                              Store 277 276
+             278:    145(ptr) ImageTexelPointer 270(fimage2DRect) 199 15
+             279:    6(float) AtomicFAddEXT 278 19 157 12
+                              Store 11(atomf) 279 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             280:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             281:     28(ptr) AccessChain 27(buf) 21
+             282:    6(float) Load 281
+             283:    6(float) FAdd 282 280
+             284:     28(ptr) AccessChain 27(buf) 21
+                              Store 284 283
+             285:    145(ptr) ImageTexelPointer 270(fimage2DRect) 207 15
+             286:    6(float) AtomicExchange 285 19 157 164
+                              Store 11(atomf) 286 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             287:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             288:     28(ptr) AccessChain 27(buf) 21
+             289:    6(float) Load 288
+             290:    6(float) FAdd 289 287
+             291:     28(ptr) AccessChain 27(buf) 21
+                              Store 291 290
+             292:    145(ptr) ImageTexelPointer 270(fimage2DRect) 199 15
+             293:    6(float) AtomicLoad 292 19 157
+                              Store 11(atomf) 293 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             294:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             295:     28(ptr) AccessChain 27(buf) 21
+             296:    6(float) Load 295
+             297:    6(float) FAdd 296 294
+             298:     28(ptr) AccessChain 27(buf) 21
+                              Store 298 297
+             299:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             300:    145(ptr) ImageTexelPointer 270(fimage2DRect) 222 15
+                              AtomicStore 300 19 157 299
+             301:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             302:     28(ptr) AccessChain 27(buf) 21
+             303:    6(float) Load 302
+             304:    6(float) FAdd 303 301
+             305:     28(ptr) AccessChain 27(buf) 21
+                              Store 305 304
+             311:    145(ptr) ImageTexelPointer 308(fimage2DArray) 310 15
+             312:    6(float) AtomicFAddEXT 311 14 147 144
+                              Store 11(atomf) 312 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             313:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             314:     28(ptr) AccessChain 27(buf) 21
+             315:    6(float) Load 314
+             316:    6(float) FAdd 315 313
+             317:     28(ptr) AccessChain 27(buf) 21
+                              Store 317 316
+             319:    145(ptr) ImageTexelPointer 308(fimage2DArray) 318 15
+             320:    6(float) AtomicFAddEXT 319 19 157 12
+                              Store 11(atomf) 320 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             321:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             322:     28(ptr) AccessChain 27(buf) 21
+             323:    6(float) Load 322
+             324:    6(float) FAdd 323 321
+             325:     28(ptr) AccessChain 27(buf) 21
+                              Store 325 324
+             327:    145(ptr) ImageTexelPointer 308(fimage2DArray) 326 15
+             328:    6(float) AtomicExchange 327 19 157 164
+                              Store 11(atomf) 328 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             329:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             330:     28(ptr) AccessChain 27(buf) 21
+             331:    6(float) Load 330
+             332:    6(float) FAdd 331 329
+             333:     28(ptr) AccessChain 27(buf) 21
+                              Store 333 332
+             335:    145(ptr) ImageTexelPointer 308(fimage2DArray) 334 15
+             336:    6(float) AtomicLoad 335 19 157
+                              Store 11(atomf) 336 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             337:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             338:     28(ptr) AccessChain 27(buf) 21
+             339:    6(float) Load 338
+             340:    6(float) FAdd 339 337
+             341:     28(ptr) AccessChain 27(buf) 21
+                              Store 341 340
+             343:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             344:    145(ptr) ImageTexelPointer 308(fimage2DArray) 342 15
+                              AtomicStore 344 19 157 343
+             345:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             346:     28(ptr) AccessChain 27(buf) 21
+             347:    6(float) Load 346
+             348:    6(float) FAdd 347 345
+             349:     28(ptr) AccessChain 27(buf) 21
+                              Store 349 348
+             353:    145(ptr) ImageTexelPointer 352(fimageCube) 310 15
+             354:    6(float) AtomicFAddEXT 353 14 147 144
+                              Store 11(atomf) 354 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             355:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             356:     28(ptr) AccessChain 27(buf) 21
+             357:    6(float) Load 356
+             358:    6(float) FAdd 357 355
+             359:     28(ptr) AccessChain 27(buf) 21
+                              Store 359 358
+             360:    145(ptr) ImageTexelPointer 352(fimageCube) 318 15
+             361:    6(float) AtomicFAddEXT 360 19 157 12
+                              Store 11(atomf) 361 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             362:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             363:     28(ptr) AccessChain 27(buf) 21
+             364:    6(float) Load 363
+             365:    6(float) FAdd 364 362
+             366:     28(ptr) AccessChain 27(buf) 21
+                              Store 366 365
+             368:    145(ptr) ImageTexelPointer 352(fimageCube) 367 15
+             369:    6(float) AtomicExchange 368 19 157 164
+                              Store 11(atomf) 369 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             370:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             371:     28(ptr) AccessChain 27(buf) 21
+             372:    6(float) Load 371
+             373:    6(float) FAdd 372 370
+             374:     28(ptr) AccessChain 27(buf) 21
+                              Store 374 373
+             375:    145(ptr) ImageTexelPointer 352(fimageCube) 334 15
+             376:    6(float) AtomicLoad 375 19 157
+                              Store 11(atomf) 376 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             377:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             378:     28(ptr) AccessChain 27(buf) 21
+             379:    6(float) Load 378
+             380:    6(float) FAdd 379 377
+             381:     28(ptr) AccessChain 27(buf) 21
+                              Store 381 380
+             383:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             384:    145(ptr) ImageTexelPointer 352(fimageCube) 382 15
+                              AtomicStore 384 19 157 383
+             385:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             386:     28(ptr) AccessChain 27(buf) 21
+             387:    6(float) Load 386
+             388:    6(float) FAdd 387 385
+             389:     28(ptr) AccessChain 27(buf) 21
+                              Store 389 388
+             393:    145(ptr) ImageTexelPointer 392(fimageCubeArray) 310 15
+             394:    6(float) AtomicFAddEXT 393 14 147 144
+                              Store 11(atomf) 394 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             395:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             396:     28(ptr) AccessChain 27(buf) 21
+             397:    6(float) Load 396
+             398:    6(float) FAdd 397 395
+             399:     28(ptr) AccessChain 27(buf) 21
+                              Store 399 398
+             400:    145(ptr) ImageTexelPointer 392(fimageCubeArray) 318 15
+             401:    6(float) AtomicFAddEXT 400 19 157 12
+                              Store 11(atomf) 401 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             402:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             403:     28(ptr) AccessChain 27(buf) 21
+             404:    6(float) Load 403
+             405:    6(float) FAdd 404 402
+             406:     28(ptr) AccessChain 27(buf) 21
+                              Store 406 405
+             407:    145(ptr) ImageTexelPointer 392(fimageCubeArray) 326 15
+             408:    6(float) AtomicExchange 407 19 157 164
+                              Store 11(atomf) 408 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             409:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             410:     28(ptr) AccessChain 27(buf) 21
+             411:    6(float) Load 410
+             412:    6(float) FAdd 411 409
+             413:     28(ptr) AccessChain 27(buf) 21
+                              Store 413 412
+             414:    145(ptr) ImageTexelPointer 392(fimageCubeArray) 334 15
+             415:    6(float) AtomicLoad 414 19 157
+                              Store 11(atomf) 415 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             416:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             417:     28(ptr) AccessChain 27(buf) 21
+             418:    6(float) Load 417
+             419:    6(float) FAdd 418 416
+             420:     28(ptr) AccessChain 27(buf) 21
+                              Store 420 419
+             421:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             422:    145(ptr) ImageTexelPointer 392(fimageCubeArray) 342 15
+                              AtomicStore 422 19 157 421
+             423:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             424:     28(ptr) AccessChain 27(buf) 21
+             425:    6(float) Load 424
+             426:    6(float) FAdd 425 423
+             427:     28(ptr) AccessChain 27(buf) 21
+                              Store 427 426
+             431:    145(ptr) ImageTexelPointer 430(fimage3D) 310 15
+             432:    6(float) AtomicFAddEXT 431 14 147 144
+                              Store 11(atomf) 432 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             433:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             434:     28(ptr) AccessChain 27(buf) 21
+             435:    6(float) Load 434
+             436:    6(float) FAdd 435 433
+             437:     28(ptr) AccessChain 27(buf) 21
+                              Store 437 436
+             438:    145(ptr) ImageTexelPointer 430(fimage3D) 318 15
+             439:    6(float) AtomicFAddEXT 438 19 157 12
+                              Store 11(atomf) 439 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             440:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             441:     28(ptr) AccessChain 27(buf) 21
+             442:    6(float) Load 441
+             443:    6(float) FAdd 442 440
+             444:     28(ptr) AccessChain 27(buf) 21
+                              Store 444 443
+             445:    145(ptr) ImageTexelPointer 430(fimage3D) 326 15
+             446:    6(float) AtomicExchange 445 19 157 164
+                              Store 11(atomf) 446 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             447:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             448:     28(ptr) AccessChain 27(buf) 21
+             449:    6(float) Load 448
+             450:    6(float) FAdd 449 447
+             451:     28(ptr) AccessChain 27(buf) 21
+                              Store 451 450
+             452:    145(ptr) ImageTexelPointer 430(fimage3D) 334 15
+             453:    6(float) AtomicLoad 452 19 157
+                              Store 11(atomf) 453 MakePointerAvailableKHR NonPrivatePointerKHR 149
+             454:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             455:     28(ptr) AccessChain 27(buf) 21
+             456:    6(float) Load 455
+             457:    6(float) FAdd 456 454
+             458:     28(ptr) AccessChain 27(buf) 21
+                              Store 458 457
+             459:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             460:    145(ptr) ImageTexelPointer 430(fimage3D) 342 15
+                              AtomicStore 460 19 157 459
+             461:    6(float) Load 11(atomf) MakePointerVisibleKHR NonPrivatePointerKHR 149
+             462:     28(ptr) AccessChain 27(buf) 21
+             463:    6(float) Load 462
+             464:    6(float) FAdd 463 461
+             465:     28(ptr) AccessChain 27(buf) 21
+                              Store 465 464
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.atomicFloat_Error.comp.out b/Test/baseResults/spv.atomicFloat_Error.comp.out
new file mode 100755
index 0000000..e00ed19
--- /dev/null
+++ b/Test/baseResults/spv.atomicFloat_Error.comp.out
@@ -0,0 +1,57 @@
+spv.atomicFloat_Error.comp
+ERROR: 0:25: 'atomicAdd' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:26: 'atomicAdd' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:27: 'atomicAdd' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:28: 'atomicAdd' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:31: 'atomicAdd' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:32: 'atomicAdd' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:33: 'atomicAdd' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:34: 'atomicAdd' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:37: 'atomicExchange' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:38: 'atomicExchange' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:39: 'atomicExchange' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:40: 'atomicExchange' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:43: 'atomicExchange' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:44: 'atomicExchange' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:45: 'atomicExchange' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:46: 'atomicExchange' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:50: 'atomicLoad' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:51: 'atomicStore' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:52: 'atomicLoad' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:53: 'atomicStore' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:56: 'atomicLoad' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:57: 'atomicStore' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:58: 'atomicLoad' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:59: 'atomicStore' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:63: 'imageAtomicAdd' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:64: 'imageAtomicAdd' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:66: 'imageAtomicLoad' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:67: 'imageAtomicStore' : required extension not requested: GL_EXT_shader_atomic_float
+ERROR: 0:80: 'atomicAdd' : no matching overloaded function found 
+ERROR: 0:81: 'atomicAdd' : no matching overloaded function found 
+ERROR: 0:82: 'atomicAdd' : no matching overloaded function found 
+ERROR: 0:83: 'atomicAdd' : no matching overloaded function found 
+ERROR: 0:86: 'atomicExchange' : no matching overloaded function found 
+ERROR: 0:87: 'atomicExchange' : no matching overloaded function found 
+ERROR: 0:88: 'atomicExchange' : no matching overloaded function found 
+ERROR: 0:89: 'atomicExchange' : no matching overloaded function found 
+ERROR: 0:90: 'atomicExchange' : no matching overloaded function found 
+ERROR: 0:91: 'atomicExchange' : no matching overloaded function found 
+ERROR: 0:95: 'atomicLoad' : no matching overloaded function found 
+ERROR: 0:96: 'atomicStore' : no matching overloaded function found 
+ERROR: 0:99: 'imageAtomicAdd' : no matching overloaded function found 
+ERROR: 0:100: 'imageAtomicAdd' : no matching overloaded function found 
+ERROR: 0:101: 'imageAtomicAdd' : no matching overloaded function found 
+ERROR: 0:102: 'imageAtomicExchange' : no matching overloaded function found 
+ERROR: 0:103: 'imageAtomicExchange' : no matching overloaded function found 
+ERROR: 0:104: 'imageAtomicExchange' : no matching overloaded function found 
+ERROR: 0:105: 'imageAtomicLoad' : no matching overloaded function found 
+ERROR: 0:106: 'imageAtomicLoad' : no matching overloaded function found 
+ERROR: 0:107: 'imageAtomicLoad' : no matching overloaded function found 
+ERROR: 0:108: 'imageAtomicStore' : no matching overloaded function found 
+ERROR: 0:109: 'imageAtomicStore' : no matching overloaded function found 
+ERROR: 0:110: 'imageAtomicStore' : no matching overloaded function found 
+ERROR: 52 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 5ac910e..5b2e134 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): 80008
+// Generated by (magic number): 8000a
 // 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 ffc2eaa..7199882 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): 80008
+// Generated by (magic number): 8000a
 // 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 f590ec7..daf7b1d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 172
 
                               Capability Shader
@@ -26,14 +26,27 @@
                               Name 139  "u3"
                               Name 148  "u4"
                               Name 154  "fragColor"
+                              Decorate 14(f1) Location 8
+                              Decorate 26(f2) Location 9
+                              Decorate 37(f3) Location 10
+                              Decorate 48(f4) Location 11
                               Decorate 89(i1) Flat
+                              Decorate 89(i1) Location 0
                               Decorate 98(i2) Flat
+                              Decorate 98(i2) Location 1
                               Decorate 107(i3) Flat
+                              Decorate 107(i3) Location 2
                               Decorate 116(i4) Flat
+                              Decorate 116(i4) Location 3
                               Decorate 122(u1) Flat
+                              Decorate 122(u1) Location 4
                               Decorate 130(u2) Flat
+                              Decorate 130(u2) Location 5
                               Decorate 139(u3) Flat
+                              Decorate 139(u3) Location 6
                               Decorate 148(u4) Flat
+                              Decorate 148(u4) Location 7
+                              Decorate 154(fragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.bool.vert.out b/Test/baseResults/spv.bool.vert.out
index 3e5a190..fb7c686 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): 80008
+// Generated by (magic number): 8000a
 // 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 b0a4023..004c204 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): 80008
+// Generated by (magic number): 8000a
 // 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 3aacca7..30918ab 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): 80008
+// Generated by (magic number): 8000a
 // 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 e526ada..3475266 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): 80008
+// Generated by (magic number): 8000a
 // 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 9d18188..59bcc78 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): 80008
+// Generated by (magic number): 8000a
 // 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 5064c7e..3a33c42 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): 80008
+// Generated by (magic number): 8000a
 // 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 783577c..bd034aa 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): 80008
+// Generated by (magic number): 8000a
 // 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 9f0f4fb..c47c718 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): 80008
+// Generated by (magic number): 8000a
 // 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 516b9fc..bfc1524 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): 80008
+// Generated by (magic number): 8000a
 // 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 440a032..514a798 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): 80008
+// Generated by (magic number): 8000a
 // 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 f018e21..bfa5d94 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): 80008
+// Generated by (magic number): 8000a
 // 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 cfc6f05..284bcb0 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): 80008
+// Generated by (magic number): 8000a
 // 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 0a5f6fb..21dddc5 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): 80008
+// Generated by (magic number): 8000a
 // 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 6c43fbe..f66c92a 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): 80008
+// Generated by (magic number): 8000a
 // 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 ba50eb1..95d4dcf 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 50
 
                               Capability Shader
@@ -46,6 +46,7 @@
                               Decorate 40(x) DescriptorSet 1
                               Decorate 40(x) Binding 2
                               Decorate 42(k) Flat
+                              Decorate 42(k) Location 0
                               Decorate 42(k) DecorationAliasedPointerEXT
                               Decorate 23(param) DecorationAliasedPointerEXT
                2:             TypeVoid
diff --git a/Test/baseResults/spv.bufferhandle4.frag.out b/Test/baseResults/spv.bufferhandle4.frag.out
index 7dff09c..6751d6f 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): 80008
+// Generated by (magic number): 8000a
 // 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 209459b..9f78166 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): 80008
+// Generated by (magic number): 8000a
 // 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 b373a2f..441c762 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): 80008
+// Generated by (magic number): 8000a
 // 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 9beaee1..3c8e86c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 24
 
                               Capability Shader
@@ -47,7 +47,7 @@
                               MemberDecorate 15(t2) 1 Offset 8
                               Decorate 15(t2) Block
                               Decorate 17(u) DescriptorSet 0
-                              Decorate 17(u) Binding 0
+                              Decorate 17(u) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                               TypeForwardPointer 6 PhysicalStorageBufferEXT
diff --git a/Test/baseResults/spv.bufferhandle8.frag.out b/Test/baseResults/spv.bufferhandle8.frag.out
index 95abfd9..b9f23c5 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): 80008
+// Generated by (magic number): 8000a
 // 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 b452acc..7e534df 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 56
 
                               Capability Shader
@@ -40,7 +40,9 @@
                               Decorate 8(blockType) Block
                               Decorate 13(b1) DecorationAliasedPointerEXT
                               Decorate 16(h) Flat
+                              Decorate 16(h) Location 0
                               Decorate 19(i) Flat
+                              Decorate 19(i) Location 1
                               Decorate 34(b2) DecorationAliasedPointerEXT
                               Decorate 37(b3) DecorationAliasedPointerEXT
                               MemberDecorate 53(t2) 0 Offset 0
diff --git a/Test/baseResults/spv.bufferhandleUvec2.frag.out b/Test/baseResults/spv.bufferhandleUvec2.frag.out
index b1944cf..fbdbb6a 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 71
 
                               Capability Shader
@@ -41,7 +41,9 @@
                               Decorate 8(blockType) Block
                               Decorate 13(b1) DecorationAliasedPointerEXT
                               Decorate 16(h) Flat
+                              Decorate 16(h) Location 0
                               Decorate 19(i) Flat
+                              Decorate 19(i) Location 1
                               Decorate 34(b2) DecorationAliasedPointerEXT
                               Decorate 37(b3) DecorationAliasedPointerEXT
                               MemberDecorate 68(t2) 0 Offset 0
diff --git a/Test/baseResults/spv.builtInXFB.vert.out b/Test/baseResults/spv.builtInXFB.vert.out
index 7a8b17a..1f612e2 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): 80008
+// Generated by (magic number): 8000a
 // 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 052ac06..a713845 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): 80008
+// Generated by (magic number): 8000a
 // 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 3ef5ee4..3c3d54e 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): 80008
+// Generated by (magic number): 8000a
 // 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 f255176..dfd4596 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): 80008
+// Generated by (magic number): 8000a
 // 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 a05afb9..2e53e9b 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 36
 
                               Capability Shader
@@ -16,6 +16,7 @@
                               Name 34  "gl_FragColor"
                               Decorate 13(tex) DescriptorSet 0
                               Decorate 13(tex) Binding 0
+                              Decorate 17(coord) Location 0
                               Decorate 34(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.constConstruct.vert.out b/Test/baseResults/spv.constConstruct.vert.out
index d3250a1..db637a9 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): 80008
+// Generated by (magic number): 8000a
 // 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 1fce728..61d0e54 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): 80008
+// Generated by (magic number): 8000a
 // 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 f1179d4..73d663b 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): 80008
+// Generated by (magic number): 8000a
 // 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 c222f25..cf34ae2 100644
--- a/Test/baseResults/spv.controlFlowAttributes.frag.out
+++ b/Test/baseResults/spv.controlFlowAttributes.frag.out
@@ -9,7 +9,7 @@
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 123
 
                               Capability Shader
diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out
index 60129dd..b600b38 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 455
 
                               Capability Shader
@@ -50,10 +50,18 @@
                               Name 452  "i_f3"
                               Name 454  "i_f4"
                               Decorate 39(i_i) Flat
+                              Decorate 39(i_i) Location 0
+                              Decorate 53(i_f) Location 4
                               Decorate 157(i_i4) Flat
+                              Decorate 157(i_i4) Location 3
                               Decorate 322(gl_FragColor) Location 0
                               Decorate 446(i_i2) Flat
+                              Decorate 446(i_i2) Location 1
                               Decorate 448(i_i3) Flat
+                              Decorate 448(i_i3) Location 2
+                              Decorate 450(i_f2) Location 5
+                              Decorate 452(i_f3) Location 6
+                              Decorate 454(i_f4) Location 7
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeBool
@@ -171,19 +179,19 @@
               12:      9(int) Load 11(u_i)
               15:     6(bool) INotEqual 12 14
               19:   16(float) Load 18(u_f)
-              21:     6(bool) FOrdNotEqual 19 20
+              21:     6(bool) FUnordNotEqual 19 20
               22:     6(bool) LogicalNotEqual 15 21
                               Store 8(b) 22
               26:      9(int) Load 11(u_i)
               27:     6(bool) INotEqual 26 14
               28:   16(float) Load 18(u_f)
-              29:     6(bool) FOrdNotEqual 28 20
+              29:     6(bool) FUnordNotEqual 28 20
               30:   23(bvec2) CompositeConstruct 27 29
                               Store 25(b2) 30
               34:      9(int) Load 11(u_i)
               35:     6(bool) INotEqual 34 14
               36:   16(float) Load 18(u_f)
-              37:     6(bool) FOrdNotEqual 36 20
+              37:     6(bool) FUnordNotEqual 36 20
               40:      9(int) Load 39(i_i)
               41:     6(bool) INotEqual 40 14
               42:   31(bvec3) CompositeConstruct 35 37 41
@@ -191,11 +199,11 @@
               46:      9(int) Load 11(u_i)
               47:     6(bool) INotEqual 46 14
               48:   16(float) Load 18(u_f)
-              49:     6(bool) FOrdNotEqual 48 20
+              49:     6(bool) FUnordNotEqual 48 20
               50:      9(int) Load 39(i_i)
               51:     6(bool) INotEqual 50 14
               54:   16(float) Load 53(i_f)
-              55:     6(bool) FOrdNotEqual 54 20
+              55:     6(bool) FUnordNotEqual 54 20
               56:   43(bvec4) CompositeConstruct 47 49 51 55
                               Store 45(b4) 56
               59:   16(float) Load 18(u_f)
@@ -273,7 +281,7 @@
              164:   95(fvec4) FAdd 163 162
                               Store 118(f4) 164
              165:   95(fvec4) Load 97(u_f4)
-             166:   43(bvec4) FOrdNotEqual 165 150
+             166:   43(bvec4) FUnordNotEqual 165 150
              167:   95(fvec4) Select 166 151 150
              168:   95(fvec4) Load 118(f4)
              169:   95(fvec4) FAdd 168 167
@@ -417,7 +425,7 @@
              289:   79(ivec3)   Load 81(i3)
              290:   82(fvec3)   ConvertSToF 289
              291:   82(fvec3)   Load 114(f3)
-             292:   31(bvec3)   FOrdNotEqual 290 291
+             292:   31(bvec3)   FUnordNotEqual 290 291
              293:     6(bool)   Any 292
                                 Branch 288
              288:             Label
diff --git a/Test/baseResults/spv.coopmat.comp.out b/Test/baseResults/spv.coopmat.comp.out
index 4ef7028..6838bfc 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): 80008
+// Generated by (magic number): 8000a
 // 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 5dc14ce..980d1bd 100644
--- a/Test/baseResults/spv.dataOut.frag.out
+++ b/Test/baseResults/spv.dataOut.frag.out
@@ -1,6 +1,7 @@
 spv.dataOut.frag
+Validation failed
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 20
 
                               Capability Shader
@@ -12,6 +13,7 @@
                               Name 4  "main"
                               Name 12  "gl_FragData"
                               Name 16  "Color"
+                              Decorate 16(Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.dataOutIndirect.frag.out b/Test/baseResults/spv.dataOutIndirect.frag.out
index fa6a0da..a75e8d5 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 26
 
                               Capability Shader
@@ -15,10 +15,12 @@
                               MemberName 14(b) 0  "i"
                               Name 16  "bName"
                               Name 22  "Color"
+                              Decorate 12(fcolor) Location 0
                               MemberDecorate 14(b) 0 Offset 0
                               Decorate 14(b) Block
                               Decorate 16(bName) DescriptorSet 0
                               Decorate 16(bName) Binding 0
+                              Decorate 22(Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.dataOutIndirect.vert.out b/Test/baseResults/spv.dataOutIndirect.vert.out
index fab5e58..1c29410 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 38
 
                               Capability Shader
@@ -15,6 +15,8 @@
                               Name 25  "colorOut"
                               Name 28  "color"
                               Name 34  "gl_Position"
+                              Decorate 25(colorOut) Location 0
+                              Decorate 28(color) Location 0
                               Decorate 34(gl_Position) BuiltIn Position
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.dead-after-continue.vert.out b/Test/baseResults/spv.dead-after-continue.vert.out
index f3b8792..6d8d7d9 100644
--- a/Test/baseResults/spv.dead-after-continue.vert.out
+++ b/Test/baseResults/spv.dead-after-continue.vert.out
@@ -1,6 +1,6 @@
 spv.dead-after-continue.vert
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 29
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-after-discard.frag.out b/Test/baseResults/spv.dead-after-discard.frag.out
index f378d04..987f5a2 100644
--- a/Test/baseResults/spv.dead-after-discard.frag.out
+++ b/Test/baseResults/spv.dead-after-discard.frag.out
@@ -1,6 +1,6 @@
 spv.dead-after-discard.frag
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 15
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-after-loop-break.vert.out b/Test/baseResults/spv.dead-after-loop-break.vert.out
index b653e39..2d9e35a 100644
--- a/Test/baseResults/spv.dead-after-loop-break.vert.out
+++ b/Test/baseResults/spv.dead-after-loop-break.vert.out
@@ -1,6 +1,6 @@
 spv.dead-after-loop-break.vert
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-after-return.vert.out b/Test/baseResults/spv.dead-after-return.vert.out
index d963f9f..d6ba2c7 100644
--- a/Test/baseResults/spv.dead-after-return.vert.out
+++ b/Test/baseResults/spv.dead-after-return.vert.out
@@ -1,6 +1,6 @@
 spv.dead-after-return.vert
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 14
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-after-switch-break.vert.out b/Test/baseResults/spv.dead-after-switch-break.vert.out
index a506012..f8bc4d0 100644
--- a/Test/baseResults/spv.dead-after-switch-break.vert.out
+++ b/Test/baseResults/spv.dead-after-switch-break.vert.out
@@ -1,6 +1,6 @@
 spv.dead-after-switch-break.vert
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 21
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-complex-continue-after-return.vert.out b/Test/baseResults/spv.dead-complex-continue-after-return.vert.out
index 60e81bd..3db78ec 100644
--- a/Test/baseResults/spv.dead-complex-continue-after-return.vert.out
+++ b/Test/baseResults/spv.dead-complex-continue-after-return.vert.out
@@ -1,6 +1,6 @@
 spv.dead-complex-continue-after-return.vert
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 31
 
                               Capability Shader
diff --git a/Test/baseResults/spv.dead-complex-merge-after-return.vert.out b/Test/baseResults/spv.dead-complex-merge-after-return.vert.out
index 609a3ce..cc1b25c 100644
--- a/Test/baseResults/spv.dead-complex-merge-after-return.vert.out
+++ b/Test/baseResults/spv.dead-complex-merge-after-return.vert.out
@@ -1,6 +1,6 @@
 spv.dead-complex-merge-after-return.vert
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 36
 
                               Capability Shader
diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out
index b68de49..eec50a3 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): 80008
+// Generated by (magic number): 8000a
 // 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 f27aac0..e146398 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 124
 
                               Capability Shader
diff --git a/Test/baseResults/spv.debugPrintf.frag.out b/Test/baseResults/spv.debugPrintf.frag.out
index dbd0b4e..6517415 100644
--- a/Test/baseResults/spv.debugPrintf.frag.out
+++ b/Test/baseResults/spv.debugPrintf.frag.out
@@ -1,6 +1,6 @@
 spv.debugPrintf.frag
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 17
 
                               Capability Shader
diff --git a/Test/baseResults/spv.deepRvalue.frag.out b/Test/baseResults/spv.deepRvalue.frag.out
index 776fdf8..d46159d 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): 80008
+// Generated by (magic number): 8000a
 // 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 d212c89..50c4770 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 15
 
                               Capability Shader
@@ -16,6 +16,8 @@
                               Name 10  "Depth"
                               Name 14  "Color"
                               Decorate 8(gl_FragDepth) BuiltIn FragDepth
+                              Decorate 10(Depth) Location 1
+                              Decorate 14(Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.deviceGroup.frag.out b/Test/baseResults/spv.deviceGroup.frag.out
index 2d16272..57c443c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 17
 
                               Capability Shader
@@ -14,6 +14,7 @@
                               Name 4  "main"
                               Name 9  "color"
                               Name 12  "gl_DeviceIndex"
+                              Decorate 9(color) Location 0
                               Decorate 12(gl_DeviceIndex) Flat
                               Decorate 12(gl_DeviceIndex) BuiltIn DeviceIndex
                2:             TypeVoid
diff --git a/Test/baseResults/spv.discard-dce.frag.out b/Test/baseResults/spv.discard-dce.frag.out
index c4a5cb2..93c2de8 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 84
 
                               Capability Shader
@@ -18,6 +18,7 @@
                               Name 30  "y"
                               Name 36  "radius"
                               Name 59  "gl_FragColor"
+                              Decorate 21(tex_coord) Location 0
                               Decorate 59(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.do-simple.vert.out b/Test/baseResults/spv.do-simple.vert.out
index 826cc1c..c240c44 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): 80008
+// Generated by (magic number): 8000a
 // 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 36315a2..081dc62 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): 80008
+// Generated by (magic number): 8000a
 // 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 945f0d7..a57b9b2 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 34
 
                               Capability Shader
@@ -15,6 +15,9 @@
                               Name 17  "bigColor"
                               Name 27  "d"
                               Name 32  "gl_FragColor"
+                              Decorate 11(BaseColor) Location 1
+                              Decorate 17(bigColor) Location 0
+                              Decorate 27(d) Location 2
                               Decorate 32(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.double.comp.out b/Test/baseResults/spv.double.comp.out
index 7961fc6..800464c 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): 80008
+// Generated by (magic number): 8000a
 // 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 e9d4970..a8dab45 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 29
 
                               Capability Shader
@@ -21,6 +21,7 @@
                               Decorate 10(gl_BaseVertexARB) BuiltIn BaseVertex
                               Decorate 13(gl_BaseInstanceARB) BuiltIn BaseInstance
                               Decorate 16(gl_DrawIDARB) BuiltIn DrawIndex
+                              Decorate 21(pos) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.earlyReturnDiscard.frag.out b/Test/baseResults/spv.earlyReturnDiscard.frag.out
index a4eb8ca..8f983cb 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 110
 
                               Capability Shader
@@ -24,7 +24,17 @@
                               Name 77  "b"
                               Name 105  "gl_FragColor"
                               Name 109  "threshhold3"
+                              Decorate 11(BaseColor) Location 9
+                              Decorate 14(otherColor) Location 3
+                              Decorate 17(c) Location 4
+                              Decorate 19(d) Location 0
+                              Decorate 25(bigColor) Location 1
+                              Decorate 30(smallColor) Location 2
+                              Decorate 39(minimum) Location 8
+                              Decorate 51(threshhold) Location 5
+                              Decorate 63(threshhold2) Location 6
                               Decorate 105(gl_FragColor) Location 0
+                              Decorate 109(threshhold3) Location 7
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.explicittypes.frag.out b/Test/baseResults/spv.explicittypes.frag.out
index 9318913..3382872 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): 80008
+// Generated by (magic number): 8000a
 // 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
index 7a501dd..39e43a7 100644
--- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out
+++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
@@ -1,6 +1,6 @@
 spv.ext.AnyHitShader.rahit
 // Module Version 10400
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 94
 
                               Capability RayTracingProvisionalKHR
diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
index 7bbf710..7077ea4 100644
--- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
+++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
@@ -1,6 +1,6 @@
 spv.ext.ClosestHitShader.rchit
 // Module Version 10400
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 101
 
                               Capability RayTracingProvisionalKHR
diff --git a/Test/baseResults/spv.ext.IntersectShader.rint.out b/Test/baseResults/spv.ext.IntersectShader.rint.out
index f28b054..4a4a34a 100644
--- a/Test/baseResults/spv.ext.IntersectShader.rint.out
+++ b/Test/baseResults/spv.ext.IntersectShader.rint.out
@@ -1,6 +1,6 @@
 spv.ext.IntersectShader.rint
 // Module Version 10400
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 81
 
                               Capability RayTracingProvisionalKHR
diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out
index dbd6a2f..544901b 100644
--- a/Test/baseResults/spv.ext.MissShader.rmiss.out
+++ b/Test/baseResults/spv.ext.MissShader.rmiss.out
@@ -1,6 +1,6 @@
 spv.ext.MissShader.rmiss
 // Module Version 10400
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 54
 
                               Capability RayTracingProvisionalKHR
diff --git a/Test/baseResults/spv.ext.RayCallable.rcall.out b/Test/baseResults/spv.ext.RayCallable.rcall.out
index 4d9aba7..e87b5fa 100644
--- a/Test/baseResults/spv.ext.RayCallable.rcall.out
+++ b/Test/baseResults/spv.ext.RayCallable.rcall.out
@@ -1,6 +1,6 @@
 spv.ext.RayCallable.rcall
 // Module Version 10400
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 30
 
                               Capability RayTracingProvisionalKHR
diff --git a/Test/baseResults/spv.ext.RayConstants.rgen.out b/Test/baseResults/spv.ext.RayConstants.rgen.out
index 5094823..5d7079a 100644
--- a/Test/baseResults/spv.ext.RayConstants.rgen.out
+++ b/Test/baseResults/spv.ext.RayConstants.rgen.out
@@ -1,6 +1,6 @@
 spv.ext.RayConstants.rgen
 // Module Version 10400
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 27
 
                               Capability RayTracingProvisionalKHR
diff --git a/Test/baseResults/spv.ext.RayGenShader.rgen.out b/Test/baseResults/spv.ext.RayGenShader.rgen.out
index b233200..b1904ac 100644
--- a/Test/baseResults/spv.ext.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShader.rgen.out
@@ -1,6 +1,6 @@
 spv.ext.RayGenShader.rgen
 // Module Version 10400
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 58
 
                               Capability RayTraversalPrimitiveCullingProvisionalKHR
@@ -34,6 +34,8 @@
                               MemberDecorate 38(block) 0 Offset 0
                               MemberDecorate 38(block) 1 Offset 16
                               Decorate 38(block) Block
+                              Decorate 40 DescriptorSet 0
+                              Decorate 40 Binding 3
                               Decorate 51(accEXT1) DescriptorSet 0
                               Decorate 51(accEXT1) Binding 1
                               Decorate 54(imageu) DescriptorSet 0
diff --git a/Test/baseResults/spv.ext.RayGenShader11.rgen.out b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
index 36c7215..cfaf529 100644
--- a/Test/baseResults/spv.ext.RayGenShader11.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
@@ -1,6 +1,6 @@
 spv.ext.RayGenShader11.rgen
 // Module Version 10400
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 53
 
                               Capability RayTracingProvisionalKHR
@@ -30,6 +30,8 @@
                               MemberDecorate 37(block) 0 Offset 0
                               MemberDecorate 37(block) 1 Offset 16
                               Decorate 37(block) Block
+                              Decorate 39 DescriptorSet 0
+                              Decorate 39 Binding 1
                               Decorate 52(payload) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
index 8769fbd..25d46a6 100644
--- a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
@@ -1,6 +1,6 @@
 spv.ext.RayGenShaderArray.rgen
 // Module Version 10400
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 89
 
                               Capability ShaderNonUniformEXT
@@ -37,6 +37,8 @@
                               MemberDecorate 34(block) 1 Offset 16
                               MemberDecorate 34(block) 2 Offset 28
                               Decorate 34(block) Block
+                              Decorate 36 DescriptorSet 0
+                              Decorate 36 Binding 2
                               Decorate 60(accEXT1) DescriptorSet 0
                               Decorate 60(accEXT1) Binding 1
                               Decorate 75 DecorationNonUniformEXT
diff --git a/Test/baseResults/spv.ext.World3x4.rahit.out b/Test/baseResults/spv.ext.World3x4.rahit.out
new file mode 100755
index 0000000..ad877bd
--- /dev/null
+++ b/Test/baseResults/spv.ext.World3x4.rahit.out
@@ -0,0 +1,145 @@
+spv.ext.World3x4.rahit
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 90
+
+                              Capability RayTracingProvisionalKHR
+                              Extension  "SPV_KHR_ray_tracing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint AnyHitKHR 4  "main" 43 60 78 87 89
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              Name 4  "main"
+                              Name 8  "k"
+                              Name 12  "ndx"
+                              Name 14  "col"
+                              Name 25  "row"
+                              Name 39  "p"
+                              Name 43  "gl_LaunchIDEXT"
+                              Name 53  "r"
+                              Name 60  "gl_WorldToObject3x4EXT"
+                              Name 66  "indexable"
+                              Name 72  "c"
+                              Name 78  "result"
+                              Name 87  "attribs"
+                              Name 89  "hitValue"
+                              Decorate 43(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
+                              Decorate 60(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
+                              Decorate 78(result) DescriptorSet 0
+                              Decorate 78(result) Binding 0
+                              Decorate 89(hitValue) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:    6(float) Constant 1233125376
+              10:             TypeInt 32 1
+              11:             TypePointer Function 10(int)
+              13:     10(int) Constant 4294967295
+              15:     10(int) Constant 0
+              22:     10(int) Constant 3
+              23:             TypeBool
+              32:     10(int) Constant 4
+              35:     10(int) Constant 1
+              37:             TypeVector 10(int) 3
+              38:             TypePointer Function 37(ivec3)
+              40:             TypeInt 32 0
+              41:             TypeVector 40(int) 3
+              42:             TypePointer Input 41(ivec3)
+43(gl_LaunchIDEXT):     42(ptr) Variable Input
+              44:             TypeVector 40(int) 2
+              47:             TypeVector 10(int) 2
+              55:             TypeVector 6(float) 3
+              56:             TypeMatrix 55(fvec3) 4
+              57:             TypeVector 6(float) 4
+              58:             TypeMatrix 57(fvec4) 3
+              59:             TypePointer Input 56
+60(gl_WorldToObject3x4EXT):     59(ptr) Variable Input
+              65:             TypePointer Function 58
+              70:             TypeVector 10(int) 4
+              71:             TypePointer Function 70(ivec4)
+              76:             TypeImage 10(int) 3D nonsampled format:R32i
+              77:             TypePointer UniformConstant 76
+      78(result):     77(ptr) Variable UniformConstant
+              86:             TypePointer HitAttributeKHR 55(fvec3)
+     87(attribs):     86(ptr) Variable HitAttributeKHR
+              88:             TypePointer IncomingRayPayloadKHR 55(fvec3)
+    89(hitValue):     88(ptr) Variable IncomingRayPayloadKHR
+         4(main):           2 Function None 3
+               5:             Label
+            8(k):      7(ptr) Variable Function
+         12(ndx):     11(ptr) Variable Function
+         14(col):     11(ptr) Variable Function
+         25(row):     11(ptr) Variable Function
+           39(p):     38(ptr) Variable Function
+           53(r):      7(ptr) Variable Function
+   66(indexable):     65(ptr) Variable Function
+           72(c):     71(ptr) Variable Function
+                              Store 8(k) 9
+                              Store 12(ndx) 13
+                              Store 14(col) 15
+                              Branch 16
+              16:             Label
+                              LoopMerge 18 19 None
+                              Branch 20
+              20:             Label
+              21:     10(int) Load 14(col)
+              24:    23(bool) SLessThan 21 22
+                              BranchConditional 24 17 18
+              17:               Label
+                                Store 25(row) 15
+                                Branch 26
+              26:               Label
+                                LoopMerge 28 29 None
+                                Branch 30
+              30:               Label
+              31:     10(int)   Load 25(row)
+              33:    23(bool)   SLessThan 31 32
+                                BranchConditional 33 27 28
+              27:                 Label
+              34:     10(int)     Load 12(ndx)
+              36:     10(int)     IAdd 34 35
+                                  Store 12(ndx) 36
+              45:   41(ivec3)     Load 43(gl_LaunchIDEXT)
+              46:   44(ivec2)     VectorShuffle 45 45 0 1
+              48:   47(ivec2)     Bitcast 46
+              49:     10(int)     Load 12(ndx)
+              50:     10(int)     CompositeExtract 48 0
+              51:     10(int)     CompositeExtract 48 1
+              52:   37(ivec3)     CompositeConstruct 50 51 49
+                                  Store 39(p) 52
+              54:    6(float)     Load 8(k)
+              61:          56     Load 60(gl_WorldToObject3x4EXT)
+              62:          58     Transpose 61
+              63:     10(int)     Load 14(col)
+              64:     10(int)     Load 25(row)
+                                  Store 66(indexable) 62
+              67:      7(ptr)     AccessChain 66(indexable) 63 64
+              68:    6(float)     Load 67
+              69:    6(float)     FMul 54 68
+                                  Store 53(r) 69
+              73:    6(float)     Load 53(r)
+              74:     10(int)     ConvertFToS 73
+              75:   70(ivec4)     CompositeConstruct 74 15 15 35
+                                  Store 72(c) 75
+              79:          76     Load 78(result)
+              80:   37(ivec3)     Load 39(p)
+              81:   70(ivec4)     Load 72(c)
+                                  ImageWrite 79 80 81 SignExtend 
+                                  Branch 29
+              29:                 Label
+              82:     10(int)     Load 25(row)
+              83:     10(int)     IAdd 82 35
+                                  Store 25(row) 83
+                                  Branch 26
+              28:               Label
+                                Branch 19
+              19:               Label
+              84:     10(int)   Load 14(col)
+              85:     10(int)   IAdd 84 35
+                                Store 14(col) 85
+                                Branch 16
+              18:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.extPostDepthCoverage.frag.out b/Test/baseResults/spv.extPostDepthCoverage.frag.out
index 28d207b..cc96fb4 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): 80008
+// Generated by (magic number): 8000a
 // 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 ca1bca1..dd677b4 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 534
 
                               Capability Shader
@@ -115,6 +115,7 @@
                               Name 531  "f16_to_d"
                               Name 532  "f_to_f16"
                               Name 533  "d_to_f16"
+                              Decorate 465(if16v) Location 0
                               Decorate 512 ArrayStride 16
                               Decorate 513 ArrayStride 32
                               MemberDecorate 514(S) 0 Offset 0
@@ -340,7 +341,7 @@
              112:     35(ptr) AccessChain 42(f16v) 34
              113:28(float16_t) Load 112
              114:28(float16_t) Load 87(f16)
-             115:   109(bool) FOrdNotEqual 113 114
+             115:   109(bool) FUnordNotEqual 113 114
                               Store 111(b) 115
              116:     35(ptr) AccessChain 42(f16v) 90
              117:28(float16_t) Load 116
@@ -403,7 +404,7 @@
              161:151(f16vec3) Select 157 160 159
                               Store 153(f16v) 161
              162:151(f16vec3) Load 153(f16v)
-             163:  154(bvec3) FOrdNotEqual 162 159
+             163:  154(bvec3) FUnordNotEqual 162 159
                               Store 156(bv) 163
              168:  165(fvec3) Load 167(fv)
              169:151(f16vec3) FConvert 168
@@ -780,7 +781,7 @@
                               Store 442(bv) 459
              460:151(f16vec3) Load 443(f16v1)
              461:151(f16vec3) Load 445(f16v2)
-             462:  154(bvec3) FOrdNotEqual 460 461
+             462:  154(bvec3) FUnordNotEqual 460 461
                               Store 442(bv) 462
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.float16Fetch.frag.out b/Test/baseResults/spv.float16Fetch.frag.out
index 92ff631..38c5478 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): 80008
+// Generated by (magic number): 8000a
 // 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 5c8c292..1666f79 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): 80008
+// Generated by (magic number): 8000a
 // 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 b37bb6b..8eb42f6 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): 80008
+// Generated by (magic number): 8000a
 // 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 db413c4..df73497 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 533
 
                               Capability Shader
@@ -104,6 +104,7 @@
                               Name 530  "f16_to_d"
                               Name 531  "f_to_f16"
                               Name 532  "d_to_f16"
+                              Decorate 471(if32v) Location 0
                               Decorate 518 ArrayStride 16
                               Decorate 519 ArrayStride 32
                               MemberDecorate 520(S) 0 Offset 0
@@ -312,7 +313,7 @@
              110:     33(ptr) AccessChain 40(f32v) 32
              111:   26(float) Load 110
              112:   26(float) Load 85(f32)
-             113:   107(bool) FOrdNotEqual 111 112
+             113:   107(bool) FUnordNotEqual 111 112
                               Store 109(b) 113
              114:     33(ptr) AccessChain 40(f32v) 88
              115:   26(float) Load 114
@@ -382,7 +383,7 @@
              165:  153(fvec3) Select 161 164 163
                               Store 155(f32v) 165
              166:  153(fvec3) Load 155(f32v)
-             167:  158(bvec3) FOrdNotEqual 166 163
+             167:  158(bvec3) FUnordNotEqual 166 163
                               Store 160(bv) 167
              168:150(f64vec3) Load 152(f64v)
              169:  153(fvec3) FConvert 168
@@ -744,7 +745,7 @@
                               Store 448(bv) 465
              466:  153(fvec3) Load 449(f32v1)
              467:  153(fvec3) Load 451(f32v2)
-             468:  158(bvec3) FOrdNotEqual 466 467
+             468:  158(bvec3) FUnordNotEqual 466 467
                               Store 448(bv) 468
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out
index b98c870..8a69367 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 524
 
                               Capability Shader
@@ -105,6 +105,7 @@
                               Name 522  "f_to_f16"
                               Name 523  "d_to_f16"
                               Decorate 461(if64v) Flat
+                              Decorate 461(if64v) Location 0
                               Decorate 508 ArrayStride 16
                               Decorate 509 ArrayStride 64
                               MemberDecorate 510(S) 0 Offset 0
@@ -311,7 +312,7 @@
              110:     33(ptr) AccessChain 40(f64v) 32
              111:26(float64_t) Load 110
              112:26(float64_t) Load 85(f64)
-             113:   107(bool) FOrdNotEqual 111 112
+             113:   107(bool) FUnordNotEqual 111 112
                               Store 109(b) 113
              114:     33(ptr) AccessChain 40(f64v) 88
              115:26(float64_t) Load 114
@@ -377,7 +378,7 @@
              159:149(f64vec3) Select 155 158 157
                               Store 151(f64v) 159
              160:149(f64vec3) Load 151(f64v)
-             161:  152(bvec3) FOrdNotEqual 160 157
+             161:  152(bvec3) FUnordNotEqual 160 157
                               Store 154(bv) 161
              166:163(f16vec3) Load 165(f16v)
              167:149(f64vec3) FConvert 166
@@ -733,7 +734,7 @@
                               Store 438(bv) 455
              456:149(f64vec3) Load 439(f64v1)
              457:149(f64vec3) Load 441(f64v2)
-             458:  152(bvec3) FOrdNotEqual 456 457
+             458:  152(bvec3) FUnordNotEqual 456 457
                               Store 438(bv) 458
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.flowControl.frag.out b/Test/baseResults/spv.flowControl.frag.out
index fc68306..efbe63e 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 39
 
                               Capability Shader
@@ -19,6 +19,12 @@
                               Name 25  "bigColor"
                               Name 30  "smallColor"
                               Name 35  "gl_FragColor"
+                              Decorate 11(BaseColor) Location 5
+                              Decorate 14(otherColor) Location 3
+                              Decorate 17(c) Location 4
+                              Decorate 19(d) Location 0
+                              Decorate 25(bigColor) Location 1
+                              Decorate 30(smallColor) Location 2
                               Decorate 35(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.for-complex-condition.vert.out b/Test/baseResults/spv.for-complex-condition.vert.out
index 78252ee..ca971fd 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): 80008
+// Generated by (magic number): 8000a
 // 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 50c034e..4ba1cb9 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): 80008
+// Generated by (magic number): 8000a
 // 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 26844c2..b965a58 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): 80008
+// Generated by (magic number): 8000a
 // 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 ff85cb4..d3e9603 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 20
 
                               Capability Shader
diff --git a/Test/baseResults/spv.for-simple.vert.out b/Test/baseResults/spv.for-simple.vert.out
index a3e5d86..c4de996 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): 80008
+// Generated by (magic number): 8000a
 // 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 b4b0f5d..1aac9a6 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 131
 
                               Capability Shader
@@ -25,9 +25,14 @@
                               Name 94  "i"
                               Name 104  "f"
                               Name 117  "i"
+                              Decorate 11(BaseColor) Location 1
                               Decorate 24(Count) Flat
+                              Decorate 24(Count) Location 3
+                              Decorate 28(bigColor) Location 0
                               Decorate 36(gl_FragColor) Location 0
                               Decorate 53(v4) Flat
+                              Decorate 53(v4) Location 4
+                              Decorate 104(f) Location 2
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.forwardFun.frag.out b/Test/baseResults/spv.forwardFun.frag.out
index 26140af..f166286 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 60
 
                               Capability Shader
@@ -26,6 +26,8 @@
                               Decorate 15(bar) RelaxedPrecision
                               Decorate 18(color) RelaxedPrecision
                               Decorate 20(BaseColor) RelaxedPrecision
+                              Decorate 20(BaseColor) Location 1
+                              Decorate 21(param) RelaxedPrecision
                               Decorate 22 RelaxedPrecision
                               Decorate 23 RelaxedPrecision
                               Decorate 24 RelaxedPrecision
@@ -37,11 +39,13 @@
                               Decorate 32 RelaxedPrecision
                               Decorate 33 RelaxedPrecision
                               Decorate 36(d) RelaxedPrecision
+                              Decorate 36(d) Location 2
                               Decorate 37 RelaxedPrecision
                               Decorate 52 RelaxedPrecision
                               Decorate 55 RelaxedPrecision
                               Decorate 56 RelaxedPrecision
                               Decorate 59(bigColor) RelaxedPrecision
+                              Decorate 59(bigColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
diff --git a/Test/baseResults/spv.fragmentDensity-es.frag.out b/Test/baseResults/spv.fragmentDensity-es.frag.out
index 69f92c8..253ce2e 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): 80008
+// Generated by (magic number): 8000a
 // 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 5bdb43a..4c831f2 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): 80008
+// Generated by (magic number): 8000a
 // 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 fbded6e..2ea8f35 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): 80008
+// Generated by (magic number): 8000a
 // 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 22b84ba..74a3498 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): 80008
+// Generated by (magic number): 8000a
 // 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 b0c9713..3e06aed 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): 80008
+// Generated by (magic number): 8000a
 // 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 4dbea15..ae7b426 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 18
 
                               Capability Shader
@@ -15,6 +15,7 @@
                               Name 4  "main"
                               Name 9  "color"
                               Name 12  "gl_FragFullyCoveredNV"
+                              Decorate 9(color) Location 0
                               Decorate 12(gl_FragFullyCoveredNV) BuiltIn FullyCoveredEXT
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.functionCall.frag.out b/Test/baseResults/spv.functionCall.frag.out
index 4fa7863..58b0461 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 76
 
                               Capability Shader
@@ -28,7 +28,10 @@
                               Name 66  "g"
                               Name 69  "gl_FragColor"
                               Name 75  "bigColor"
+                              Decorate 35(d) Location 2
+                              Decorate 58(BaseColor) Location 1
                               Decorate 69(gl_FragColor) Location 0
+                              Decorate 75(bigColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.functionNestedOpaque.vert.out b/Test/baseResults/spv.functionNestedOpaque.vert.out
index 4543895..96a64aa 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 39
 
                               Capability Shader
@@ -19,6 +19,8 @@
                               Name 21  "bar(struct-S-s211;"
                               Name 20  "p"
                               Name 36  "si"
+                              Decorate 36(si) DescriptorSet 0
+                              Decorate 36(si) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.functionParameterTypes.frag.out b/Test/baseResults/spv.functionParameterTypes.frag.out
index decc190..65a33da 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): 80008
+// Generated by (magic number): 8000a
 // 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 000a7bc..f12aae0 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 156
 
                               Capability Shader
@@ -42,6 +42,7 @@
                               Name 133  "param"
                               Name 136  "arg"
                               Name 152  "gl_FragColor"
+                              Decorate 76(u) Location 0
                               Decorate 152(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.glFragColor.frag.out b/Test/baseResults/spv.glFragColor.frag.out
index af25280..df39129 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): 80008
+// Generated by (magic number): 8000a
 // 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 9872f4a..01df400 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): 80008
+// Generated by (magic number): 8000a
 // 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 b52e220..e475a00 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): 80008
+// Generated by (magic number): 8000a
 // 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 1d2e6b4..40089e7 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): 80008
+// Generated by (magic number): 8000a
 // 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 b1cdb6b..cc71283 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): 80008
+// Generated by (magic number): 8000a
 // 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 63d26d8..3e2096d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 395
 
                               Capability Shader
@@ -68,13 +68,17 @@
                               Decorate 108(i2DMSArray) DescriptorSet 0
                               Decorate 108(i2DMSArray) Binding 10
                               Decorate 132(ic1D) Flat
+                              Decorate 132(ic1D) Location 0
                               Decorate 142(ic2D) Flat
+                              Decorate 142(ic2D) Location 1
                               Decorate 152(ic3D) Flat
+                              Decorate 152(ic3D) Location 2
                               Decorate 232(ii1D) DescriptorSet 0
                               Decorate 232(ii1D) Binding 11
                               Decorate 245(ui2D) DescriptorSet 0
                               Decorate 245(ui2D) Binding 12
                               Decorate 248(value) Flat
+                              Decorate 248(value) Location 4
                               Decorate 357(ii2DMS) DescriptorSet 0
                               Decorate 357(ii2DMS) Binding 13
                               Decorate 367(ui2DMSArray) DescriptorSet 0
@@ -82,7 +86,9 @@
                               Decorate 376(wo2D) DescriptorSet 0
                               Decorate 376(wo2D) Binding 1
                               Decorate 376(wo2D) NonReadable
+                              Decorate 381(fragData) Location 0
                               Decorate 394(ic4D) Flat
+                              Decorate 394(ic4D) Location 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.imageLoadStoreLod.frag.out b/Test/baseResults/spv.imageLoadStoreLod.frag.out
index ec16d90..2f83604 100644
--- a/Test/baseResults/spv.imageLoadStoreLod.frag.out
+++ b/Test/baseResults/spv.imageLoadStoreLod.frag.out
@@ -1,6 +1,6 @@
 spv.imageLoadStoreLod.frag
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // 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 3f6179b..50dbe6c 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): 80008
+// Generated by (magic number): 8000a
 // 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 ff8a446..b58e718 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): 80008
+// Generated by (magic number): 8000a
 // 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 1e8cd70..0ef51e8 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): 80008
+// Generated by (magic number): 8000a
 // 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 4510134..4b5e450 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): 80008
+// Generated by (magic number): 8000a
 // 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 c84ca7e..e88707d 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): 80008
+// Generated by (magic number): 8000a
 // 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 272233e..d57c306 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 268
 
                               Capability Shader
@@ -38,6 +38,21 @@
                               Name 173  "u3"
                               Name 182  "i3"
                               Name 247  "v4"
+                              Decorate 9(iout) Location 1
+                              Decorate 15(uout) Location 0
+                              Decorate 21(fout) Location 2
+                              Decorate 26(u2) Location 1
+                              Decorate 47(u1) Location 0
+                              Decorate 67(u4) Location 3
+                              Decorate 83(i4) Location 11
+                              Decorate 100(v3) Location 6
+                              Decorate 121(v1) Location 4
+                              Decorate 142(v2) Location 5
+                              Decorate 146(i2) Location 9
+                              Decorate 156(i1) Location 8
+                              Decorate 173(u3) Location 2
+                              Decorate 182(i3) Location 10
+                              Decorate 247(v4) Location 7
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.intcoopmat.comp.out b/Test/baseResults/spv.intcoopmat.comp.out
index 940ba33..e74f44e 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): 80008
+// Generated by (magic number): 8000a
 // 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 7ec4f9f..6c285e7 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 100
 
                               Capability Shader
@@ -19,8 +19,15 @@
                               Name 47  "samp"
                               Name 72  "offset"
                               Name 98  "fragColor"
+                              Decorate 13(if1) Location 0
+                              Decorate 24(if2) Location 1
+                              Decorate 33(if3) Location 2
+                              Decorate 41(if4) Location 3
                               Decorate 47(samp) Flat
+                              Decorate 47(samp) Location 4
                               Decorate 72(offset) Flat
+                              Decorate 72(offset) Location 5
+                              Decorate 98(fragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.layoutNested.vert.out b/Test/baseResults/spv.layoutNested.vert.out
index 44d58ab..7de04d4 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 66
 
                               Capability Shader
@@ -167,11 +167,13 @@
                               Decorate 60(bBtn3) DescriptorSet 1
                               Decorate 60(bBtn3) Binding 0
                               Decorate 62(sout) Flat
+                              Decorate 62(sout) Location 0
                               MemberDecorate 63(S) 0 Invariant
                               MemberDecorate 63(S) 1 RelaxedPrecision
                               MemberDecorate 63(S) 1 Invariant
                               MemberDecorate 63(S) 2 RelaxedPrecision
                               MemberDecorate 63(S) 2 Invariant
+                              Decorate 65(soutinv) Location 10
                               Decorate 65(soutinv) Invariant
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.length.frag.out b/Test/baseResults/spv.length.frag.out
index de391bc..8957a3c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 33
 
                               Capability Shader
@@ -14,6 +14,7 @@
                               Name 14  "v"
                               Name 26  "gl_FragColor"
                               Name 32  "u"
+                              Decorate 14(v) Location 0
                               Decorate 26(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out
index adfa0fd..637fb6d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 136
 
                               Capability Shader
@@ -39,12 +39,18 @@
                               Name 134  "foo"
                               Name 135  "foo2"
                               Decorate 15(foo3) Flat
+                              Decorate 15(foo3) Location 9
+                              Decorate 40(coord) Location 0
                               Decorate 90(condition) Flat
+                              Decorate 90(condition) Location 18
+                              Decorate 98(color) Location 1
                               Decorate 108(gl_FragColor) Location 0
                               Decorate 128(samp2D) DescriptorSet 0
                               Decorate 128(samp2D) Binding 0
                               Decorate 134(foo) Flat
+                              Decorate 134(foo) Location 2
                               Decorate 135(foo2) Flat
+                              Decorate 135(foo2) Location 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.loops.frag.out b/Test/baseResults/spv.loops.frag.out
index a3a3423..7178f35 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 725
 
                               Capability Shader
@@ -48,8 +48,38 @@
                               Name 649  "d16"
                               Name 687  "d18"
                               Name 698  "d17"
+                              Decorate 11(BaseColor) Location 11
+                              Decorate 54(d) Location 12
+                              Decorate 57(bigColor) Location 0
+                              Decorate 71(bigColor1_1) Location 1
+                              Decorate 106(d2) Location 13
+                              Decorate 114(d3) Location 14
+                              Decorate 118(bigColor1_2) Location 2
+                              Decorate 131(bigColor1_3) Location 3
+                              Decorate 137(d4) Location 15
                               Decorate 157(Count) Flat
+                              Decorate 157(Count) Location 29
+                              Decorate 160(bigColor2) Location 4
+                              Decorate 171(bigColor3) Location 5
+                              Decorate 308(bigColor4) Location 6
+                              Decorate 344(bigColor5) Location 7
+                              Decorate 350(d5) Location 16
+                              Decorate 366(d6) Location 17
+                              Decorate 380(bigColor6) Location 8
+                              Decorate 418(d7) Location 18
+                              Decorate 450(bigColor7) Location 9
+                              Decorate 469(d8) Location 19
+                              Decorate 512(d9) Location 20
+                              Decorate 544(d10) Location 21
+                              Decorate 552(d11) Location 22
+                              Decorate 562(d12) Location 23
+                              Decorate 588(bigColor8) Location 10
                               Decorate 615(gl_FragColor) Location 0
+                              Decorate 624(d14) Location 24
+                              Decorate 629(d15) Location 25
+                              Decorate 649(d16) Location 26
+                              Decorate 687(d18) Location 28
+                              Decorate 698(d17) Location 27
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.loopsArtificial.frag.out b/Test/baseResults/spv.loopsArtificial.frag.out
index 65329d4..4de834d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 158
 
                               Capability Shader
@@ -30,8 +30,26 @@
                               Name 153  "d2"
                               Name 154  "d3"
                               Name 157  "Count"
+                              Decorate 11(BaseColor) Location 11
+                              Decorate 17(bigColor4) Location 6
+                              Decorate 27(d4) Location 15
+                              Decorate 80(d13) Location 16
                               Decorate 140(gl_FragColor) Location 0
+                              Decorate 142(bigColor) Location 0
+                              Decorate 143(bigColor1_1) Location 1
+                              Decorate 144(bigColor1_2) Location 2
+                              Decorate 145(bigColor1_3) Location 3
+                              Decorate 146(bigColor2) Location 4
+                              Decorate 147(bigColor3) Location 5
+                              Decorate 148(bigColor5) Location 7
+                              Decorate 149(bigColor6) Location 8
+                              Decorate 150(bigColor7) Location 9
+                              Decorate 151(bigColor8) Location 10
+                              Decorate 152(d) Location 12
+                              Decorate 153(d2) Location 13
+                              Decorate 154(d3) Location 14
                               Decorate 157(Count) Flat
+                              Decorate 157(Count) Location 17
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.matFun.vert.out b/Test/baseResults/spv.matFun.vert.out
index d39160d..932018f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 103
 
                               Capability Shader
@@ -45,6 +45,7 @@
                               Decorate 77(bl) Block
                               Decorate 79(bName) DescriptorSet 0
                               Decorate 79(bName) Binding 0
+                              Decorate 81(v3) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.matrix.frag.out b/Test/baseResults/spv.matrix.frag.out
index f7b6ce3..a287cda 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 286
 
                               Capability Shader
@@ -23,6 +23,12 @@
                               Name 174  "m43"
                               Name 179  "m4"
                               Name 187  "color"
+                              Decorate 12(m1) Location 0
+                              Decorate 14(m2) Location 3
+                              Decorate 28(f) Location 6
+                              Decorate 161(v4) Location 8
+                              Decorate 169(v3) Location 7
+                              Decorate 187(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.matrix2.frag.out b/Test/baseResults/spv.matrix2.frag.out
index 77a098a..13f2708 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 221
 
                               Capability Shader
@@ -27,6 +27,18 @@
                               Name 218  "colorTransform"
                               Name 219  "m"
                               Name 220  "n"
+                              Decorate 12(v) Location 28
+                              Decorate 16(u) Location 29
+                              Decorate 37(FragColor) Location 0
+                              Decorate 38(Color) Location 3
+                              Decorate 65(un34) Location 16
+                              Decorate 87(um43) Location 12
+                              Decorate 147(um4) Location 24
+                              Decorate 158(um2) Location 19
+                              Decorate 181(um3) Location 21
+                              Decorate 218(colorTransform) Location 0
+                              Decorate 219(m) Location 4
+                              Decorate 220(n) Location 8
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out
index 737e862..5f0647b 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 97
 
                               Capability Shader
@@ -67,7 +67,7 @@
                               MemberDecorate 50(Buffer) 5 Offset 56
                               Decorate 50(Buffer) BufferBlock
                               Decorate 52 DescriptorSet 0
-                              Decorate 52 Binding 0
+                              Decorate 52 Binding 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.memoryScopeSemantics.comp.out b/Test/baseResults/spv.memoryScopeSemantics.comp.out
index b8721f2..56c8470 100644
--- a/Test/baseResults/spv.memoryScopeSemantics.comp.out
+++ b/Test/baseResults/spv.memoryScopeSemantics.comp.out
@@ -1,6 +1,6 @@
 spv.memoryScopeSemantics.comp
 // Module Version 10300
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 169
 
                               Capability Shader
diff --git a/Test/baseResults/spv.merge-unreachable.frag.out b/Test/baseResults/spv.merge-unreachable.frag.out
index 3eab4ec..dedec9c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 25
 
                               Capability Shader
diff --git a/Test/baseResults/spv.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
index cea7e4d..f0c252a 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): 80008
+// Generated by (magic number): 8000a
 // 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 75f8c63..907ae28 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): 80008
+// Generated by (magic number): 8000a
 // 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 de019a2..26e8624 100644
--- a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
+++ b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
@@ -1,6 +1,7 @@
 spv.meshShaderPerViewUserDefined.mesh
+Validation failed
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // 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 e9ebd44..66c3a0d 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): 80008
+// Generated by (magic number): 8000a
 // 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 38542d5..9f881e6 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): 80008
+// Generated by (magic number): 8000a
 // 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 adac07f..7960ffa 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 77
 
                               Capability StorageImageWriteWithoutFormat
@@ -31,7 +31,7 @@
                               MemberDecorate 37(block0) 0 Offset 0
                               Decorate 37(block0) Block
                               Decorate 39 DescriptorSet 0
-                              Decorate 39 Binding 0
+                              Decorate 39 Binding 1
                               Decorate 55(uni_image) DescriptorSet 0
                               Decorate 55(uni_image) Binding 0
                               Decorate 55(uni_image) NonReadable
diff --git a/Test/baseResults/spv.meshShaderTaskMem.mesh.out b/Test/baseResults/spv.meshShaderTaskMem.mesh.out
index 057e0fd..be80439 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 58
 
                               Capability MeshShadingNV
@@ -38,6 +38,7 @@
                               MemberDecorate 28(taskBlock) 1 PerTaskNV
                               MemberDecorate 28(taskBlock) 1 Offset 16
                               Decorate 28(taskBlock) Block
+                              Decorate 30(mytask) Location 0
                               Decorate 35 ArrayStride 4
                               MemberDecorate 36(bufferBlock) 0 Offset 0
                               MemberDecorate 36(bufferBlock) 1 Offset 16
diff --git a/Test/baseResults/spv.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.meshShaderUserDefined.mesh.out
index 43579bb..fc2730c 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): 80008
+// Generated by (magic number): 8000a
 // 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 96d37c4..9fed191 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 116
 
                               Capability StorageImageWriteWithoutFormat
@@ -39,7 +39,7 @@
                               MemberDecorate 47(block0) 0 Offset 0
                               Decorate 47(block0) Block
                               Decorate 49 DescriptorSet 0
-                              Decorate 49 Binding 0
+                              Decorate 49 Binding 1
                               Decorate 65(uni_image) DescriptorSet 0
                               Decorate 65(uni_image) Binding 0
                               Decorate 65(uni_image) NonReadable
@@ -51,6 +51,7 @@
                               MemberDecorate 88(Task) 2 PerTaskNV
                               MemberDecorate 88(Task) 2 Offset 32
                               Decorate 88(Task) Block
+                              Decorate 90(mytask) Location 0
                               Decorate 113(gl_TaskCountNV) BuiltIn TaskCountNV
                               Decorate 115 BuiltIn WorkgroupSize
                2:             TypeVoid
diff --git a/Test/baseResults/spv.multiStruct.comp.out b/Test/baseResults/spv.multiStruct.comp.out
index 679a4bd..13a3528 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): 80008
+// Generated by (magic number): 8000a
 // 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 9312fe9..dd57cd1 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): 80008
+// Generated by (magic number): 8000a
 // 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 5363352..a1575d9 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 17
 
                               Capability Shader
@@ -14,6 +14,7 @@
                               Name 4  "main"
                               Name 9  "color"
                               Name 12  "gl_ViewIndex"
+                              Decorate 9(color) Location 0
                               Decorate 12(gl_ViewIndex) Flat
                               Decorate 12(gl_ViewIndex) BuiltIn ViewIndex
                2:             TypeVoid
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
index 16e81a1..b1c29f9 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): 80008
+// Generated by (magic number): 8000a
 // 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 acca44e..0a4e1f0 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): 80008
+// Generated by (magic number): 8000a
 // 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 6bbb032..332ca66 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 284
 
                               Capability Shader
@@ -46,33 +46,41 @@
                               Name 283  "ic4D"
                               Decorate 13(s2D) DescriptorSet 0
                               Decorate 13(s2D) Binding 0
+                              Decorate 17(c2D) Location 1
                               Decorate 23(sCubeArrayShadow) DescriptorSet 0
-                              Decorate 23(sCubeArrayShadow) Binding 0
+                              Decorate 23(sCubeArrayShadow) Binding 5
+                              Decorate 26(c4D) Location 3
+                              Decorate 29(c1D) Location 0
                               Decorate 42(s3D) DescriptorSet 0
-                              Decorate 42(s3D) Binding 0
+                              Decorate 42(s3D) Binding 2
                               Decorate 51(s2DArray) DescriptorSet 0
-                              Decorate 51(s2DArray) Binding 0
+                              Decorate 51(s2DArray) Binding 7
+                              Decorate 55(c3D) Location 2
                               Decorate 64(s2DShadow) DescriptorSet 0
-                              Decorate 64(s2DShadow) Binding 0
+                              Decorate 64(s2DShadow) Binding 6
                               Decorate 81(ic3D) Flat
+                              Decorate 81(ic3D) Location 6
                               Decorate 84(ic1D) Flat
+                              Decorate 84(ic1D) Location 4
                               Decorate 92(ic2D) Flat
+                              Decorate 92(ic2D) Location 5
                               Decorate 102(sr) DescriptorSet 0
-                              Decorate 102(sr) Binding 0
+                              Decorate 102(sr) Binding 1
                               Decorate 128(sCube) DescriptorSet 0
-                              Decorate 128(sCube) Binding 0
+                              Decorate 128(sCube) Binding 3
                               Decorate 139(s2DArrayShadow) DescriptorSet 0
-                              Decorate 139(s2DArrayShadow) Binding 0
+                              Decorate 139(s2DArrayShadow) Binding 8
                               Decorate 171(is2D) DescriptorSet 0
-                              Decorate 171(is2D) Binding 0
+                              Decorate 171(is2D) Binding 9
                               Decorate 208(is3D) DescriptorSet 0
-                              Decorate 208(is3D) Binding 0
+                              Decorate 208(is3D) Binding 10
                               Decorate 220(isCube) DescriptorSet 0
-                              Decorate 220(isCube) Binding 0
+                              Decorate 220(isCube) Binding 11
                               Decorate 232(is2DArray) DescriptorSet 0
-                              Decorate 232(is2DArray) Binding 0
+                              Decorate 232(is2DArray) Binding 12
                               Decorate 247(sCubeShadow) DescriptorSet 0
-                              Decorate 247(sCubeShadow) Binding 0
+                              Decorate 247(sCubeShadow) Binding 4
+                              Decorate 253(FragData) Location 0
                               Decorate 265(is2Dms) DescriptorSet 0
                               Decorate 265(is2Dms) Binding 0
                               Decorate 269(us2D) DescriptorSet 0
@@ -84,6 +92,7 @@
                               Decorate 281(us2DArray) DescriptorSet 0
                               Decorate 281(us2DArray) Binding 0
                               Decorate 283(ic4D) Flat
+                              Decorate 283(ic4D) Location 7
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.noBuiltInLoc.vert.out b/Test/baseResults/spv.noBuiltInLoc.vert.out
index 7a45e72..6322052 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): 80008
+// Generated by (magic number): 8000a
 // 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 a555ba2..4a4d7b3 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 32
 
                               Capability Shader
@@ -23,6 +23,7 @@
                               MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize
                               Decorate 20(gl_PerVertex) Block
+                              Decorate 26(param) RelaxedPrecision
                               Decorate 27 RelaxedPrecision
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.noWorkgroup.comp.out b/Test/baseResults/spv.noWorkgroup.comp.out
index 92ae670..9cd130c 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): 80008
+// Generated by (magic number): 8000a
 // 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 9746fe0..3728dd5 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 90
 
                               Capability Shader
@@ -16,7 +16,10 @@
                               Name 22  "m32"
                               Name 28  "gl_Position"
                               Name 55  "v4"
+                              Decorate 12(v3) Location 0
+                              Decorate 22(m32) Location 0
                               Decorate 28(gl_Position) BuiltIn Position
+                              Decorate 55(v4) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out
index 6b7d407..8d61619 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 212
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonuniform2.frag.out b/Test/baseResults/spv.nonuniform2.frag.out
index 759f4c4..bb89ba7 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonuniform3.frag.out b/Test/baseResults/spv.nonuniform3.frag.out
index 9314261..b48916c 100644
--- a/Test/baseResults/spv.nonuniform3.frag.out
+++ b/Test/baseResults/spv.nonuniform3.frag.out
@@ -1,6 +1,6 @@
 spv.nonuniform3.frag
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 32
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonuniform4.frag.out b/Test/baseResults/spv.nonuniform4.frag.out
index a9dd520..92cbd36 100644
--- a/Test/baseResults/spv.nonuniform4.frag.out
+++ b/Test/baseResults/spv.nonuniform4.frag.out
@@ -1,6 +1,6 @@
 spv.nonuniform4.frag
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 24
 
                               Capability Shader
diff --git a/Test/baseResults/spv.nonuniform5.frag.out b/Test/baseResults/spv.nonuniform5.frag.out
index 8ce131a..ebbb6f4 100644
--- a/Test/baseResults/spv.nonuniform5.frag.out
+++ b/Test/baseResults/spv.nonuniform5.frag.out
@@ -1,6 +1,6 @@
 spv.nonuniform5.frag
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 23
 
                               Capability Shader
diff --git a/Test/baseResults/spv.offsets.frag.out b/Test/baseResults/spv.offsets.frag.out
index 08a75e9..a1a9f31 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): 80008
+// Generated by (magic number): 8000a
 // 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 df13c65..a535cd3 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): 80008
+// Generated by (magic number): 8000a
 // 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 9943ee9..2a37f2b 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): 80008
+// Generated by (magic number): 8000a
 // 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 12c5fa5..549ae91 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 65
 
                               Capability Shader
@@ -60,8 +60,11 @@
                               Decorate 22(texSampler1D) DescriptorSet 0
                               Decorate 22(texSampler1D) Binding 0
                               Decorate 37(texSampler2D) DescriptorSet 0
-                              Decorate 37(texSampler2D) Binding 0
+                              Decorate 37(texSampler2D) Binding 1
+                              Decorate 41(coords2D) Location 2
                               Decorate 53(gl_FragColor) Location 0
+                              Decorate 56(u) Location 1
+                              Decorate 59(blend) Location 0
                3:             TypeVoid
                4:             TypeFunction 3
                7:             TypeFloat 32
diff --git a/Test/baseResults/spv.precise.tesc.out b/Test/baseResults/spv.precise.tesc.out
index 840e7b3..e13c612 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): 80008
+// Generated by (magic number): 8000a
 // 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 b59ac0e..a23b073 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): 80008
+// Generated by (magic number): 8000a
 // 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 ac4c0aa..973147d 100644
--- a/Test/baseResults/spv.precision.frag.out
+++ b/Test/baseResults/spv.precision.frag.out
@@ -1,12 +1,12 @@
 spv.precision.frag
 // Module Version 10000
-// Generated by (magic number): 80008
-// Id's are bound by 127
+// Generated by (magic number): 8000a
+// Id's are bound by 146
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 23 59 61 73 116
+                              EntryPoint Fragment 4  "main" 23 62 64 76 119
                               ExecutionMode 4 OriginUpperLeft
                               Source ESSL 310
                               Name 4  "main"
@@ -15,72 +15,88 @@
                               Name 19  "boolfun(vb2;"
                               Name 18  "bv2"
                               Name 23  "highfin"
-                              Name 38  "sum"
-                              Name 40  "uniform_medium"
-                              Name 42  "uniform_high"
-                              Name 48  "uniform_low"
-                              Name 53  "arg1"
-                              Name 55  "arg2"
-                              Name 57  "d"
-                              Name 59  "lowfin"
-                              Name 61  "mediumfin"
-                              Name 65  "global_highp"
-                              Name 69  "local_highp"
-                              Name 73  "mediumfout"
-                              Name 104  "ub2"
-                              Name 105  "param"
-                              Name 114  "S"
-                              MemberName 114(S) 0  "a"
-                              MemberName 114(S) 1  "b"
-                              Name 116  "s"
+                              Name 41  "sum"
+                              Name 43  "uniform_medium"
+                              Name 45  "uniform_high"
+                              Name 51  "uniform_low"
+                              Name 56  "arg1"
+                              Name 58  "arg2"
+                              Name 60  "d"
+                              Name 62  "lowfin"
+                              Name 64  "mediumfin"
+                              Name 68  "global_highp"
+                              Name 72  "local_highp"
+                              Name 76  "mediumfout"
+                              Name 107  "ub2"
+                              Name 108  "param"
+                              Name 117  "S"
+                              MemberName 117(S) 0  "a"
+                              MemberName 117(S) 1  "b"
+                              Name 119  "s"
                               Decorate 12(foo(vf3;) RelaxedPrecision
                               Decorate 11(mv3) RelaxedPrecision
-                              Decorate 38(sum) RelaxedPrecision
-                              Decorate 40(uniform_medium) RelaxedPrecision
-                              Decorate 41 RelaxedPrecision
-                              Decorate 46 RelaxedPrecision
-                              Decorate 48(uniform_low) RelaxedPrecision
+                              Decorate 23(highfin) Location 2
+                              Decorate 27 RelaxedPrecision
+                              Decorate 28 RelaxedPrecision
+                              Decorate 41(sum) RelaxedPrecision
+                              Decorate 43(uniform_medium) RelaxedPrecision
+                              Decorate 44 RelaxedPrecision
                               Decorate 49 RelaxedPrecision
-                              Decorate 50 RelaxedPrecision
-                              Decorate 51 RelaxedPrecision
-                              Decorate 53(arg1) RelaxedPrecision
-                              Decorate 55(arg2) RelaxedPrecision
-                              Decorate 57(d) RelaxedPrecision
-                              Decorate 59(lowfin) RelaxedPrecision
-                              Decorate 60 RelaxedPrecision
-                              Decorate 61(mediumfin) RelaxedPrecision
-                              Decorate 62 RelaxedPrecision
+                              Decorate 51(uniform_low) RelaxedPrecision
+                              Decorate 52 RelaxedPrecision
+                              Decorate 53 RelaxedPrecision
+                              Decorate 54 RelaxedPrecision
+                              Decorate 56(arg1) RelaxedPrecision
+                              Decorate 58(arg2) RelaxedPrecision
+                              Decorate 60(d) RelaxedPrecision
+                              Decorate 62(lowfin) RelaxedPrecision
+                              Decorate 62(lowfin) Location 0
                               Decorate 63 RelaxedPrecision
-                              Decorate 73(mediumfout) RelaxedPrecision
-                              Decorate 74 RelaxedPrecision
-                              Decorate 75 RelaxedPrecision
-                              Decorate 76 RelaxedPrecision
+                              Decorate 64(mediumfin) RelaxedPrecision
+                              Decorate 64(mediumfin) Location 1
+                              Decorate 65 RelaxedPrecision
+                              Decorate 66 RelaxedPrecision
+                              Decorate 76(mediumfout) RelaxedPrecision
+                              Decorate 76(mediumfout) Location 0
                               Decorate 77 RelaxedPrecision
                               Decorate 78 RelaxedPrecision
                               Decorate 79 RelaxedPrecision
-                              Decorate 83 RelaxedPrecision
-                              Decorate 85 RelaxedPrecision
-                              Decorate 87 RelaxedPrecision
+                              Decorate 80 RelaxedPrecision
+                              Decorate 81 RelaxedPrecision
+                              Decorate 82 RelaxedPrecision
+                              Decorate 86 RelaxedPrecision
                               Decorate 88 RelaxedPrecision
                               Decorate 90 RelaxedPrecision
                               Decorate 91 RelaxedPrecision
+                              Decorate 93 RelaxedPrecision
                               Decorate 94 RelaxedPrecision
-                              Decorate 95 RelaxedPrecision
-                              Decorate 96 RelaxedPrecision
                               Decorate 97 RelaxedPrecision
                               Decorate 98 RelaxedPrecision
                               Decorate 99 RelaxedPrecision
                               Decorate 100 RelaxedPrecision
                               Decorate 101 RelaxedPrecision
                               Decorate 102 RelaxedPrecision
-                              Decorate 110 RelaxedPrecision
-                              Decorate 112 RelaxedPrecision
+                              Decorate 103 RelaxedPrecision
+                              Decorate 104 RelaxedPrecision
+                              Decorate 105 RelaxedPrecision
                               Decorate 113 RelaxedPrecision
-                              MemberDecorate 114(S) 1 RelaxedPrecision
-                              Decorate 120 RelaxedPrecision
-                              Decorate 124 RelaxedPrecision
-                              Decorate 125 RelaxedPrecision
-                              Decorate 126 RelaxedPrecision
+                              Decorate 115 RelaxedPrecision
+                              Decorate 116 RelaxedPrecision
+                              MemberDecorate 117(S) 1 RelaxedPrecision
+                              Decorate 119(s) Location 3
+                              Decorate 123 RelaxedPrecision
+                              Decorate 127 RelaxedPrecision
+                              Decorate 128 RelaxedPrecision
+                              Decorate 129 RelaxedPrecision
+                              Decorate 130 RelaxedPrecision
+                              Decorate 131 RelaxedPrecision
+                              Decorate 132 RelaxedPrecision
+                              Decorate 135 RelaxedPrecision
+                              Decorate 139 RelaxedPrecision
+                              Decorate 140 RelaxedPrecision
+                              Decorate 143 RelaxedPrecision
+                              Decorate 144 RelaxedPrecision
+                              Decorate 145 RelaxedPrecision
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -95,134 +111,161 @@
               21:             TypeVector 6(float) 4
               22:             TypePointer Input 21(fvec4)
      23(highfin):     22(ptr) Variable Input
-              29:    14(bool) ConstantFalse
-              30:    14(bool) ConstantTrue
-              31:   15(bvec2) ConstantComposite 29 30
-              36:             TypeInt 32 1
-              37:             TypePointer Function 36(int)
-              39:             TypePointer Private 36(int)
-40(uniform_medium):     39(ptr) Variable Private
-42(uniform_high):     39(ptr) Variable Private
- 48(uniform_low):     39(ptr) Variable Private
-              52:             TypePointer Function 6(float)
-              54:    6(float) Constant 1078774989
-              56:    6(float) Constant 1232730691
-              58:             TypePointer Input 6(float)
-      59(lowfin):     58(ptr) Variable Input
-   61(mediumfin):     58(ptr) Variable Input
-              64:             TypePointer Private 6(float)
-65(global_highp):     64(ptr) Variable Private
-              68:             TypePointer Function 21(fvec4)
-              72:             TypePointer Output 21(fvec4)
-  73(mediumfout):     72(ptr) Variable Output
-              82:     36(int) Constant 4
-              84:             TypeVector 36(int) 2
-              92:             TypeInt 32 0
-              93:     92(int) Constant 0
-             103:             TypePointer Private 15(bvec2)
-        104(ub2):    103(ptr) Variable Private
-             111:    6(float) Constant 1065353216
-          114(S):             TypeStruct 6(float) 6(float)
-             115:             TypePointer Input 114(S)
-          116(s):    115(ptr) Variable Input
-             117:     36(int) Constant 0
-             122:     36(int) Constant 1
+              26:             TypePointer Function 9(fvec2)
+              32:    14(bool) ConstantFalse
+              33:    14(bool) ConstantTrue
+              34:   15(bvec2) ConstantComposite 32 33
+              39:             TypeInt 32 1
+              40:             TypePointer Function 39(int)
+              42:             TypePointer Private 39(int)
+43(uniform_medium):     42(ptr) Variable Private
+45(uniform_high):     42(ptr) Variable Private
+ 51(uniform_low):     42(ptr) Variable Private
+              55:             TypePointer Function 6(float)
+              57:    6(float) Constant 1078774989
+              59:    6(float) Constant 1232730691
+              61:             TypePointer Input 6(float)
+      62(lowfin):     61(ptr) Variable Input
+   64(mediumfin):     61(ptr) Variable Input
+              67:             TypePointer Private 6(float)
+68(global_highp):     67(ptr) Variable Private
+              71:             TypePointer Function 21(fvec4)
+              75:             TypePointer Output 21(fvec4)
+  76(mediumfout):     75(ptr) Variable Output
+              85:     39(int) Constant 4
+              87:             TypeVector 39(int) 2
+              95:             TypeInt 32 0
+              96:     95(int) Constant 0
+             106:             TypePointer Private 15(bvec2)
+        107(ub2):    106(ptr) Variable Private
+             114:    6(float) Constant 1065353216
+          117(S):             TypeStruct 6(float) 6(float)
+             118:             TypePointer Input 117(S)
+          119(s):    118(ptr) Variable Input
+             120:     39(int) Constant 0
+             125:     39(int) Constant 1
+             133:    6(float) Constant 1082549862
+             138:    6(float) Constant 1073741824
+             142:    6(float) Constant 1077936128
          4(main):           2 Function None 3
                5:             Label
-         38(sum):     37(ptr) Variable Function
-        53(arg1):     52(ptr) Variable Function
-        55(arg2):     52(ptr) Variable Function
-           57(d):     52(ptr) Variable Function
- 69(local_highp):     68(ptr) Variable Function
-      105(param):     16(ptr) Variable Function
-              41:     36(int) Load 40(uniform_medium)
-              43:     36(int) Load 42(uniform_high)
-              44:     36(int) IAdd 41 43
-                              Store 38(sum) 44
-              45:     36(int) Load 42(uniform_high)
-              46:     36(int) Load 38(sum)
-              47:     36(int) IAdd 46 45
-                              Store 38(sum) 47
-              49:     36(int) Load 48(uniform_low)
-              50:     36(int) Load 38(sum)
-              51:     36(int) IAdd 50 49
-                              Store 38(sum) 51
-                              Store 53(arg1) 54
-                              Store 55(arg2) 56
-              60:    6(float) Load 59(lowfin)
-              62:    6(float) Load 61(mediumfin)
-              63:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 60 62
-                              Store 57(d) 63
-              66:   21(fvec4) Load 23(highfin)
-              67:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 66
-                              Store 65(global_highp) 67
-              70:    6(float) Load 65(global_highp)
-              71:   21(fvec4) CompositeConstruct 70 70 70 70
-                              Store 69(local_highp) 71
-              74:    6(float) Load 57(d)
-              75:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 74
-              76:   21(fvec4) CompositeConstruct 75 75 75 75
-              77:    6(float) Load 55(arg2)
-              78:   21(fvec4) CompositeConstruct 77 77 77 77
-              79:   21(fvec4) FAdd 76 78
-              80:   21(fvec4) Load 69(local_highp)
-              81:   21(fvec4) FAdd 79 80
-                              Store 73(mediumfout) 81
-              83:     36(int) Load 48(uniform_low)
-              85:   84(ivec2) CompositeConstruct 83 83
-              86:     36(int) Load 42(uniform_high)
-              87:   84(ivec2) CompositeConstruct 86 86
-              88:   84(ivec2) IMul 85 87
-              89:     36(int) Load 42(uniform_high)
-              90:   84(ivec2) CompositeConstruct 89 89
-              91:   84(ivec2) IAdd 88 90
-              94:     36(int) CompositeExtract 91 0
-              95:     36(int) IAdd 82 94
-              96:     36(int) Load 38(sum)
-              97:     36(int) IAdd 96 95
-                              Store 38(sum) 97
-              98:     36(int) Load 38(sum)
-              99:    6(float) ConvertSToF 98
-             100:   21(fvec4) CompositeConstruct 99 99 99 99
-             101:   21(fvec4) Load 73(mediumfout)
-             102:   21(fvec4) FAdd 101 100
-                              Store 73(mediumfout) 102
-             106:   15(bvec2) Load 104(ub2)
-                              Store 105(param) 106
-             107:    14(bool) FunctionCall 19(boolfun(vb2;) 105(param)
-                              SelectionMerge 109 None
-                              BranchConditional 107 108 109
-             108:               Label
-             110:   21(fvec4)   Load 73(mediumfout)
-             112:   21(fvec4)   CompositeConstruct 111 111 111 111
-             113:   21(fvec4)   FAdd 110 112
-                                Store 73(mediumfout) 113
-                                Branch 109
-             109:             Label
-             118:     58(ptr) AccessChain 116(s) 117
-             119:    6(float) Load 118
-             120:   21(fvec4) Load 73(mediumfout)
-             121:   21(fvec4) VectorTimesScalar 120 119
-                              Store 73(mediumfout) 121
-             123:     58(ptr) AccessChain 116(s) 122
-             124:    6(float) Load 123
-             125:   21(fvec4) Load 73(mediumfout)
-             126:   21(fvec4) VectorTimesScalar 125 124
-                              Store 73(mediumfout) 126
+         41(sum):     40(ptr) Variable Function
+        56(arg1):     55(ptr) Variable Function
+        58(arg2):     55(ptr) Variable Function
+           60(d):     55(ptr) Variable Function
+ 72(local_highp):     71(ptr) Variable Function
+      108(param):     16(ptr) Variable Function
+             135:     71(ptr) Variable Function
+              44:     39(int) Load 43(uniform_medium)
+              46:     39(int) Load 45(uniform_high)
+              47:     39(int) IAdd 44 46
+                              Store 41(sum) 47
+              48:     39(int) Load 45(uniform_high)
+              49:     39(int) Load 41(sum)
+              50:     39(int) IAdd 49 48
+                              Store 41(sum) 50
+              52:     39(int) Load 51(uniform_low)
+              53:     39(int) Load 41(sum)
+              54:     39(int) IAdd 53 52
+                              Store 41(sum) 54
+                              Store 56(arg1) 57
+                              Store 58(arg2) 59
+              63:    6(float) Load 62(lowfin)
+              65:    6(float) Load 64(mediumfin)
+              66:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 63 65
+                              Store 60(d) 66
+              69:   21(fvec4) Load 23(highfin)
+              70:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 69
+                              Store 68(global_highp) 70
+              73:    6(float) Load 68(global_highp)
+              74:   21(fvec4) CompositeConstruct 73 73 73 73
+                              Store 72(local_highp) 74
+              77:    6(float) Load 60(d)
+              78:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 77
+              79:   21(fvec4) CompositeConstruct 78 78 78 78
+              80:    6(float) Load 58(arg2)
+              81:   21(fvec4) CompositeConstruct 80 80 80 80
+              82:   21(fvec4) FAdd 79 81
+              83:   21(fvec4) Load 72(local_highp)
+              84:   21(fvec4) FAdd 82 83
+                              Store 76(mediumfout) 84
+              86:     39(int) Load 51(uniform_low)
+              88:   87(ivec2) CompositeConstruct 86 86
+              89:     39(int) Load 45(uniform_high)
+              90:   87(ivec2) CompositeConstruct 89 89
+              91:   87(ivec2) IMul 88 90
+              92:     39(int) Load 45(uniform_high)
+              93:   87(ivec2) CompositeConstruct 92 92
+              94:   87(ivec2) IAdd 91 93
+              97:     39(int) CompositeExtract 94 0
+              98:     39(int) IAdd 85 97
+              99:     39(int) Load 41(sum)
+             100:     39(int) IAdd 99 98
+                              Store 41(sum) 100
+             101:     39(int) Load 41(sum)
+             102:    6(float) ConvertSToF 101
+             103:   21(fvec4) CompositeConstruct 102 102 102 102
+             104:   21(fvec4) Load 76(mediumfout)
+             105:   21(fvec4) FAdd 104 103
+                              Store 76(mediumfout) 105
+             109:   15(bvec2) Load 107(ub2)
+                              Store 108(param) 109
+             110:    14(bool) FunctionCall 19(boolfun(vb2;) 108(param)
+                              SelectionMerge 112 None
+                              BranchConditional 110 111 112
+             111:               Label
+             113:   21(fvec4)   Load 76(mediumfout)
+             115:   21(fvec4)   CompositeConstruct 114 114 114 114
+             116:   21(fvec4)   FAdd 113 115
+                                Store 76(mediumfout) 116
+                                Branch 112
+             112:             Label
+             121:     61(ptr) AccessChain 119(s) 120
+             122:    6(float) Load 121
+             123:   21(fvec4) Load 76(mediumfout)
+             124:   21(fvec4) VectorTimesScalar 123 122
+                              Store 76(mediumfout) 124
+             126:     61(ptr) AccessChain 119(s) 125
+             127:    6(float) Load 126
+             128:   21(fvec4) Load 76(mediumfout)
+             129:   21(fvec4) VectorTimesScalar 128 127
+                              Store 76(mediumfout) 129
+             130:    6(float) Load 64(mediumfin)
+             131:    6(float) Load 64(mediumfin)
+             132:    6(float) FMul 130 131
+             134:    14(bool) FOrdGreaterThan 132 133
+                              SelectionMerge 137 None
+                              BranchConditional 134 136 141
+             136:               Label
+             139:   21(fvec4)   Load 76(mediumfout)
+             140:   21(fvec4)   VectorTimesScalar 139 138
+                                Store 135 140
+                                Branch 137
+             141:               Label
+             143:   21(fvec4)   Load 76(mediumfout)
+             144:   21(fvec4)   VectorTimesScalar 143 142
+                                Store 135 144
+                                Branch 137
+             137:             Label
+             145:   21(fvec4) Load 135
+                              Store 76(mediumfout) 145
                               Return
                               FunctionEnd
     12(foo(vf3;):    9(fvec2) Function None 10
          11(mv3):      8(ptr) FunctionParameter
               13:             Label
+              27:     26(ptr) Variable Function
               24:   21(fvec4) Load 23(highfin)
               25:    9(fvec2) VectorShuffle 24 24 0 1
-                              ReturnValue 25
+                              Store 27 25
+              28:    9(fvec2) Load 27
+                              ReturnValue 28
                               FunctionEnd
 19(boolfun(vb2;):    14(bool) Function None 17
          18(bv2):     16(ptr) FunctionParameter
               20:             Label
-              28:   15(bvec2) Load 18(bv2)
-              32:   15(bvec2) LogicalEqual 28 31
-              33:    14(bool) All 32
-                              ReturnValue 33
+              31:   15(bvec2) Load 18(bv2)
+              35:   15(bvec2) LogicalEqual 31 34
+              36:    14(bool) All 35
+                              ReturnValue 36
                               FunctionEnd
diff --git a/Test/baseResults/spv.precisionArgs.frag.out b/Test/baseResults/spv.precisionArgs.frag.out
new file mode 100755
index 0000000..ae54a58
--- /dev/null
+++ b/Test/baseResults/spv.precisionArgs.frag.out
@@ -0,0 +1,165 @@
+spv.precisionArgs.frag
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 83
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source ESSL 310
+                              Name 4  "main"
+                              Name 10  "fooConst(f1;f1;"
+                              Name 8  "f"
+                              Name 9  "g"
+                              Name 16  "foo(f1;f1;"
+                              Name 14  "f"
+                              Name 15  "g"
+                              Name 20  "retM(f1;"
+                              Name 19  "x"
+                              Name 23  "retH(f1;"
+                              Name 22  "x"
+                              Name 26  "retHM(f1;"
+                              Name 25  "x"
+                              Name 29  "retMH(f1;"
+                              Name 28  "x"
+                              Name 47  "aM"
+                              Name 49  "bM"
+                              Name 51  "arg"
+                              Name 54  "aH"
+                              Name 56  "bH"
+                              Name 58  "arg"
+                              Name 61  "param"
+                              Name 63  "param"
+                              Name 66  "param"
+                              Name 68  "param"
+                              Name 71  "param"
+                              Name 74  "param"
+                              Name 77  "param"
+                              Name 80  "param"
+                              Decorate 8(f) RelaxedPrecision
+                              Decorate 14(f) RelaxedPrecision
+                              Decorate 20(retM(f1;) RelaxedPrecision
+                              Decorate 19(x) RelaxedPrecision
+                              Decorate 26(retHM(f1;) RelaxedPrecision
+                              Decorate 28(x) RelaxedPrecision
+                              Decorate 31 RelaxedPrecision
+                              Decorate 38 RelaxedPrecision
+                              Decorate 39 RelaxedPrecision
+                              Decorate 42 RelaxedPrecision
+                              Decorate 47(aM) RelaxedPrecision
+                              Decorate 48 RelaxedPrecision
+                              Decorate 49(bM) RelaxedPrecision
+                              Decorate 50 RelaxedPrecision
+                              Decorate 58(arg) RelaxedPrecision
+                              Decorate 59 RelaxedPrecision
+                              Decorate 61(param) RelaxedPrecision
+                              Decorate 62 RelaxedPrecision
+                              Decorate 64 RelaxedPrecision
+                              Decorate 66(param) RelaxedPrecision
+                              Decorate 71(param) RelaxedPrecision
+                              Decorate 72 RelaxedPrecision
+                              Decorate 73 RelaxedPrecision
+                              Decorate 79 RelaxedPrecision
+                              Decorate 80(param) RelaxedPrecision
+                              Decorate 81 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeFunction 2 6(float) 6(float)
+              12:             TypePointer Function 6(float)
+              13:             TypeFunction 2 12(ptr) 12(ptr)
+              18:             TypeFunction 6(float) 12(ptr)
+         4(main):           2 Function None 3
+               5:             Label
+          47(aM):     12(ptr) Variable Function
+          49(bM):     12(ptr) Variable Function
+         51(arg):     12(ptr) Variable Function
+          54(aH):     12(ptr) Variable Function
+          56(bH):     12(ptr) Variable Function
+         58(arg):     12(ptr) Variable Function
+       61(param):     12(ptr) Variable Function
+       63(param):     12(ptr) Variable Function
+       66(param):     12(ptr) Variable Function
+       68(param):     12(ptr) Variable Function
+       71(param):     12(ptr) Variable Function
+       74(param):     12(ptr) Variable Function
+       77(param):     12(ptr) Variable Function
+       80(param):     12(ptr) Variable Function
+              48:    6(float) Load 47(aM)
+              50:    6(float) Load 49(bM)
+                              Store 51(arg) 50
+              52:    6(float) Load 51(arg)
+              53:           2 FunctionCall 10(fooConst(f1;f1;) 48 52
+              55:    6(float) Load 54(aH)
+              57:    6(float) Load 56(bH)
+                              Store 58(arg) 55
+              59:    6(float) Load 58(arg)
+              60:           2 FunctionCall 10(fooConst(f1;f1;) 59 57
+              62:    6(float) Load 47(aM)
+                              Store 61(param) 62
+              64:    6(float) Load 49(bM)
+                              Store 63(param) 64
+              65:           2 FunctionCall 16(foo(f1;f1;) 61(param) 63(param)
+              67:    6(float) Load 54(aH)
+                              Store 66(param) 67
+              69:    6(float) Load 56(bH)
+                              Store 68(param) 69
+              70:           2 FunctionCall 16(foo(f1;f1;) 66(param) 68(param)
+              72:    6(float) Load 47(aM)
+                              Store 71(param) 72
+              73:    6(float) FunctionCall 20(retM(f1;) 71(param)
+              75:    6(float) Load 54(aH)
+                              Store 74(param) 75
+              76:    6(float) FunctionCall 23(retH(f1;) 74(param)
+              78:    6(float) Load 54(aH)
+                              Store 77(param) 78
+              79:    6(float) FunctionCall 26(retHM(f1;) 77(param)
+              81:    6(float) Load 47(aM)
+                              Store 80(param) 81
+              82:    6(float) FunctionCall 29(retMH(f1;) 80(param)
+                              Return
+                              FunctionEnd
+10(fooConst(f1;f1;):           2 Function None 7
+            8(f):    6(float) FunctionParameter
+            9(g):    6(float) FunctionParameter
+              11:             Label
+                              Return
+                              FunctionEnd
+  16(foo(f1;f1;):           2 Function None 13
+           14(f):     12(ptr) FunctionParameter
+           15(g):     12(ptr) FunctionParameter
+              17:             Label
+                              Return
+                              FunctionEnd
+    20(retM(f1;):    6(float) Function None 18
+           19(x):     12(ptr) FunctionParameter
+              21:             Label
+              31:    6(float) Load 19(x)
+                              ReturnValue 31
+                              FunctionEnd
+    23(retH(f1;):    6(float) Function None 18
+           22(x):     12(ptr) FunctionParameter
+              24:             Label
+              34:    6(float) Load 22(x)
+                              ReturnValue 34
+                              FunctionEnd
+   26(retHM(f1;):    6(float) Function None 18
+           25(x):     12(ptr) FunctionParameter
+              27:             Label
+              38:     12(ptr) Variable Function
+              37:    6(float) Load 25(x)
+                              Store 38 37
+              39:    6(float) Load 38
+                              ReturnValue 39
+                              FunctionEnd
+   29(retMH(f1;):    6(float) Function None 18
+           28(x):     12(ptr) FunctionParameter
+              30:             Label
+              43:     12(ptr) Variable Function
+              42:    6(float) Load 28(x)
+                              Store 43 42
+              44:    6(float) Load 43
+                              ReturnValue 44
+                              FunctionEnd
diff --git a/Test/baseResults/spv.precisionNonESSamp.frag.out b/Test/baseResults/spv.precisionNonESSamp.frag.out
index 97681f3..c4cd1eb 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 47
 
                               Capability Shader
@@ -31,14 +31,14 @@
                               Decorate 18 RelaxedPrecision
                               Decorate 19 RelaxedPrecision
                               Decorate 23(t) DescriptorSet 0
-                              Decorate 23(t) Binding 0
+                              Decorate 23(t) Binding 1
                               Decorate 27(v3) RelaxedPrecision
                               Decorate 27(v3) Location 1
                               Decorate 28 RelaxedPrecision
                               Decorate 31(vi1) RelaxedPrecision
                               Decorate 34(i1) RelaxedPrecision
                               Decorate 34(i1) DescriptorSet 0
-                              Decorate 34(i1) Binding 0
+                              Decorate 34(i1) Binding 2
                               Decorate 35 RelaxedPrecision
                               Decorate 39(iv2) RelaxedPrecision
                               Decorate 39(iv2) Flat
@@ -47,7 +47,7 @@
                               Decorate 41 RelaxedPrecision
                               Decorate 42(vi2) RelaxedPrecision
                               Decorate 43(i2) DescriptorSet 0
-                              Decorate 43(i2) Binding 0
+                              Decorate 43(i2) Binding 3
                               Decorate 45 RelaxedPrecision
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.precisionTexture.frag.out b/Test/baseResults/spv.precisionTexture.frag.out
new file mode 100755
index 0000000..d5e21b6
--- /dev/null
+++ b/Test/baseResults/spv.precisionTexture.frag.out
@@ -0,0 +1,120 @@
+spv.precisionTexture.frag
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 66
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 16 57 65
+                              ExecutionMode 4 OriginUpperLeft
+                              Source ESSL 310
+                              Name 4  "main"
+                              Name 9  "v"
+                              Name 13  "texM"
+                              Name 16  "vertex"
+                              Name 21  "texH"
+                              Name 52  "imageM"
+                              Name 57  "coord"
+                              Name 60  "imageH"
+                              Name 65  "fragColor"
+                              Decorate 9(v) RelaxedPrecision
+                              Decorate 13(texM) RelaxedPrecision
+                              Decorate 13(texM) DescriptorSet 0
+                              Decorate 13(texM) Binding 0
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16(vertex) Location 0
+                              Decorate 20 RelaxedPrecision
+                              Decorate 21(texH) DescriptorSet 0
+                              Decorate 21(texH) Binding 1
+                              Decorate 26 RelaxedPrecision
+                              Decorate 34 RelaxedPrecision
+                              Decorate 41 RelaxedPrecision
+                              Decorate 45 RelaxedPrecision
+                              Decorate 52(imageM) RelaxedPrecision
+                              Decorate 52(imageM) DescriptorSet 0
+                              Decorate 52(imageM) Binding 0
+                              Decorate 52(imageM) NonWritable
+                              Decorate 53 RelaxedPrecision
+                              Decorate 57(coord) Flat
+                              Decorate 57(coord) Location 1
+                              Decorate 59 RelaxedPrecision
+                              Decorate 60(imageH) DescriptorSet 0
+                              Decorate 60(imageH) Binding 1
+                              Decorate 60(imageH) NonWritable
+                              Decorate 65(fragColor) RelaxedPrecision
+                              Decorate 65(fragColor) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypeSampledImage 10
+              12:             TypePointer UniformConstant 11
+        13(texM):     12(ptr) Variable UniformConstant
+              15:             TypePointer Input 7(fvec4)
+      16(vertex):     15(ptr) Variable Input
+              17:             TypeVector 6(float) 2
+        21(texH):     12(ptr) Variable UniformConstant
+              29:             TypeInt 32 0
+              30:     29(int) Constant 2
+              31:             TypePointer Input 6(float)
+              42:             TypeVector 6(float) 3
+              50:             TypeImage 6(float) 2D nonsampled format:Rgba32f
+              51:             TypePointer UniformConstant 50
+      52(imageM):     51(ptr) Variable UniformConstant
+              54:             TypeInt 32 1
+              55:             TypeVector 54(int) 2
+              56:             TypePointer Input 55(ivec2)
+       57(coord):     56(ptr) Variable Input
+      60(imageH):     51(ptr) Variable UniformConstant
+              64:             TypePointer Output 7(fvec4)
+   65(fragColor):     64(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+            9(v):      8(ptr) Variable Function
+              14:          11 Load 13(texM)
+              18:    7(fvec4) Load 16(vertex)
+              19:   17(fvec2) VectorShuffle 18 18 0 1
+              20:    7(fvec4) ImageSampleImplicitLod 14 19
+                              Store 9(v) 20
+              22:          11 Load 21(texH)
+              23:    7(fvec4) Load 16(vertex)
+              24:   17(fvec2) VectorShuffle 23 23 0 1
+              25:    7(fvec4) ImageSampleImplicitLod 22 24
+                              Store 9(v) 25
+              26:          11 Load 13(texM)
+              27:    7(fvec4) Load 16(vertex)
+              28:   17(fvec2) VectorShuffle 27 27 0 1
+              32:     31(ptr) AccessChain 16(vertex) 30
+              33:    6(float) Load 32
+              34:    7(fvec4) ImageSampleExplicitLod 26 28 Lod 33
+                              Store 9(v) 34
+              35:          11 Load 21(texH)
+              36:    7(fvec4) Load 16(vertex)
+              37:   17(fvec2) VectorShuffle 36 36 0 1
+              38:     31(ptr) AccessChain 16(vertex) 30
+              39:    6(float) Load 38
+              40:    7(fvec4) ImageSampleExplicitLod 35 37 Lod 39
+                              Store 9(v) 40
+              41:          11 Load 13(texM)
+              43:    7(fvec4) Load 16(vertex)
+              44:   42(fvec3) VectorShuffle 43 43 0 1 2
+              45:    7(fvec4) ImageSampleProjImplicitLod 41 44
+                              Store 9(v) 45
+              46:          11 Load 21(texH)
+              47:    7(fvec4) Load 16(vertex)
+              48:   42(fvec3) VectorShuffle 47 47 0 1 2
+              49:    7(fvec4) ImageSampleProjImplicitLod 46 48
+                              Store 9(v) 49
+              53:          50 Load 52(imageM)
+              58:   55(ivec2) Load 57(coord)
+              59:    7(fvec4) ImageRead 53 58
+                              Store 9(v) 59
+              61:          50 Load 60(imageH)
+              62:   55(ivec2) Load 57(coord)
+              63:    7(fvec4) ImageRead 61 62
+                              Store 9(v) 63
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.prepost.frag.out b/Test/baseResults/spv.prepost.frag.out
index a0dbbd4..5fd6b37 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): 80008
+// Generated by (magic number): 8000a
 // 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 1b8e1a5..d5ad68a 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): 80008
+// Generated by (magic number): 8000a
 // 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 5348edb..888d134 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 35
 
                               Capability Shader
@@ -18,6 +18,7 @@
                               MemberDecorate 11(Material) 0 Offset 0
                               MemberDecorate 11(Material) 1 Offset 4
                               Decorate 11(Material) Block
+                              Decorate 24(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.pushConstantAnon.vert.out b/Test/baseResults/spv.pushConstantAnon.vert.out
index 3932b42..75efdbc 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 38
 
                               Capability Shader
@@ -18,6 +18,7 @@
                               MemberDecorate 11(Material) 0 Offset 0
                               MemberDecorate 11(Material) 1 Offset 4
                               Decorate 11(Material) Block
+                              Decorate 24(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.qualifiers.vert.out b/Test/baseResults/spv.qualifiers.vert.out
index 47f73a0..4180e17 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 21
 
                               Capability Shader
@@ -16,10 +16,16 @@
                               Name 17  "outVn"
                               Name 19  "outVcn"
                               Decorate 9(outVc) Centroid
+                              Decorate 9(outVc) Location 0
+                              Decorate 11(inV) Location 0
+                              Decorate 13(outVs) Location 1
                               Decorate 15(outVf) Flat
+                              Decorate 15(outVf) Location 2
                               Decorate 17(outVn) NoPerspective
+                              Decorate 17(outVn) Location 3
                               Decorate 19(outVcn) NoPerspective
                               Decorate 19(outVcn) Centroid
+                              Decorate 19(outVcn) Location 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out
index 97d845a..1e38661 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 224
 
                               Capability Shader
@@ -44,39 +44,39 @@
                               Decorate 13(samp1D) DescriptorSet 0
                               Decorate 13(samp1D) Binding 0
                               Decorate 23(isamp2D) DescriptorSet 0
-                              Decorate 23(isamp2D) Binding 0
+                              Decorate 23(isamp2D) Binding 1
                               Decorate 34(usamp3D) DescriptorSet 0
-                              Decorate 34(usamp3D) Binding 0
+                              Decorate 34(usamp3D) Binding 4
                               Decorate 46(sampCube) DescriptorSet 0
-                              Decorate 46(sampCube) Binding 0
+                              Decorate 46(sampCube) Binding 5
                               Decorate 55(isamp1DA) DescriptorSet 0
-                              Decorate 55(isamp1DA) Binding 0
+                              Decorate 55(isamp1DA) Binding 7
                               Decorate 64(usamp2DA) DescriptorSet 0
-                              Decorate 64(usamp2DA) Binding 0
+                              Decorate 64(usamp2DA) Binding 9
                               Decorate 73(isampCubeA) DescriptorSet 0
-                              Decorate 73(isampCubeA) Binding 0
+                              Decorate 73(isampCubeA) Binding 10
                               Decorate 82(samp1Ds) DescriptorSet 0
-                              Decorate 82(samp1Ds) Binding 0
+                              Decorate 82(samp1Ds) Binding 12
                               Decorate 91(samp2Ds) DescriptorSet 0
-                              Decorate 91(samp2Ds) Binding 0
+                              Decorate 91(samp2Ds) Binding 13
                               Decorate 100(sampCubes) DescriptorSet 0
-                              Decorate 100(sampCubes) Binding 0
+                              Decorate 100(sampCubes) Binding 14
                               Decorate 109(samp1DAs) DescriptorSet 0
-                              Decorate 109(samp1DAs) Binding 0
+                              Decorate 109(samp1DAs) Binding 15
                               Decorate 118(samp2DAs) DescriptorSet 0
-                              Decorate 118(samp2DAs) Binding 0
+                              Decorate 118(samp2DAs) Binding 16
                               Decorate 127(sampCubeAs) DescriptorSet 0
-                              Decorate 127(sampCubeAs) Binding 0
+                              Decorate 127(sampCubeAs) Binding 17
                               Decorate 141(usamp2D) DescriptorSet 0
-                              Decorate 141(usamp2D) Binding 0
+                              Decorate 141(usamp2D) Binding 2
                               Decorate 150(isamp3D) DescriptorSet 0
-                              Decorate 150(isamp3D) Binding 0
+                              Decorate 150(isamp3D) Binding 3
                               Decorate 159(isampCube) DescriptorSet 0
-                              Decorate 159(isampCube) Binding 0
+                              Decorate 159(isampCube) Binding 6
                               Decorate 173(samp2DA) DescriptorSet 0
-                              Decorate 173(samp2DA) Binding 0
+                              Decorate 173(samp2DA) Binding 8
                               Decorate 182(usampCubeA) DescriptorSet 0
-                              Decorate 182(usampCubeA) Binding 0
+                              Decorate 182(usampCubeA) Binding 11
                               Decorate 219(sampBuf) DescriptorSet 0
                               Decorate 219(sampBuf) Binding 0
                               Decorate 223(sampRect) DescriptorSet 0
diff --git a/Test/baseResults/spv.rankShift.comp.out b/Test/baseResults/spv.rankShift.comp.out
index e0fba77..1a725c1 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 33
 
                               Capability Shader
@@ -16,7 +16,11 @@
                               Name 11  "arg0"
                               Name 15  "arg1"
                               Decorate 11(arg0) Location 4
+                              Decorate 11(arg0) DescriptorSet 0
+                              Decorate 11(arg0) Binding 0
                               Decorate 15(arg1) Location 5
+                              Decorate 15(arg1) DescriptorSet 0
+                              Decorate 15(arg1) Binding 1
                               Decorate 32 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.register.autoassign-2.frag.out b/Test/baseResults/spv.register.autoassign-2.frag.out
index 9fd317e..26b149b 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): 80008
+// Generated by (magic number): 8000a
 // 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 74118ef..e347ce2 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 155
 
                               Capability Shader
diff --git a/Test/baseResults/spv.register.autoassign.rangetest.frag.out b/Test/baseResults/spv.register.autoassign.rangetest.frag.out
index 8eb76c9..4381dab 100644
--- a/Test/baseResults/spv.register.autoassign.rangetest.frag.out
+++ b/Test/baseResults/spv.register.autoassign.rangetest.frag.out
@@ -2,4 +2,85 @@
 INTERNAL ERROR: mapped binding out of range: g_tSamp
 INTERNAL ERROR: mapped binding out of range: g_tScene
 
-SPIR-V is not generated for failed compile or link
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 52
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 49
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              Name 12  "@main(struct-PS_OUTPUT-vf41;"
+                              Name 11  "psout"
+                              Name 21  "g_tScene"
+                              Name 27  "g_tSamp"
+                              Name 44  "psout"
+                              Name 45  "param"
+                              Name 49  "psout.Color"
+                              Decorate 21(g_tScene) DescriptorSet 0
+                              Decorate 21(g_tScene) Binding 5
+                              Decorate 27(g_tSamp) DescriptorSet 0
+                              Decorate 27(g_tSamp) Binding 5
+                              Decorate 49(psout.Color) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4)
+               9:             TypePointer Function 8(PS_OUTPUT)
+              10:             TypeFunction 2 9(ptr)
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:             TypeImage 6(float) 2D sampled format:Unknown
+              17:             TypeInt 32 0
+              18:     17(int) Constant 2
+              19:             TypeArray 16 18
+              20:             TypePointer UniformConstant 19
+    21(g_tScene):     20(ptr) Variable UniformConstant
+              22:             TypePointer UniformConstant 16
+              25:             TypeSampler
+              26:             TypePointer UniformConstant 25
+     27(g_tSamp):     26(ptr) Variable UniformConstant
+              29:             TypeSampledImage 16
+              31:             TypeVector 6(float) 2
+              32:    6(float) Constant 1050253722
+              33:   31(fvec2) ConstantComposite 32 32
+              35:     14(int) Constant 1
+              42:             TypePointer Function 7(fvec4)
+              48:             TypePointer Output 7(fvec4)
+ 49(psout.Color):     48(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+       44(psout):      9(ptr) Variable Function
+       45(param):      9(ptr) Variable Function
+              46:           2 FunctionCall 12(@main(struct-PS_OUTPUT-vf41;) 45(param)
+              47:8(PS_OUTPUT) Load 45(param)
+                              Store 44(psout) 47
+              50:     42(ptr) AccessChain 44(psout) 15
+              51:    7(fvec4) Load 50
+                              Store 49(psout.Color) 51
+                              Return
+                              FunctionEnd
+12(@main(struct-PS_OUTPUT-vf41;):           2 Function None 10
+       11(psout):      9(ptr) FunctionParameter
+              13:             Label
+              23:     22(ptr) AccessChain 21(g_tScene) 15
+              24:          16 Load 23
+              28:          25 Load 27(g_tSamp)
+              30:          29 SampledImage 24 28
+              34:    7(fvec4) ImageSampleImplicitLod 30 33
+              36:     22(ptr) AccessChain 21(g_tScene) 35
+              37:          16 Load 36
+              38:          25 Load 27(g_tSamp)
+              39:          29 SampledImage 37 38
+              40:    7(fvec4) ImageSampleImplicitLod 39 33
+              41:    7(fvec4) FAdd 34 40
+              43:     42(ptr) AccessChain 11(psout) 15
+                              Store 43 41
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.register.noautoassign.frag.out b/Test/baseResults/spv.register.noautoassign.frag.out
index 1292b0b..ed8d507 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): 80008
+// Generated by (magic number): 8000a
 // 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 21f7955..acd447d 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): 80008
+// Generated by (magic number): 8000a
 // 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 a575e78..43adedd 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): 80008
+// Generated by (magic number): 8000a
 // 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 57fbf31..f43fc98 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): 80008
+// Generated by (magic number): 8000a
 // 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 1412da2..8f9bc38 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): 80008
+// Generated by (magic number): 8000a
 // 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 2892325..9b401d8 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 20
 
                               Capability Shader
@@ -17,6 +17,7 @@
                               Name 19  "color"
                               Decorate 11(gl_SampleMask) BuiltIn SampleMask
                               Decorate 11(gl_SampleMask) OverrideCoverageNV
+                              Decorate 19(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.samplePosition.frag.out b/Test/baseResults/spv.samplePosition.frag.out
index b06c768..8012830 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): 80008
+// Generated by (magic number): 8000a
 // 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 c12201e..c2c431d 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): 80008
+// Generated by (magic number): 8000a
 // 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 1b26242..549efaa 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): 80008
+// Generated by (magic number): 8000a
 // 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 c88fa7f..fc0dca8 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): 80008
+// Generated by (magic number): 8000a
 // 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 690ab2f..d31f897 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 319
 
                               Capability Shader
@@ -56,15 +56,17 @@
                               Name 283  "tex1D"
                               Name 293  "tex3D"
                               Name 304  "tex2DRect"
+                              Decorate 11(color) Location 0
                               Decorate 14(t2d) DescriptorSet 0
-                              Decorate 14(t2d) Binding 0
+                              Decorate 14(t2d) Binding 2
                               Decorate 18(s) DescriptorSet 0
                               Decorate 18(s) Binding 0
                               Decorate 31(t3d) DescriptorSet 0
-                              Decorate 31(t3d) Binding 0
+                              Decorate 31(t3d) Binding 3
                               Decorate 34(i) Flat
+                              Decorate 34(i) Location 0
                               Decorate 41(sA) DescriptorSet 0
-                              Decorate 41(sA) Binding 0
+                              Decorate 41(sA) Binding 1
                               Decorate 58(tex2D) DescriptorSet 0
                               Decorate 58(tex2D) Binding 0
                               Decorate 64(texCube) DescriptorSet 0
diff --git a/Test/baseResults/spv.set.vert.out b/Test/baseResults/spv.set.vert.out
index fe4326f..245b4bd 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 22
 
                               Capability Shader
@@ -14,6 +14,7 @@
                               MemberName 10(setBuf) 0  "color"
                               Name 12  "setBufInst"
                               Name 21  "samp2D"
+                              Decorate 9(color) Location 0
                               MemberDecorate 10(setBuf) 0 Offset 0
                               Decorate 10(setBuf) BufferBlock
                               Decorate 12(setBufInst) DescriptorSet 0
diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out
index 3ddee0f..bdbf10f 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): 80008
+// Generated by (magic number): 8000a
 // 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 eb8f404..9ea5ba0 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): 80008
+// Generated by (magic number): 8000a
 // 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 ad51de1..5baabbf 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): 80008
+// Generated by (magic number): 8000a
 // 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 b1e5c0d..ab48e04 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): 80008
+// Generated by (magic number): 8000a
 // 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 a09e798..4c45e33 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): 80008
+// Generated by (magic number): 8000a
 // 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 7559564..ea8873c 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 622
 
                               Capability Shader
@@ -74,7 +74,7 @@
                               MemberDecorate 8(result2D) 5 Offset 36
                               Decorate 8(result2D) BufferBlock
                               Decorate 10 DescriptorSet 0
-                              Decorate 10 Binding 0
+                              Decorate 10 Binding 2
                               Decorate 17(sample2D) DescriptorSet 0
                               Decorate 17(sample2D) Binding 0
                               Decorate 21(P2) Location 0
@@ -93,9 +93,9 @@
                               MemberDecorate 377(result3D) 5 Offset 60
                               Decorate 377(result3D) BufferBlock
                               Decorate 379 DescriptorSet 0
-                              Decorate 379 Binding 0
+                              Decorate 379 Binding 3
                               Decorate 383(sample3D) DescriptorSet 0
-                              Decorate 383(sample3D) Binding 0
+                              Decorate 383(sample3D) Binding 1
                               Decorate 387(P3) Location 2
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.shaderStencilExport.frag.out b/Test/baseResults/spv.shaderStencilExport.frag.out
index 37fce5f..f73349c 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): 80008
+// Generated by (magic number): 8000a
 // 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 ce56113..866ae60 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): 80008
+// Generated by (magic number): 8000a
 // 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 15df236..03f7546 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 38
 
                               Capability Shader
@@ -16,10 +16,16 @@
                               Name 25  "ucolor"
                               Name 27  "u3"
                               Name 30  "i1"
+                              Decorate 9(icolor) Location 0
                               Decorate 11(i3) Flat
+                              Decorate 11(i3) Location 2
                               Decorate 15(u1) Flat
+                              Decorate 15(u1) Location 1
+                              Decorate 25(ucolor) Location 1
                               Decorate 27(u3) Flat
+                              Decorate 27(u3) Location 3
                               Decorate 30(i1) Flat
+                              Decorate 30(i1) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.shortCircuit.frag.out b/Test/baseResults/spv.shortCircuit.frag.out
index 6104b04..3c706f7 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 147
 
                               Capability Shader
@@ -21,8 +21,14 @@
                               Name 142  "uv4"
                               Name 145  "ub41"
                               Name 146  "ub42"
+                              Decorate 12(of1) Location 0
+                              Decorate 24(of4) Location 1
                               Decorate 34(ui) Flat
+                              Decorate 34(ui) Location 3
+                              Decorate 113(uf) Location 2
                               Decorate 140(uiv4) Flat
+                              Decorate 140(uiv4) Location 0
+                              Decorate 142(uv4) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeBool
diff --git a/Test/baseResults/spv.simpleFunctionCall.frag.out b/Test/baseResults/spv.simpleFunctionCall.frag.out
index 8e666a6..bda91b7 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 19
 
                               Capability Shader
@@ -13,6 +13,7 @@
                               Name 9  "foo("
                               Name 12  "BaseColor"
                               Name 17  "gl_FragColor"
+                              Decorate 12(BaseColor) Location 0
                               Decorate 17(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.simpleMat.vert.out b/Test/baseResults/spv.simpleMat.vert.out
index ff51dc0..cc9b2b2 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 39
 
                               Capability Shader
@@ -17,6 +17,12 @@
                               Name 19  "f"
                               Name 23  "am3"
                               Name 34  "arraym"
+                              Decorate 9(glPos) Location 5
+                              Decorate 12(mvp) Location 0
+                              Decorate 15(v) Location 0
+                              Decorate 19(f) Location 4
+                              Decorate 23(am3) Location 1
+                              Decorate 34(arraym) Location 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.smBuiltins.frag.out b/Test/baseResults/spv.smBuiltins.frag.out
index 9f4cc60..3fafa04 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): 80008
+// Generated by (magic number): 8000a
 // 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 0453b0c..91ad637 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): 80008
+// Generated by (magic number): 8000a
 // 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 3414200..0f7c687 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 438
 
                               Capability Shader
@@ -49,37 +49,44 @@
                               Name 423  "outColor"
                               Decorate 29(s2D) DescriptorSet 0
                               Decorate 29(s2D) Binding 0
+                              Decorate 33(c2) Location 0
                               Decorate 44(s3D) DescriptorSet 0
-                              Decorate 44(s3D) Binding 0
+                              Decorate 44(s3D) Binding 1
+                              Decorate 48(c3) Location 1
                               Decorate 59(isCube) DescriptorSet 0
-                              Decorate 59(isCube) Binding 0
+                              Decorate 59(isCube) Binding 8
                               Decorate 71(s2DShadow) DescriptorSet 0
-                              Decorate 71(s2DShadow) Binding 0
+                              Decorate 71(s2DShadow) Binding 2
                               Decorate 86(sCubeArrayShadow) DescriptorSet 0
-                              Decorate 86(sCubeArrayShadow) Binding 0
+                              Decorate 86(sCubeArrayShadow) Binding 6
+                              Decorate 89(c4) Location 2
                               Decorate 108(usCubeArray) DescriptorSet 0
-                              Decorate 108(usCubeArray) Binding 0
+                              Decorate 108(usCubeArray) Binding 10
                               Decorate 140(us2DRect) DescriptorSet 0
-                              Decorate 140(us2DRect) Binding 0
+                              Decorate 140(us2DRect) Binding 11
                               Decorate 154(s2DArrayShadow) DescriptorSet 0
-                              Decorate 154(s2DArrayShadow) Binding 0
+                              Decorate 154(s2DArrayShadow) Binding 4
                               Decorate 188(s2DMS) DescriptorSet 0
-                              Decorate 188(s2DMS) Binding 0
+                              Decorate 188(s2DMS) Binding 7
                               Decorate 228(is2DArray) DescriptorSet 0
-                              Decorate 228(is2DArray) Binding 0
+                              Decorate 228(is2DArray) Binding 9
                               Decorate 261(sCubeShadow) DescriptorSet 0
-                              Decorate 261(sCubeShadow) Binding 0
+                              Decorate 261(sCubeShadow) Binding 3
                               Decorate 294(s2DRectShadow) DescriptorSet 0
-                              Decorate 294(s2DRectShadow) Binding 0
+                              Decorate 294(s2DRectShadow) Binding 5
                               Decorate 365(offsets) Flat
+                              Decorate 365(offsets) Location 5
                               Decorate 390(i2D) DescriptorSet 0
-                              Decorate 390(i2D) Binding 0
+                              Decorate 390(i2D) Binding 12
                               Decorate 393(ic2) Flat
+                              Decorate 393(ic2) Location 3
                               Decorate 402(ii3D) DescriptorSet 0
-                              Decorate 402(ii3D) Binding 0
+                              Decorate 402(ii3D) Binding 13
                               Decorate 405(ic3) Flat
+                              Decorate 405(ic3) Location 4
                               Decorate 414(i2DMS) DescriptorSet 0
-                              Decorate 414(i2DMS) Binding 0
+                              Decorate 414(i2DMS) Binding 14
+                              Decorate 423(outColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out
index fedd64a..f42326d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 360
 
                               Capability Shader
@@ -42,26 +42,31 @@
                               Name 345  "outColor"
                               Decorate 29(s2D) DescriptorSet 0
                               Decorate 29(s2D) Binding 0
+                              Decorate 33(c2) Location 0
+                              Decorate 36(lodClamp) Location 3
                               Decorate 47(s3D) DescriptorSet 0
-                              Decorate 47(s3D) Binding 0
+                              Decorate 47(s3D) Binding 1
+                              Decorate 51(c3) Location 1
                               Decorate 63(isCube) DescriptorSet 0
-                              Decorate 63(isCube) Binding 0
+                              Decorate 63(isCube) Binding 7
                               Decorate 76(s2DShadow) DescriptorSet 0
-                              Decorate 76(s2DShadow) Binding 0
+                              Decorate 76(s2DShadow) Binding 2
                               Decorate 92(sCubeArrayShadow) DescriptorSet 0
-                              Decorate 92(sCubeArrayShadow) Binding 0
+                              Decorate 92(sCubeArrayShadow) Binding 6
+                              Decorate 95(c4) Location 2
                               Decorate 154(us2DRect) DescriptorSet 0
-                              Decorate 154(us2DRect) Binding 0
+                              Decorate 154(us2DRect) Binding 10
                               Decorate 170(s2DArrayShadow) DescriptorSet 0
-                              Decorate 170(s2DArrayShadow) Binding 0
+                              Decorate 170(s2DArrayShadow) Binding 4
                               Decorate 218(sCubeShadow) DescriptorSet 0
-                              Decorate 218(sCubeShadow) Binding 0
+                              Decorate 218(sCubeShadow) Binding 3
                               Decorate 235(usCubeArray) DescriptorSet 0
-                              Decorate 235(usCubeArray) Binding 0
+                              Decorate 235(usCubeArray) Binding 9
                               Decorate 286(s2DRectShadow) DescriptorSet 0
-                              Decorate 286(s2DRectShadow) Binding 0
+                              Decorate 286(s2DRectShadow) Binding 5
                               Decorate 305(is2DArray) DescriptorSet 0
-                              Decorate 305(is2DArray) Binding 0
+                              Decorate 305(is2DArray) Binding 8
+                              Decorate 345(outColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.specConst.vert.out b/Test/baseResults/spv.specConst.vert.out
index 116c136..a510dc9 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): 80008
+// Generated by (magic number): 8000a
 // 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 e0ad699..a4e769f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 27
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specConstant.float16.comp.out b/Test/baseResults/spv.specConstant.float16.comp.out
new file mode 100644
index 0000000..be02057
--- /dev/null
+++ b/Test/baseResults/spv.specConstant.float16.comp.out
@@ -0,0 +1,51 @@
+spv.specConstant.float16.comp
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 18
+
+                              Capability Shader
+                              Capability Float16
+                              Capability StorageUniformBufferBlock16
+                              Extension  "SPV_KHR_16bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              Name 4  "main"
+                              Name 7  "Output"
+                              MemberName 7(Output) 0  "r0"
+                              MemberName 7(Output) 1  "r1"
+                              Name 9  "sb_out"
+                              Name 12  "sc0"
+                              Name 16  "sc1"
+                              MemberDecorate 7(Output) 0 NonReadable
+                              MemberDecorate 7(Output) 0 Offset 0
+                              MemberDecorate 7(Output) 1 NonReadable
+                              MemberDecorate 7(Output) 1 Offset 2
+                              Decorate 7(Output) BufferBlock
+                              Decorate 9(sb_out) DescriptorSet 0
+                              Decorate 9(sb_out) Binding 0
+                              Decorate 12(sc0) SpecId 1
+                              Decorate 16(sc1) SpecId 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 16
+       7(Output):             TypeStruct 6(float16_t) 6(float16_t)
+               8:             TypePointer Uniform 7(Output)
+       9(sb_out):      8(ptr) Variable Uniform
+              10:             TypeInt 32 1
+              11:     10(int) Constant 0
+         12(sc0):6(float16_t) SpecConstant 18624
+              13:             TypePointer Uniform 6(float16_t)
+              15:     10(int) Constant 1
+         16(sc1):6(float16_t) SpecConstant 52000
+         4(main):           2 Function None 3
+               5:             Label
+              14:     13(ptr) AccessChain 9(sb_out) 11
+                              Store 14 12(sc0)
+              17:     13(ptr) AccessChain 9(sb_out) 15
+                              Store 17 16(sc1)
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.specConstant.int16.comp.out b/Test/baseResults/spv.specConstant.int16.comp.out
new file mode 100644
index 0000000..7bb4c8f
--- /dev/null
+++ b/Test/baseResults/spv.specConstant.int16.comp.out
@@ -0,0 +1,51 @@
+spv.specConstant.int16.comp
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 18
+
+                              Capability Shader
+                              Capability Int16
+                              Capability StorageUniformBufferBlock16
+                              Extension  "SPV_KHR_16bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int16"
+                              Name 4  "main"
+                              Name 7  "Output"
+                              MemberName 7(Output) 0  "r0"
+                              MemberName 7(Output) 1  "r1"
+                              Name 9  "sb_out"
+                              Name 12  "sc0"
+                              Name 16  "sc1"
+                              MemberDecorate 7(Output) 0 NonReadable
+                              MemberDecorate 7(Output) 0 Offset 0
+                              MemberDecorate 7(Output) 1 NonReadable
+                              MemberDecorate 7(Output) 1 Offset 2
+                              Decorate 7(Output) BufferBlock
+                              Decorate 9(sb_out) DescriptorSet 0
+                              Decorate 9(sb_out) Binding 0
+                              Decorate 12(sc0) SpecId 1
+                              Decorate 16(sc1) SpecId 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 16 1
+       7(Output):             TypeStruct 6(int16_t) 6(int16_t)
+               8:             TypePointer Uniform 7(Output)
+       9(sb_out):      8(ptr) Variable Uniform
+              10:             TypeInt 32 1
+              11:     10(int) Constant 0
+         12(sc0):  6(int16_t) SpecConstant 20000
+              13:             TypePointer Uniform 6(int16_t)
+              15:     10(int) Constant 1
+         16(sc1):  6(int16_t) SpecConstant 4294947296
+         4(main):           2 Function None 3
+               5:             Label
+              14:     13(ptr) AccessChain 9(sb_out) 11
+                              Store 14 12(sc0)
+              17:     13(ptr) AccessChain 9(sb_out) 15
+                              Store 17 16(sc1)
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.specConstant.int8.comp.out b/Test/baseResults/spv.specConstant.int8.comp.out
new file mode 100644
index 0000000..0ab3bdc
--- /dev/null
+++ b/Test/baseResults/spv.specConstant.int8.comp.out
@@ -0,0 +1,51 @@
+spv.specConstant.int8.comp
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 18
+
+                              Capability Shader
+                              Capability Int8
+                              Capability UniformAndStorageBuffer8BitAccess
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 7  "Output"
+                              MemberName 7(Output) 0  "r0"
+                              MemberName 7(Output) 1  "r1"
+                              Name 9  "sb_out"
+                              Name 12  "sc0"
+                              Name 16  "sc1"
+                              MemberDecorate 7(Output) 0 NonReadable
+                              MemberDecorate 7(Output) 0 Offset 0
+                              MemberDecorate 7(Output) 1 NonReadable
+                              MemberDecorate 7(Output) 1 Offset 1
+                              Decorate 7(Output) BufferBlock
+                              Decorate 9(sb_out) DescriptorSet 0
+                              Decorate 9(sb_out) Binding 0
+                              Decorate 12(sc0) SpecId 1
+                              Decorate 16(sc1) SpecId 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 8 1
+       7(Output):             TypeStruct 6(int8_t) 6(int8_t)
+               8:             TypePointer Uniform 7(Output)
+       9(sb_out):      8(ptr) Variable Uniform
+              10:             TypeInt 32 1
+              11:     10(int) Constant 0
+         12(sc0):   6(int8_t) SpecConstant 127
+              13:             TypePointer Uniform 6(int8_t)
+              15:     10(int) Constant 1
+         16(sc1):   6(int8_t) SpecConstant 4294967169
+         4(main):           2 Function None 3
+               5:             Label
+              14:     13(ptr) AccessChain 9(sb_out) 11
+                              Store 14 12(sc0)
+              17:     13(ptr) AccessChain 9(sb_out) 15
+                              Store 17 16(sc1)
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out
index 206e30a..921cc68 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 81
 
                               Capability Shader
@@ -31,11 +31,15 @@
                               Name 76  "result"
                               Name 77  "gl_MaxImageUnits"
                               Decorate 9(arraySize) SpecId 16
+                              Decorate 20(color) Location 0
+                              Decorate 22(ucol) Location 0
+                              Decorate 28(size) Location 1
                               Decorate 30(spBool) SpecId 17
                               Decorate 34(scale) SpecId 22
                               Decorate 39(spDouble) SpecId 19
                               Decorate 40(spFloat) SpecId 18
                               Decorate 50(dupArraySize) SpecId 116
+                              Decorate 53(dupUcol) Location 5
                               Decorate 60(spDupBool) SpecId 117
                               Decorate 63(dupScale) SpecId 122
                               Decorate 67(spDupDouble) SpecId 119
diff --git a/Test/baseResults/spv.specConstantComposite.vert.out b/Test/baseResults/spv.specConstantComposite.vert.out
index 20a071b..15777d8 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 43
 
                               Capability Shader
@@ -24,9 +24,11 @@
                               Name 39  "spec_double"
                               Name 42  "global_vec4_array_with_spec_length"
                               Decorate 21(spec_bool) SpecId 203
+                              Decorate 27(color) Location 0
                               Decorate 28(spec_int) SpecId 200
                               Decorate 37(spec_float) SpecId 201
                               Decorate 39(spec_double) SpecId 202
+                              Decorate 42(global_vec4_array_with_spec_length) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeInt 32 1
diff --git a/Test/baseResults/spv.specConstantOperations.vert.out b/Test/baseResults/spv.specConstantOperations.vert.out
index 747d50b..5366460 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 162
 
                               Capability Shader
diff --git a/Test/baseResults/spv.specTexture.frag.out b/Test/baseResults/spv.specTexture.frag.out
index a4cf47d..4ca488e 100755
--- a/Test/baseResults/spv.specTexture.frag.out
+++ b/Test/baseResults/spv.specTexture.frag.out
@@ -1,6 +1,6 @@
 spv.specTexture.frag
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 23
 
                               Capability Shader
@@ -14,6 +14,7 @@
                               Name 13  "tex"
                               Name 19  "offs"
                               Decorate 9(color_out) Location 0
+                              Decorate 13(tex) Location 0
                               Decorate 13(tex) DescriptorSet 0
                               Decorate 13(tex) Binding 0
                               Decorate 19(offs) SpecId 1
diff --git a/Test/baseResults/spv.ssbo.autoassign.frag.out b/Test/baseResults/spv.ssbo.autoassign.frag.out
index 7d64847..e2db863 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): 80008
+// Generated by (magic number): 8000a
 // 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 1711d9d..cdcd222 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): 80008
+// Generated by (magic number): 8000a
 // 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 2cab064..a357346 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): 80008
+// Generated by (magic number): 8000a
 // 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 acb8338..0667cb8 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): 80008
+// Generated by (magic number): 8000a
 // 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 79cf9f1..2411d2f 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 31
 
                               Capability Shader
@@ -34,7 +34,7 @@
                               MemberDecorate 22(bb) 0 Offset 0
                               Decorate 22(bb) Block
                               Decorate 24(bbi) DescriptorSet 0
-                              Decorate 24(bbi) Binding 0
+                              Decorate 24(bbi) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.structAssignment.frag.out b/Test/baseResults/spv.structAssignment.frag.out
index d61c0e4..8e82cac 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 50
 
                               Capability Shader
@@ -40,6 +40,7 @@
                               Decorate 40(samp2D) DescriptorSet 0
                               Decorate 40(samp2D) Binding 0
                               Decorate 44(coord) RelaxedPrecision
+                              Decorate 44(coord) Location 0
                               Decorate 45 RelaxedPrecision
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.structDeref.frag.out b/Test/baseResults/spv.structDeref.frag.out
index 2a114d7..94fc4e2 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 123
 
                               Capability Shader
@@ -40,6 +40,7 @@
                               Name 99  "gl_FragColor"
                               Name 116  "samp2D"
                               Name 122  "foo2"
+                              Decorate 61(coord) Location 0
                               Decorate 99(gl_FragColor) Location 0
                               Decorate 116(samp2D) DescriptorSet 0
                               Decorate 116(samp2D) Binding 0
diff --git a/Test/baseResults/spv.structure.frag.out b/Test/baseResults/spv.structure.frag.out
index e8f8b39..00fed0e 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 60
 
                               Capability Shader
@@ -27,6 +27,7 @@
                               Decorate 45(gl_FragColor) Location 0
                               Decorate 50(samp2D) DescriptorSet 0
                               Decorate 50(samp2D) Binding 0
+                              Decorate 54(coord) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.subgroup.frag.out b/Test/baseResults/spv.subgroup.frag.out
index ee932bf..ad11586 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): 80008
+// Generated by (magic number): 8000a
 // 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 279e646..c866f8e 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): 80008
+// Generated by (magic number): 8000a
 // 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 bc55b4e..ed6b5c1 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): 80008
+// Generated by (magic number): 8000a
 // 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 6b0a5ce..70cdc96 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): 80008
+// Generated by (magic number): 8000a
 // 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 6deaf55..34b090d 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): 80008
+// Generated by (magic number): 8000a
 // 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 29ea9ec..e531f6f 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): 80008
+// Generated by (magic number): 8000a
 // 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 9fe1964..0e83773 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): 80008
+// Generated by (magic number): 8000a
 // 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 2f6571b..fb9fa0c 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): 80008
+// Generated by (magic number): 8000a
 // 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 3971281..297fcec 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): 80008
+// Generated by (magic number): 8000a
 // 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 263f48d..1406bd1 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): 80008
+// Generated by (magic number): 8000a
 // 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 9f6a8c0..f503f8c 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): 80008
+// Generated by (magic number): 8000a
 // 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 af3385e..2f4393a 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): 80008
+// Generated by (magic number): 8000a
 // 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 9de4b98..ccfbacc 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): 80008
+// Generated by (magic number): 8000a
 // 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 ebd6132..beec1ac 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): 80008
+// Generated by (magic number): 8000a
 // 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 f241389..b798bae 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): 80008
+// Generated by (magic number): 8000a
 // 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 06150b0..d847be5 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): 80008
+// Generated by (magic number): 8000a
 // 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 63cc844..6fde1f9 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): 80008
+// Generated by (magic number): 8000a
 // 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 e16e309..7c7a0f9 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): 80008
+// Generated by (magic number): 8000a
 // 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 1c5e963..644fa72 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): 80008
+// Generated by (magic number): 8000a
 // 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 532b0d2..b160c5f 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): 80008
+// Generated by (magic number): 8000a
 // 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 ae5589a..68cd101 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): 80008
+// Generated by (magic number): 8000a
 // 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 6f6f8cf..ad8ffaa 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): 80008
+// Generated by (magic number): 8000a
 // 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 4bc556a..6b534a6 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 67
 
                               Capability Shader
@@ -22,23 +22,26 @@
                               Name 53  "ucolor"
                               Name 56  "usub"
                               Name 61  "usubMS"
+                              Decorate 15(icolor) Location 1
+                              Decorate 27(color) Location 0
                               Decorate 30(sub) DescriptorSet 0
                               Decorate 30(sub) Binding 0
                               Decorate 30(sub) InputAttachmentIndex 1
                               Decorate 35(subMS) DescriptorSet 0
-                              Decorate 35(subMS) Binding 0
+                              Decorate 35(subMS) Binding 1
                               Decorate 35(subMS) InputAttachmentIndex 2
                               Decorate 42(isub) DescriptorSet 0
-                              Decorate 42(isub) Binding 0
+                              Decorate 42(isub) Binding 2
                               Decorate 42(isub) InputAttachmentIndex 3
                               Decorate 45(isubMS) DescriptorSet 0
-                              Decorate 45(isubMS) Binding 0
+                              Decorate 45(isubMS) Binding 3
                               Decorate 45(isubMS) InputAttachmentIndex 4
+                              Decorate 53(ucolor) Location 2
                               Decorate 56(usub) DescriptorSet 0
-                              Decorate 56(usub) Binding 0
+                              Decorate 56(usub) Binding 4
                               Decorate 56(usub) InputAttachmentIndex 5
                               Decorate 61(usubMS) DescriptorSet 0
-                              Decorate 61(usubMS) Binding 0
+                              Decorate 61(usubMS) Binding 5
                               Decorate 61(usubMS) InputAttachmentIndex 6
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out
index 729257c..9c68657 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 269
 
                               Capability Shader
@@ -60,12 +60,14 @@
                               Decorate 60(local) RelaxedPrecision
                               Decorate 62(c) RelaxedPrecision
                               Decorate 62(c) Flat
+                              Decorate 62(c) Location 0
                               Decorate 63 RelaxedPrecision
                               Decorate 64 RelaxedPrecision
                               Decorate 66 RelaxedPrecision
                               Decorate 67 RelaxedPrecision
                               Decorate 73(f) RelaxedPrecision
                               Decorate 75(x) RelaxedPrecision
+                              Decorate 75(x) Location 2
                               Decorate 76 RelaxedPrecision
                               Decorate 77 RelaxedPrecision
                               Decorate 79 RelaxedPrecision
@@ -101,6 +103,7 @@
                               Decorate 127 RelaxedPrecision
                               Decorate 129(d) RelaxedPrecision
                               Decorate 129(d) Flat
+                              Decorate 129(d) Location 1
                               Decorate 130 RelaxedPrecision
                               Decorate 134 RelaxedPrecision
                               Decorate 135 RelaxedPrecision
@@ -149,20 +152,28 @@
                               Decorate 221 RelaxedPrecision
                               Decorate 222 RelaxedPrecision
                               Decorate 227(color) RelaxedPrecision
+                              Decorate 227(color) Location 0
                               Decorate 228 RelaxedPrecision
                               Decorate 229 RelaxedPrecision
                               Decorate 230 RelaxedPrecision
                               Decorate 231 RelaxedPrecision
                               Decorate 233(v) RelaxedPrecision
+                              Decorate 233(v) Location 3
+                              Decorate 234(param) RelaxedPrecision
                               Decorate 235 RelaxedPrecision
+                              Decorate 236(param) RelaxedPrecision
                               Decorate 237 RelaxedPrecision
+                              Decorate 238(param) RelaxedPrecision
                               Decorate 239 RelaxedPrecision
                               Decorate 240 RelaxedPrecision
                               Decorate 243 RelaxedPrecision
                               Decorate 244 RelaxedPrecision
                               Decorate 245 RelaxedPrecision
+                              Decorate 246(param) RelaxedPrecision
                               Decorate 247 RelaxedPrecision
+                              Decorate 248(param) RelaxedPrecision
                               Decorate 249 RelaxedPrecision
+                              Decorate 250(param) RelaxedPrecision
                               Decorate 251 RelaxedPrecision
                               Decorate 252 RelaxedPrecision
                               Decorate 254 RelaxedPrecision
diff --git a/Test/baseResults/spv.swizzle.frag.out b/Test/baseResults/spv.swizzle.frag.out
index 9b31a26..7e42c3e 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 108
 
                               Capability Shader
@@ -24,7 +24,10 @@
                               Name 81  "c"
                               Name 83  "rep"
                               Name 107  "blend"
+                              Decorate 14(u) Location 1
+                              Decorate 30(t) Location 2
                               Decorate 69(gl_FragColor) Location 0
+                              Decorate 107(blend) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.swizzleInversion.frag.out b/Test/baseResults/spv.swizzleInversion.frag.out
index 7964360..8d09934 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 46
 
                               Capability Shader
@@ -20,6 +20,8 @@
                               Name 37  "in3"
                               Name 40  "v32"
                               Name 43  "v31"
+                              Decorate 12(in4) Location 0
+                              Decorate 37(in3) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.test.frag.out b/Test/baseResults/spv.test.frag.out
index db77cbb..fddcdb8 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 55
 
                               Capability Shader
@@ -23,9 +23,14 @@
                               Name 49  "blend"
                               Decorate 16(texSampler2D) DescriptorSet 0
                               Decorate 16(texSampler2D) Binding 0
+                              Decorate 20(t) Location 3
+                              Decorate 22(scale) Location 1
                               Decorate 33(texSampler3D) DescriptorSet 0
-                              Decorate 33(texSampler3D) Binding 0
+                              Decorate 33(texSampler3D) Binding 1
+                              Decorate 37(coords) Location 4
                               Decorate 43(gl_FragColor) Location 0
+                              Decorate 46(u) Location 2
+                              Decorate 49(blend) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.test.vert.out b/Test/baseResults/spv.test.vert.out
index 3b06c66..3eb6435 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 24
 
                               Capability Shader
@@ -16,7 +16,11 @@
                               Name 15  "gl_Position"
                               Name 18  "transform"
                               Name 21  "position"
+                              Decorate 9(uv) Location 0
+                              Decorate 11(uv_in) Location 5
                               Decorate 15(gl_Position) BuiltIn Position
+                              Decorate 18(transform) Location 0
+                              Decorate 21(position) Location 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out
index 3ea7338..841bbd3 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 305
 
                               Capability Shader
@@ -41,17 +41,22 @@
                               Name 304  "t"
                               Decorate 32(texSampler1D) DescriptorSet 0
                               Decorate 32(texSampler1D) Binding 0
+                              Decorate 47(coords2D) Location 4
                               Decorate 76(texSampler2D) DescriptorSet 0
-                              Decorate 76(texSampler2D) Binding 0
+                              Decorate 76(texSampler2D) Binding 1
                               Decorate 104(texSampler3D) DescriptorSet 0
-                              Decorate 104(texSampler3D) Binding 0
+                              Decorate 104(texSampler3D) Binding 2
                               Decorate 130(texSamplerCube) DescriptorSet 0
-                              Decorate 130(texSamplerCube) Binding 0
+                              Decorate 130(texSamplerCube) Binding 3
                               Decorate 145(shadowSampler1D) DescriptorSet 0
-                              Decorate 145(shadowSampler1D) Binding 0
+                              Decorate 145(shadowSampler1D) Binding 4
                               Decorate 164(shadowSampler2D) DescriptorSet 0
-                              Decorate 164(shadowSampler2D) Binding 0
+                              Decorate 164(shadowSampler2D) Binding 5
                               Decorate 291(gl_FragColor) Location 0
+                              Decorate 294(u) Location 2
+                              Decorate 297(blend) Location 0
+                              Decorate 303(scale) Location 1
+                              Decorate 304(t) Location 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.texture.sampler.transform.frag.out b/Test/baseResults/spv.texture.sampler.transform.frag.out
index f2306e7..a297ea7 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 20
 
                               Capability Shader
@@ -13,8 +13,10 @@
                               Name 9  "color"
                               Name 13  "tex"
                               Name 17  "coord"
+                              Decorate 9(color) Location 0
                               Decorate 13(tex) DescriptorSet 0
                               Decorate 13(tex) Binding 0
+                              Decorate 17(coord) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out
index 3f9336b..544a0f3 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 150
 
                               Capability Shader
@@ -25,16 +25,17 @@
                               Name 148  "gl_Position"
                               Decorate 29(texSampler1D) DescriptorSet 0
                               Decorate 29(texSampler1D) Binding 0
+                              Decorate 39(coords2D) Location 0
                               Decorate 56(texSampler2D) DescriptorSet 0
-                              Decorate 56(texSampler2D) Binding 0
+                              Decorate 56(texSampler2D) Binding 1
                               Decorate 80(texSampler3D) DescriptorSet 0
-                              Decorate 80(texSampler3D) Binding 0
+                              Decorate 80(texSampler3D) Binding 2
                               Decorate 96(texSamplerCube) DescriptorSet 0
-                              Decorate 96(texSamplerCube) Binding 0
+                              Decorate 96(texSamplerCube) Binding 3
                               Decorate 106(shadowSampler1D) DescriptorSet 0
-                              Decorate 106(shadowSampler1D) Binding 0
+                              Decorate 106(shadowSampler1D) Binding 4
                               Decorate 118(shadowSampler2D) DescriptorSet 0
-                              Decorate 118(shadowSampler2D) Binding 0
+                              Decorate 118(shadowSampler2D) Binding 5
                               Decorate 148(gl_Position) BuiltIn Position
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.textureBuffer.vert.out b/Test/baseResults/spv.textureBuffer.vert.out
index 4631290..d18c656 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 42
 
                               Capability Shader
@@ -18,13 +18,13 @@
                               Decorate 9(tBuf) DescriptorSet 0
                               Decorate 9(tBuf) Binding 0
                               Decorate 13(s) DescriptorSet 0
-                              Decorate 13(s) Binding 0
+                              Decorate 13(s) Binding 1
                               Decorate 23(sBuf) DescriptorSet 0
-                              Decorate 23(sBuf) Binding 0
+                              Decorate 23(sBuf) Binding 2
                               Decorate 32(utBuf) DescriptorSet 0
-                              Decorate 32(utBuf) Binding 0
+                              Decorate 32(utBuf) Binding 3
                               Decorate 38(itBuf) DescriptorSet 0
-                              Decorate 38(itBuf) Binding 0
+                              Decorate 38(itBuf) Binding 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.textureGatherBiasLod.frag.out b/Test/baseResults/spv.textureGatherBiasLod.frag.out
index 10bdff0..3a9bb80 100644
--- a/Test/baseResults/spv.textureGatherBiasLod.frag.out
+++ b/Test/baseResults/spv.textureGatherBiasLod.frag.out
@@ -1,6 +1,6 @@
 spv.textureGatherBiasLod.frag
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 298
 
                               Capability Shader
@@ -32,12 +32,18 @@
                               Name 296  "fragColor"
                               Decorate 16(s2D) DescriptorSet 0
                               Decorate 16(s2D) Binding 0
+                              Decorate 20(c2) Location 0
+                              Decorate 25(bias) Location 4
                               Decorate 33(s2DArray) DescriptorSet 0
-                              Decorate 33(s2DArray) Binding 0
+                              Decorate 33(s2DArray) Binding 1
+                              Decorate 37(c3) Location 1
                               Decorate 47(sCube) DescriptorSet 0
-                              Decorate 47(sCube) Binding 0
+                              Decorate 47(sCube) Binding 2
                               Decorate 58(sCubeArray) DescriptorSet 0
-                              Decorate 58(sCubeArray) Binding 0
+                              Decorate 58(sCubeArray) Binding 3
+                              Decorate 61(c4) Location 2
+                              Decorate 176(lod) Location 3
+                              Decorate 296(fragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.types.frag.out b/Test/baseResults/spv.types.frag.out
index 3f7fd12..3e35da2 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 260
 
                               Capability Shader
@@ -48,13 +48,29 @@
                               Name 161  "i_f4"
                               Name 165  "gl_FragColor"
                               Decorate 96(u_i) Flat
+                              Decorate 96(u_i) Location 0
                               Decorate 98(i_i) Flat
+                              Decorate 98(i_i) Location 8
                               Decorate 105(u_i2) Flat
+                              Decorate 105(u_i2) Location 1
                               Decorate 107(i_i2) Flat
+                              Decorate 107(i_i2) Location 9
                               Decorate 114(u_i3) Flat
+                              Decorate 114(u_i3) Location 2
                               Decorate 116(i_i3) Flat
+                              Decorate 116(i_i3) Location 10
                               Decorate 123(u_i4) Flat
+                              Decorate 123(u_i4) Location 3
                               Decorate 125(i_i4) Flat
+                              Decorate 125(i_i4) Location 11
+                              Decorate 132(u_f) Location 4
+                              Decorate 134(i_f) Location 12
+                              Decorate 141(u_f2) Location 5
+                              Decorate 143(i_f2) Location 13
+                              Decorate 150(u_f3) Location 6
+                              Decorate 152(i_f3) Location 14
+                              Decorate 159(u_f4) Location 7
+                              Decorate 161(i_f4) Location 15
                               Decorate 165(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out
index 612b323..c19064d 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 213
 
                               Capability Shader
@@ -35,6 +35,7 @@
                               Decorate 12(u) RelaxedPrecision
                               Decorate 15(t) RelaxedPrecision
                               Decorate 15(t) Flat
+                              Decorate 15(t) Location 0
                               Decorate 19 RelaxedPrecision
                               Decorate 21 RelaxedPrecision
                               Decorate 27 RelaxedPrecision
@@ -56,11 +57,13 @@
                               Decorate 61 RelaxedPrecision
                               Decorate 62 RelaxedPrecision
                               Decorate 68(c) RelaxedPrecision
+                              Decorate 68(c) Location 0
                               Decorate 72(usampler) RelaxedPrecision
                               Decorate 72(usampler) DescriptorSet 0
                               Decorate 72(usampler) Binding 0
                               Decorate 73 RelaxedPrecision
                               Decorate 77(tc) RelaxedPrecision
+                              Decorate 77(tc) Location 2
                               Decorate 78 RelaxedPrecision
                               Decorate 79 RelaxedPrecision
                               Decorate 80 RelaxedPrecision
@@ -136,10 +139,13 @@
                               Decorate 202 RelaxedPrecision
                               Decorate 203 RelaxedPrecision
                               Decorate 206(f) RelaxedPrecision
+                              Decorate 206(f) Location 1
                               Decorate 208(v) RelaxedPrecision
                               Decorate 208(v) Flat
+                              Decorate 208(v) Location 3
                               Decorate 210(i) RelaxedPrecision
                               Decorate 210(i) Flat
+                              Decorate 210(i) Location 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.uniformArray.frag.out b/Test/baseResults/spv.uniformArray.frag.out
index 339d1de..8134383 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 53
 
                               Capability Shader
@@ -16,6 +16,9 @@
                               Name 35  "alpha"
                               Name 47  "gl_FragColor"
                               Name 52  "texSampler2D"
+                              Decorate 14(color) Location 1
+                              Decorate 25(inColor) Location 0
+                              Decorate 35(alpha) Location 7
                               Decorate 47(gl_FragColor) Location 0
                               Decorate 52(texSampler2D) DescriptorSet 0
                               Decorate 52(texSampler2D) Binding 0
diff --git a/Test/baseResults/spv.uniformInitializer.frag.out b/Test/baseResults/spv.uniformInitializer.frag.out
new file mode 100644
index 0000000..63595ae
--- /dev/null
+++ b/Test/baseResults/spv.uniformInitializer.frag.out
@@ -0,0 +1,35 @@
+spv.uniformInitializer.frag
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 16
+
+                              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"
+                              Name 14  "in_color"
+                              Decorate 9(color) Location 0
+                              Decorate 14(in_color) Location 0
+                              Decorate 14(in_color) DescriptorSet 0
+                              Decorate 14(in_color) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+        9(color):      8(ptr) Variable Output
+              10:    6(float) Constant 0
+              11:    6(float) Constant 1065353216
+              12:    7(fvec4) ConstantComposite 10 11 10 11
+              13:             TypePointer UniformConstant 7(fvec4)
+    14(in_color):     13(ptr) Variable UniformConstant 12
+         4(main):           2 Function None 3
+               5:             Label
+              15:    7(fvec4) Load 14(in_color)
+                              Store 9(color) 15
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.uniformInitializerSpecConstant.frag.out b/Test/baseResults/spv.uniformInitializerSpecConstant.frag.out
new file mode 100644
index 0000000..1cd053c
--- /dev/null
+++ b/Test/baseResults/spv.uniformInitializerSpecConstant.frag.out
@@ -0,0 +1,6 @@
+spv.uniformInitializerSpecConstant.frag
+ERROR: 0:9: '=' : uniform initializers must be constant 'layout( location=4) uniform float'
+ERROR: 1 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.uniformInitializerStruct.frag.out b/Test/baseResults/spv.uniformInitializerStruct.frag.out
new file mode 100644
index 0000000..5ce854d
--- /dev/null
+++ b/Test/baseResults/spv.uniformInitializerStruct.frag.out
@@ -0,0 +1,98 @@
+spv.uniformInitializerStruct.frag
+// Module Version 10000
+// Generated by (magic number): 8000a
+// Id's are bound by 63
+
+                              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"
+                              Name 15  "i"
+                              Name 26  ""
+                              MemberName 26 0  "r"
+                              MemberName 26 1  "g"
+                              MemberName 26 2  "b"
+                              Name 34  "parts"
+                              Decorate 9(color) Location 0
+                              Decorate 34(parts) Location 0
+                              Decorate 34(parts) DescriptorSet 0
+                              Decorate 34(parts) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+        9(color):      8(ptr) Variable Output
+              10:    6(float) Constant 0
+              11:    6(float) Constant 1065353216
+              12:    7(fvec4) ConstantComposite 10 10 10 11
+              13:             TypeInt 32 1
+              14:             TypePointer Function 13(int)
+              16:     13(int) Constant 0
+              23:     13(int) Constant 2
+              24:             TypeBool
+              26:             TypeStruct 6(float) 6(float) 6(float)
+              27:             TypeInt 32 0
+              28:     27(int) Constant 2
+              29:             TypeArray 26(struct) 28
+              30:  26(struct) ConstantComposite 11 11 11
+              31:  26(struct) ConstantComposite 10 11 10
+              32:          29 ConstantComposite 30 31
+              33:             TypePointer UniformConstant 29
+       34(parts):     33(ptr) Variable UniformConstant 32
+              36:             TypePointer UniformConstant 6(float)
+              39:     27(int) Constant 0
+              40:             TypePointer Output 6(float)
+              46:     13(int) Constant 1
+              49:     27(int) Constant 1
+         4(main):           2 Function None 3
+               5:             Label
+           15(i):     14(ptr) Variable Function
+                              Store 9(color) 12
+                              Store 15(i) 16
+                              Branch 17
+              17:             Label
+                              LoopMerge 19 20 None
+                              Branch 21
+              21:             Label
+              22:     13(int) Load 15(i)
+              25:    24(bool) SLessThan 22 23
+                              BranchConditional 25 18 19
+              18:               Label
+              35:     13(int)   Load 15(i)
+              37:     36(ptr)   AccessChain 34(parts) 35 16
+              38:    6(float)   Load 37
+              41:     40(ptr)   AccessChain 9(color) 39
+              42:    6(float)   Load 41
+              43:    6(float)   FAdd 42 38
+              44:     40(ptr)   AccessChain 9(color) 39
+                                Store 44 43
+              45:     13(int)   Load 15(i)
+              47:     36(ptr)   AccessChain 34(parts) 45 46
+              48:    6(float)   Load 47
+              50:     40(ptr)   AccessChain 9(color) 49
+              51:    6(float)   Load 50
+              52:    6(float)   FAdd 51 48
+              53:     40(ptr)   AccessChain 9(color) 49
+                                Store 53 52
+              54:     13(int)   Load 15(i)
+              55:     36(ptr)   AccessChain 34(parts) 54 23
+              56:    6(float)   Load 55
+              57:     40(ptr)   AccessChain 9(color) 28
+              58:    6(float)   Load 57
+              59:    6(float)   FAdd 58 56
+              60:     40(ptr)   AccessChain 9(color) 28
+                                Store 60 59
+                                Branch 20
+              20:               Label
+              61:     13(int)   Load 15(i)
+              62:     13(int)   IAdd 61 46
+                                Store 15(i) 62
+                                Branch 17
+              19:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.unit1.frag.out b/Test/baseResults/spv.unit1.frag.out
index b2ec724..02ddfec 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 69
 
                               Capability Shader
@@ -217,6 +217,8 @@
                               Name 67  "a1"
                               Name 68  "a2"
                               Decorate 25(gl_FragCoord) BuiltIn FragCoord
+                              Decorate 37(cin) Location 0
+                              Decorate 57(cout) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out
index cc6d96b..ee57d43 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 93
 
                               Capability Shader
@@ -33,12 +33,17 @@
                               Name 63  "coord"
                               Name 69  "constructed"
                               Decorate 10(Count) Flat
+                              Decorate 10(Count) Location 39
                               Decorate 20(foo3) Flat
+                              Decorate 20(foo3) Location 23
                               Decorate 34(foo2) Flat
+                              Decorate 34(foo2) Location 3
                               Decorate 36(foo) Flat
+                              Decorate 36(foo) Location 1
                               Decorate 54(gl_FragColor) Location 0
                               Decorate 59(samp2D) DescriptorSet 0
                               Decorate 59(samp2D) Binding 0
+                              Decorate 63(coord) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.varyingArray.frag.out b/Test/baseResults/spv.varyingArray.frag.out
index d5a59ae..1e6334a 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 61
 
                               Capability Shader
@@ -19,7 +19,11 @@
                               Name 48  "foo"
                               Decorate 13(texSampler2D) DescriptorSet 0
                               Decorate 13(texSampler2D) Binding 0
+                              Decorate 19(TexCoord) Location 2
+                              Decorate 34(color) Location 0
+                              Decorate 39(alpha) Location 1
                               Decorate 45(gl_FragColor) Location 0
+                              Decorate 48(foo) Location 8
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.varyingArrayIndirect.frag.out b/Test/baseResults/spv.varyingArrayIndirect.frag.out
index 799def9..ac9d192 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 70
 
                               Capability Shader
@@ -21,8 +21,14 @@
                               Name 56  "gl_FragColor"
                               Decorate 13(texSampler2D) DescriptorSet 0
                               Decorate 13(texSampler2D) Binding 0
+                              Decorate 19(userIn) Location 8
                               Decorate 22(b) Flat
+                              Decorate 22(b) Location 11
+                              Decorate 30(TexCoord) Location 2
                               Decorate 31(a) Flat
+                              Decorate 31(a) Location 10
+                              Decorate 45(color) Location 0
+                              Decorate 50(alpha) Location 1
                               Decorate 56(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.vecMatConstruct.frag.out b/Test/baseResults/spv.vecMatConstruct.frag.out
index 004b2bc..bfe5ae7 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): 80008
+// Generated by (magic number): 8000a
 // 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 78ee00d..6a9dccc 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): 80008
+// Generated by (magic number): 8000a
 // 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 6d419a6..96e5b07 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): 80008
+// Generated by (magic number): 8000a
 // 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 804b32c..c77285b 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 43
 
                               Capability Shader
@@ -18,7 +18,10 @@
                               Name 37  "gl_FragColor"
                               Name 40  "BaseColor"
                               Name 42  "d"
+                              Decorate 24(bigColor) Location 0
                               Decorate 37(gl_FragColor) Location 0
+                              Decorate 40(BaseColor) Location 1
+                              Decorate 42(d) Location 2
                2:             TypeVoid
                3:             TypeFunction 2
               10:             TypeFloat 32
diff --git a/Test/baseResults/spv.volatileAtomic.comp.out b/Test/baseResults/spv.volatileAtomic.comp.out
index 8326374..0364d90 100644
--- a/Test/baseResults/spv.volatileAtomic.comp.out
+++ b/Test/baseResults/spv.volatileAtomic.comp.out
@@ -1,6 +1,6 @@
 spv.volatileAtomic.comp
 // Module Version 10000
-// Generated by (magic number): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 18
 
                               Capability Shader
diff --git a/Test/baseResults/spv.vulkan110.int16.frag.out b/Test/baseResults/spv.vulkan110.int16.frag.out
index b94593c..39b36cb 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): 80008
+// Generated by (magic number): 8000a
 // 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 7592cf7..0774960 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 31
 
                               Capability Shader
@@ -33,7 +33,7 @@
                               MemberDecorate 22(bb) 0 Offset 0
                               Decorate 22(bb) Block
                               Decorate 24(bbi) DescriptorSet 0
-                              Decorate 24(bbi) Binding 0
+                              Decorate 24(bbi) Binding 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.while-continue-break.vert.out b/Test/baseResults/spv.while-continue-break.vert.out
index 132f503..246e5fd 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): 80008
+// Generated by (magic number): 8000a
 // 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 ea9a980..894dea1 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): 80008
+// Generated by (magic number): 8000a
 // 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 67d44f4..6155f7b 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 35
 
                               Capability Shader
@@ -15,6 +15,9 @@
                               Name 24  "d"
                               Name 28  "bigColor"
                               Name 33  "gl_FragColor"
+                              Decorate 11(BaseColor) Location 1
+                              Decorate 24(d) Location 2
+                              Decorate 28(bigColor) Location 0
                               Decorate 33(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.xfb.vert.out b/Test/baseResults/spv.xfb.vert.out
index 7eb38b3..3fdc60b 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): 80008
+// Generated by (magic number): 8000a
 // 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 0f593da..cbb8fc6 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): 80008
+// Generated by (magic number): 8000a
 // 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 77894b4..ef53b9a 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): 80008
+// Generated by (magic number): 8000a
 // 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 52ce965..e2c6093 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): 80008
+// Generated by (magic number): 8000a
 // 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 13be843..499ac8c 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): 80008
+// Generated by (magic number): 8000a
 // 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 7159f4a..f7476c7 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): 80008
+// Generated by (magic number): 8000a
 // 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 270d17a..bbd7768 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 33
 
                               Capability Shader
diff --git a/Test/baseResults/vulkan.ast.vert.out b/Test/baseResults/vulkan.ast.vert.out
index 2bf2065..d19c963 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): 80008
+// Generated by (magic number): 8000a
 // Id's are bound by 50
 
                               Capability Shader
@@ -306,7 +306,7 @@
               48:             TypeArray 44(fvec2) 41
          4(main):           2 Function None 3
                5:             Label
-              10:     8(bool) FOrdNotEqual 7(scf1) 9
+              10:     8(bool) FUnordNotEqual 7(scf1) 9
               18:    6(float) Select 11(scbt) 17 9
               19:    6(float) ConvertSToF 13(sci2)
               20:     12(int) ConvertFToS 7(scf1)
@@ -315,7 +315,7 @@
               28:    6(float) FAdd 7(scf1) 27
               29:    6(float) FNegate 7(scf1)
               32:     8(bool) FOrdGreaterThan 7(scf1) 7(scf1)
-              34:     8(bool) FOrdNotEqual 7(scf1) 7(scf1)
+              34:     8(bool) FUnordNotEqual 7(scf1) 7(scf1)
               43:          42 CompositeConstruct 39 40
               45:   44(fvec2) CompositeConstruct 7(scf1) 7(scf1)
               46:   44(fvec2) CompositeConstruct 7(scf1) 7(scf1)
diff --git a/Test/baseResults/web.operations.frag.out b/Test/baseResults/web.operations.frag.out
index d7e4d6e..b08480f 100644
--- a/Test/baseResults/web.operations.frag.out
+++ b/Test/baseResults/web.operations.frag.out
@@ -205,21 +205,21 @@
          %70 = OpLoad %mat4v4float %m4
          %72 = OpCompositeExtract %v4float %69 0
          %73 = OpCompositeExtract %v4float %70 0
-         %75 = OpFOrdNotEqual %v4bool %72 %73
+         %75 = OpFUnordNotEqual %v4bool %72 %73
          %76 = OpAny %bool %75
          %77 = OpCompositeExtract %v4float %69 1
          %78 = OpCompositeExtract %v4float %70 1
-         %79 = OpFOrdNotEqual %v4bool %77 %78
+         %79 = OpFUnordNotEqual %v4bool %77 %78
          %80 = OpAny %bool %79
          %81 = OpLogicalOr %bool %76 %80
          %82 = OpCompositeExtract %v4float %69 2
          %83 = OpCompositeExtract %v4float %70 2
-         %84 = OpFOrdNotEqual %v4bool %82 %83
+         %84 = OpFUnordNotEqual %v4bool %82 %83
          %85 = OpAny %bool %84
          %86 = OpLogicalOr %bool %81 %85
          %87 = OpCompositeExtract %v4float %69 3
          %88 = OpCompositeExtract %v4float %70 3
-         %89 = OpFOrdNotEqual %v4bool %87 %88
+         %89 = OpFUnordNotEqual %v4bool %87 %88
          %90 = OpAny %bool %89
          %91 = OpLogicalOr %bool %86 %90
          %92 = OpLoad %mat2v2float %m2
diff --git a/Test/baseResults/xfbUnsizedArray.error.vert.out b/Test/baseResults/xfbUnsizedArray.error.vert.out
new file mode 100644
index 0000000..3604141
--- /dev/null
+++ b/Test/baseResults/xfbUnsizedArray.error.vert.out
@@ -0,0 +1,69 @@
+xfbUnsizedArray.error.vert
+ERROR: 0:4: 'xfb_offset' : unsized array in buffer 0
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 430
+Requested GL_ARB_enhanced_layouts
+in xfb mode
+ERROR: node is still EOpNull!
+0:9  Function Definition: main( ( global void)
+0:9    Function Parameters: 
+0:11    Sequence
+0:11      Sequence
+0:11        move second child to first child ( temp 4-component vector of float)
+0:11          'result' ( temp 4-component vector of float)
+0:11          'in_vs' ( in 4-component vector of float)
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        direct index (layout( xfb_buffer=0 xfb_offset=0) smooth temp 4-component vector of float)
+0:13          'xfb_buffer' (layout( xfb_buffer=0 xfb_offset=0) smooth out unsized 1-element array of 4-component vector of float)
+0:13          Constant:
+0:13            0 (const int)
+0:13        divide ( temp 4-component vector of float)
+0:13          'result' ( temp 4-component vector of float)
+0:13          Constant:
+0:13            2.000000
+0:15      move second child to first child ( temp 4-component vector of float)
+0:15        'out_vs' ( smooth out 4-component vector of float)
+0:15        'result' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'xfb_buffer' (layout( xfb_buffer=0 xfb_offset=0) smooth out unsized 1-element array of 4-component vector of float)
+0:?     'in_vs' ( in 4-component vector of float)
+0:?     'out_vs' ( smooth out 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
+Requested GL_ARB_enhanced_layouts
+in xfb mode
+ERROR: node is still EOpNull!
+0:9  Function Definition: main( ( global void)
+0:9    Function Parameters: 
+0:11    Sequence
+0:11      Sequence
+0:11        move second child to first child ( temp 4-component vector of float)
+0:11          'result' ( temp 4-component vector of float)
+0:11          'in_vs' ( in 4-component vector of float)
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        direct index (layout( xfb_buffer=0 xfb_offset=0) smooth temp 4-component vector of float)
+0:13          'xfb_buffer' (layout( xfb_buffer=0 xfb_offset=0) smooth out 1-element array of 4-component vector of float)
+0:13          Constant:
+0:13            0 (const int)
+0:13        divide ( temp 4-component vector of float)
+0:13          'result' ( temp 4-component vector of float)
+0:13          Constant:
+0:13            2.000000
+0:15      move second child to first child ( temp 4-component vector of float)
+0:15        'out_vs' ( smooth out 4-component vector of float)
+0:15        'result' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'xfb_buffer' (layout( xfb_buffer=0 xfb_offset=0) smooth out 1-element array of 4-component vector of float)
+0:?     'in_vs' ( in 4-component vector of float)
+0:?     'out_vs' ( smooth out 4-component vector of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/glsl.140.layoutOffset.error.vert b/Test/glsl.140.layoutOffset.error.vert
new file mode 100644
index 0000000..c57b5bc
--- /dev/null
+++ b/Test/glsl.140.layoutOffset.error.vert
@@ -0,0 +1,14 @@
+#version 140

+

+layout (std140) uniform UBO // offset can't use under version 140

+{

+    layout(offset = 0) vec4 a;

+};

+

+in  vec4 in_vs;

+out vec4 out_vs;

+

+void main()

+{

+    out_vs = in_vs + a;

+}

diff --git a/Test/glsl.430.layoutOffset.error.vert b/Test/glsl.430.layoutOffset.error.vert
new file mode 100644
index 0000000..831d002
--- /dev/null
+++ b/Test/glsl.430.layoutOffset.error.vert
@@ -0,0 +1,14 @@
+#version 430 core

+

+layout (std140) uniform UBO // offset can't use on 430 core with out extension require

+{

+    layout(offset = 0) vec4 a;

+};

+

+in  vec4 in_vs;

+out vec4 out_vs;

+

+void main()

+{

+    out_vs = in_vs + a;

+}

diff --git a/Test/glsl.es300.layoutOffset.error.vert b/Test/glsl.es300.layoutOffset.error.vert
new file mode 100644
index 0000000..c966f94
--- /dev/null
+++ b/Test/glsl.es300.layoutOffset.error.vert
@@ -0,0 +1,14 @@
+#version 300 es

+

+layout (binding = 0, offset = 0) uniform UBO // offset can't use on under version es 300

+{

+    vec4 a;

+};

+

+in  vec4 in_vs;

+out vec4 out_vs;

+

+void main()

+{

+    out_vs = in_vs + a;

+}

diff --git a/Test/hlsl.inoutquals.negative.frag b/Test/hlsl.inoutquals.negative.frag
new file mode 100644
index 0000000..380dc2c
--- /dev/null
+++ b/Test/hlsl.inoutquals.negative.frag
@@ -0,0 +1,7 @@
+in float invalid1;
+in out float invalid2;
+inout float invalid3;
+out float invalid4;
+
+void main() {
+}
diff --git a/Test/hlsl.matpack-pragma-global.frag b/Test/hlsl.matpack-pragma-global.frag
new file mode 100644
index 0000000..2a0ff45
--- /dev/null
+++ b/Test/hlsl.matpack-pragma-global.frag
@@ -0,0 +1,8 @@
+#pragma pack_matrix(row_major)
+
+float4x4 g_GlobalMat1;
+
+float4 main() : SV_Target0
+{
+    return g_GlobalMat1[0];
+}
diff --git a/Test/hlsl.sample.dx9.frag b/Test/hlsl.sample.dx9.frag
index 2609419..ed82c52 100644
--- a/Test/hlsl.sample.dx9.frag
+++ b/Test/hlsl.sample.dx9.frag
@@ -3,7 +3,7 @@
 sampler1D          g_sam1D   : register(t1);
 sampler2D          g_sam2D   : register(t2);
 sampler3D          g_sam3D	 : register(t3);
-samplerCube        g_samCube : register(t4);
+samplerCUBE        g_samCube : register(t4);
 
 struct PS_OUTPUT
 {
diff --git a/Test/runtests b/Test/runtests
index 1a7c7c9..df07046 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -12,12 +12,30 @@
 HASERROR=0
 mkdir -p $TARGETDIR
 
+LIBPATH="$(cd "$(dirname "$(dirname $EXE)")" && pwd)/lib"
+if [ -d "${LIBPATH}" ]; then
+    export LD_LIBRARY_PATH="${LIBPATH}:${LD_LIBRARY_PATH}" 
+fi
+
+function run {
+    $EXE $@
+    result=$?
+    case "$result" in
+    [0-6]) # Valid success and error codes
+        return
+    ;;
+    *)
+        echo "$EXE returned $result"
+        HASERROR=1
+    esac
+}
+
 if [ -a localtestlist ]
   then
     while read t; do
         echo Running $t...
         b=`basename $t`
-        $EXE -i -l $t > $TARGETDIR/$b.out
+        run -i -l $t > $TARGETDIR/$b.out
         diff -b $BASEDIR/$b.out $TARGETDIR/$b.out || HASERROR=1
     done < localtestlist
 fi
@@ -28,40 +46,40 @@
 # special tests
 #
 
-$EXE badMacroArgs.frag > $TARGETDIR/badMacroArgs.frag.out
+run badMacroArgs.frag > $TARGETDIR/badMacroArgs.frag.out
 diff -b $BASEDIR/badMacroArgs.frag.out $TARGETDIR/badMacroArgs.frag.out || HASERROR=1
 
 #
 # reflection tests
 #
 echo Running reflection...
-$EXE -l -q -C reflection.vert > $TARGETDIR/reflection.vert.out
+run -l -q -C reflection.vert > $TARGETDIR/reflection.vert.out
 diff -b $BASEDIR/reflection.vert.out $TARGETDIR/reflection.vert.out || HASERROR=1
-$EXE -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks reflection.options.vert > $TARGETDIR/reflection.options.vert.out
+run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.options.vert > $TARGETDIR/reflection.options.vert.out
 diff -b $BASEDIR/reflection.options.vert.out $TARGETDIR/reflection.options.vert.out || HASERROR=1
-$EXE -l -q -C reflection.frag > $TARGETDIR/reflection.frag.out
+run -l -q -C reflection.frag > $TARGETDIR/reflection.frag.out
 diff -b $BASEDIR/reflection.frag.out $TARGETDIR/reflection.frag.out || HASERROR=1
-$EXE -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks reflection.frag > $TARGETDIR/reflection.options.frag.out
+run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.frag > $TARGETDIR/reflection.options.frag.out
 diff -b $BASEDIR/reflection.options.frag.out $TARGETDIR/reflection.options.frag.out || HASERROR=1
-$EXE -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks reflection.options.geom > $TARGETDIR/reflection.options.geom.out
+run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.options.geom > $TARGETDIR/reflection.options.geom.out
 diff -b $BASEDIR/reflection.options.geom.out $TARGETDIR/reflection.options.geom.out || HASERROR=1
-$EXE -l -q -C reflection.linked.vert reflection.linked.frag > $TARGETDIR/reflection.linked.out
+run -l -q -C reflection.linked.vert reflection.linked.frag > $TARGETDIR/reflection.linked.out
 diff -b $BASEDIR/reflection.linked.out $TARGETDIR/reflection.linked.out || HASERROR=1
-$EXE -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks reflection.linked.vert reflection.linked.frag > $TARGETDIR/reflection.linked.options.out
+run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.linked.vert reflection.linked.frag > $TARGETDIR/reflection.linked.options.out
 diff -b $BASEDIR/reflection.linked.options.out $TARGETDIR/reflection.linked.options.out || HASERROR=1
-$EXE -D -Od -e flizv -l -q -C -V -Od hlsl.reflection.vert > $TARGETDIR/hlsl.reflection.vert.out
+run -D -Od -e flizv -l -q -C -V -Od hlsl.reflection.vert > $TARGETDIR/hlsl.reflection.vert.out
 diff -b $BASEDIR/hlsl.reflection.vert.out $TARGETDIR/hlsl.reflection.vert.out || HASERROR=1
-$EXE -D -Od -e main -l -q -C -V -Od hlsl.reflection.binding.frag > $TARGETDIR/hlsl.reflection.binding.frag.out
+run -D -Od -e main -l -q -C -V -Od hlsl.reflection.binding.frag > $TARGETDIR/hlsl.reflection.binding.frag.out
 diff -b $BASEDIR/hlsl.reflection.binding.frag.out $TARGETDIR/hlsl.reflection.binding.frag.out || HASERROR=1
-$EXE -D -Od -e main -l -q --hlsl-iomap --auto-map-bindings --stb 10 --sbb 20 --ssb 30 --suavb 40 --scb 50 -D -V -e main -Od hlsl.automap.frag > $TARGETDIR/hlsl.automap.frag.out
+run -D -Od -e main -l -q --hlsl-iomap --auto-map-bindings --stb 10 --sbb 20 --ssb 30 --suavb 40 --scb 50 -D -V -e main -Od hlsl.automap.frag > $TARGETDIR/hlsl.automap.frag.out
 diff -b $BASEDIR/hlsl.automap.frag.out $TARGETDIR/hlsl.automap.frag.out || HASERROR=1
 
 #
 # multi-threaded test
 #
 echo Comparing single thread to multithread for all tests in current directory...
-$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
+run -i -C *.vert *.geom *.frag *.tesc *.tese *.comp > $TARGETDIR/singleThread.out
+run -i -C *.vert *.geom *.frag *.tesc *.tese *.comp -t > $TARGETDIR/multiThread.out
 diff $TARGETDIR/singleThread.out $TARGETDIR/multiThread.out || HASERROR=1
 if [ $HASERROR -eq 0 ]
 then
@@ -73,14 +91,14 @@
 # entry point renaming tests
 #
 echo Running entry-point renaming tests
-$EXE -i -H -V -D -Od --entry-point main_in_spv --ku --source-entrypoint main -Od hlsl.entry.rename.frag > $TARGETDIR/hlsl.entry.rename.frag.out
+run -i -H -V -D -Od --entry-point main_in_spv --ku --source-entrypoint main -Od hlsl.entry.rename.frag > $TARGETDIR/hlsl.entry.rename.frag.out
 diff -b $BASEDIR/hlsl.entry.rename.frag.out $TARGETDIR/hlsl.entry.rename.frag.out || HASERROR=1
 
 #
 # Testing ill-defined uncalled function
 #
 echo Running ill-defined uncalled function
-$EXE -D -Od -e main -H -Od hlsl.deadFunctionMissingBody.vert > $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out
+run -D -Od -e main -H -Od hlsl.deadFunctionMissingBody.vert > $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out
 diff -b $BASEDIR/hlsl.deadFunctionMissingBody.vert.out $TARGETDIR/hlsl.deadFunctionMissingBody.vert.out || HASERROR=1
 
 if [ $HASERROR -eq 0 ]
@@ -94,66 +112,66 @@
 # Testing -S and compound suffixes
 #
 echo Running explicit stage test and compound suffix tests
-$EXE -Od -i -S vert nosuffix > $TARGETDIR/nosuffix.out
+run -Od -i -S vert nosuffix > $TARGETDIR/nosuffix.out
 diff -b $BASEDIR/nosuffix.out $TARGETDIR/nosuffix.out || HASERROR=1
-$EXE -Od -i compoundsuffix.vert.glsl > $TARGETDIR/compoundsuffix.vert.glsl
+run -Od -i compoundsuffix.vert.glsl > $TARGETDIR/compoundsuffix.vert.glsl
 diff -b $BASEDIR/compoundsuffix.vert.glsl $TARGETDIR/compoundsuffix.vert.glsl || HASERROR=1
-$EXE -Od -e main -H compoundsuffix.frag.hlsl > $TARGETDIR/compoundsuffix.frag.hlsl
+run -Od -e main -H compoundsuffix.frag.hlsl > $TARGETDIR/compoundsuffix.frag.hlsl
 diff -b $BASEDIR/compoundsuffix.frag.hlsl $TARGETDIR/compoundsuffix.frag.hlsl || HASERROR=1
 
 #
 # Testing --hlsl-offsets
 #
 echo Running hlsl offsets
-$EXE -i --hlsl-offsets -H spv.hlslOffsets.vert > $TARGETDIR/spv.hlslOffsets.vert.out
+run -i --hlsl-offsets -H spv.hlslOffsets.vert > $TARGETDIR/spv.hlslOffsets.vert.out
 diff -b $BASEDIR/spv.hlslOffsets.vert.out $TARGETDIR/spv.hlslOffsets.vert.out || HASERROR=1
 
 echo Running hlsl offsets
-$EXE -i  --hlsl-offsets -D -Od -e main -H -Od hlsl.hlslOffset.vert > $TARGETDIR/hlsl.hlslOffset.vert.out
+run -i  --hlsl-offsets -D -Od -e main -H -Od hlsl.hlslOffset.vert > $TARGETDIR/hlsl.hlslOffset.vert.out
 diff -b $BASEDIR/hlsl.hlslOffset.vert.out $TARGETDIR/hlsl.hlslOffset.vert.out || HASERROR=1
 
 #
 # Testing --resource-set-binding
 #
 echo Configuring HLSL descriptor set and binding number manually
-$EXE -V -D -Od -e main -H -Od hlsl.multiDescriptorSet.frag --rsb frag t0 0 0 t1 1 0 s0 0 1 s1 1 1 b0 2 0 b1 2 1 b2 2 2 > $TARGETDIR/hlsl.multiDescriptorSet.frag.out
+run -V -D -Od -e main -H -Od hlsl.multiDescriptorSet.frag --rsb frag t0 0 0 t1 1 0 s0 0 1 s1 1 1 b0 2 0 b1 2 1 b2 2 2 > $TARGETDIR/hlsl.multiDescriptorSet.frag.out
 diff -b $BASEDIR/hlsl.multiDescriptorSet.frag.out $TARGETDIR/hlsl.multiDescriptorSet.frag.out || HASERROR=1
 
-$EXE -V -D -Od -e main -H -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb 4 > $TARGETDIR/hlsl.explicitDescriptorSet.frag.out
+run -V -D -Od -e main -H -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb 4 > $TARGETDIR/hlsl.explicitDescriptorSet.frag.out
 diff -b $BASEDIR/hlsl.explicitDescriptorSet.frag.out $TARGETDIR/hlsl.explicitDescriptorSet.frag.out || HASERROR=1
 
-$EXE -V -D -Od -e main -H -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb frag 3 > $TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out
+run -V -D -Od -e main -H -Od hlsl.explicitDescriptorSet.frag --hlsl-iomap --amb --ssb 10 --stb 20 --rsb frag 3 > $TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out
 diff -b $BASEDIR/hlsl.explicitDescriptorSet-2.frag.out $TARGETDIR/hlsl.explicitDescriptorSet-2.frag.out || HASERROR=1
 
 #
 # Testing per-descriptor-set IO map shift
 #
 echo 'Testing per-descriptor-set IO map shift'
-$EXE -e main --hlsl-iomap --ssb 10 1 15 2 --stb 20 --stb 25 2 --stb 70 6 --suavb 30 --suavb 40 2 --sub 50 6 -i -q -D -Od -V hlsl.shift.per-set.frag > $TARGETDIR/hlsl.shift.per-set.frag.out || HASERROR=1
+run -e main --hlsl-iomap --ssb 10 1 15 2 --stb 20 --stb 25 2 --stb 70 6 --suavb 30 --suavb 40 2 --sub 50 6 -i -q -D -Od -V hlsl.shift.per-set.frag > $TARGETDIR/hlsl.shift.per-set.frag.out || HASERROR=1
 diff -b $BASEDIR/hlsl.shift.per-set.frag.out $TARGETDIR/hlsl.shift.per-set.frag.out || HASERROR=1
 
 #
 # Testing location error
 #
 echo Testing SPV no location
-$EXE -V -C spv.noLocation.vert > $TARGETDIR/spv.noLocation.vert.out
+run -V -C spv.noLocation.vert > $TARGETDIR/spv.noLocation.vert.out
 diff -b $BASEDIR/spv.noLocation.vert.out $TARGETDIR/spv.noLocation.vert.out || HASERROR=1
-$EXE -G -H --aml spv.noBuiltInLoc.vert > $TARGETDIR/spv.noBuiltInLoc.vert.out
+run -G -H --aml spv.noBuiltInLoc.vert > $TARGETDIR/spv.noBuiltInLoc.vert.out
 diff -b $BASEDIR/spv.noBuiltInLoc.vert.out $TARGETDIR/spv.noBuiltInLoc.vert.out || HASERROR=1
-$EXE -G spv.looseUniformNoLoc.vert > $TARGETDIR/spv.looseUniformNoLoc.vert.out
+run -G spv.looseUniformNoLoc.vert > $TARGETDIR/spv.looseUniformNoLoc.vert.out
 diff -b $BASEDIR/spv.looseUniformNoLoc.vert.out $TARGETDIR/spv.looseUniformNoLoc.vert.out || HASERROR=1
 
 #
 # Testing debug information
 #
 echo Testing SPV Debug Information
-$EXE -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \
+run -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \
      -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.frag.out
 diff -b $BASEDIR/spv.debugInfo.frag.out $TARGETDIR/spv.debugInfo.frag.out || HASERROR=1
-$EXE -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \
+run -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \
      -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.1.1.frag.out
 diff -b $BASEDIR/spv.debugInfo.1.1.frag.out $TARGETDIR/spv.debugInfo.1.1.frag.out || HASERROR=1
-$EXE -g -D -Od -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --spirv-val --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \
+run -g -D -Od -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --spirv-val --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \
      --sep origMain -H -Od spv.hlslDebugInfo.vert --rsb vert t0 0 0 > $TARGETDIR/spv.hlslDebugInfo.frag.out
 diff -b $BASEDIR/spv.hlslDebugInfo.frag.out $TARGETDIR/spv.hlslDebugInfo.frag.out || HASERROR=1
 
@@ -161,49 +179,49 @@
 # Testing Includer
 #
 echo Testing Includer
-$EXE -D -Od -e main -H -Od ../Test/hlsl.include.vert > $TARGETDIR/hlsl.include.vert.out
+run -D -Od -e main -H -Od ../Test/hlsl.include.vert > $TARGETDIR/hlsl.include.vert.out
 diff -b $BASEDIR/hlsl.include.vert.out $TARGETDIR/hlsl.include.vert.out || HASERROR=1
-$EXE -D -Od -e main -H -Od hlsl.includeNegative.vert > $TARGETDIR/hlsl.includeNegative.vert.out
+run -D -Od -e main -H -Od hlsl.includeNegative.vert > $TARGETDIR/hlsl.includeNegative.vert.out
 diff -b $BASEDIR/hlsl.includeNegative.vert.out $TARGETDIR/hlsl.includeNegative.vert.out || HASERROR=1
-$EXE -l -i include.vert > $TARGETDIR/include.vert.out
+run -l -i include.vert > $TARGETDIR/include.vert.out
 diff -b $BASEDIR/include.vert.out $TARGETDIR/include.vert.out || HASERROR=1
-$EXE -D -Od -e main -H -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > $TARGETDIR/hlsl.dashI.vert.out
+run -D -Od -e main -H -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > $TARGETDIR/hlsl.dashI.vert.out
 diff -b $BASEDIR/hlsl.dashI.vert.out $TARGETDIR/hlsl.dashI.vert.out || HASERROR=1
-$EXE -D -Od -e MainPs -H -Od -g hlsl.pp.line3.frag > $TARGETDIR/hlsl.pp.line3.frag.out
+run -D -Od -e MainPs -H -Od -g hlsl.pp.line3.frag > $TARGETDIR/hlsl.pp.line3.frag.out
 diff -b $BASEDIR/hlsl.pp.line3.frag.out $TARGETDIR/hlsl.pp.line3.frag.out || HASERROR=1
 
 #
 # Testing -D and -U
 #
 echo "Testing -D and -U"
-$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
+run -DUNDEFED -UIN_SHADER -DFOO=200 -i -l --U UNDEFED --define-macro MUL=FOO*2 glsl.-D-U.frag > $TARGETDIR/glsl.-D-U.frag.out
 diff -b $BASEDIR/glsl.-D-U.frag.out $TARGETDIR/glsl.-D-U.frag.out || HASERROR=1
-$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
+run -D -Od -e main -V -i -DUNDEFED -UIN_SHADER --D FOO=200 --undef-macro UNDEFED -Od hlsl.-D-U.frag > $TARGETDIR/hlsl.-D-U.frag.out
 diff -b $BASEDIR/hlsl.-D-U.frag.out $TARGETDIR/hlsl.-D-U.frag.out || HASERROR=1
 
 #
 # Test --client and --target-env
 #
 echo "Testing --client and --target-env"
-$EXE --client vulkan100       spv.targetVulkan.vert || HASERROR=1
-$EXE --client opengl100       spv.targetOpenGL.vert || HASERROR=1
-$EXE --target-env vulkan1.0   spv.targetVulkan.vert || HASERROR=1
-$EXE --target-env vulkan1.1   spv.targetVulkan.vert || HASERROR=1
-$EXE --target-env 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
-$EXE --target-env spirv1.2 -V spv.targetVulkan.vert || HASERROR=1
+run --client vulkan100       spv.targetVulkan.vert || HASERROR=1
+run --client opengl100       spv.targetOpenGL.vert || HASERROR=1
+run --target-env vulkan1.0   spv.targetVulkan.vert || HASERROR=1
+run --target-env vulkan1.1   spv.targetVulkan.vert || HASERROR=1
+run --target-env vulkan1.2   spv.targetVulkan.vert || HASERROR=1
+run --target-env opengl      spv.targetOpenGL.vert || HASERROR=1
+run -V100                    spv.targetVulkan.vert || HASERROR=1
+run -G100                    spv.targetOpenGL.vert || HASERROR=1
+run --target-env spirv1.2 -V spv.targetVulkan.vert || HASERROR=1
 
 #
 # Testing GLSL entry point rename
 #
 echo "Testing GLSL entry point rename"
-$EXE -H -e foo --source-entrypoint main glsl.entryPointRename.vert > $TARGETDIR/glsl.entryPointRename.vert.out
+run -H -e foo --source-entrypoint main glsl.entryPointRename.vert > $TARGETDIR/glsl.entryPointRename.vert.out
 diff -b $BASEDIR/glsl.entryPointRename.vert.out $TARGETDIR/glsl.entryPointRename.vert.out || HASERROR=1
-$EXE -H -e foo --source-entrypoint bar glsl.entryPointRename.vert > $TARGETDIR/glsl.entryPointRename.vert.bad.out
+run -H -e foo --source-entrypoint bar glsl.entryPointRename.vert > $TARGETDIR/glsl.entryPointRename.vert.bad.out
 diff -b $BASEDIR/glsl.entryPointRename.vert.bad.out $TARGETDIR/glsl.entryPointRename.vert.bad.out || HASERROR=1
-$EXE -H -e foo --source-entrypoint main glsl.entryPointRename2.vert > $TARGETDIR/glsl.entryPointRename2.vert.out
+run -H -e foo --source-entrypoint main glsl.entryPointRename2.vert > $TARGETDIR/glsl.entryPointRename2.vert.out
 diff -b $BASEDIR/glsl.entryPointRename2.vert.out $TARGETDIR/glsl.entryPointRename2.vert.out || HASERROR=1
 
 #
@@ -219,21 +237,21 @@
 # Testing position Y inversion
 #
 echo "Testing position Y inversion"
-$EXE -H -e main -V -D -Od -H -i --iy hlsl.y-negate-1.vert > $TARGETDIR/hlsl.y-negate-1.vert.out
+run -H -e main -V -D -Od -H -i --iy hlsl.y-negate-1.vert > $TARGETDIR/hlsl.y-negate-1.vert.out
 diff -b $BASEDIR/hlsl.y-negate-1.vert.out $TARGETDIR/hlsl.y-negate-1.vert.out || HASERROR=1
-$EXE -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-2.vert > $TARGETDIR/hlsl.y-negate-2.vert.out
+run -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-2.vert > $TARGETDIR/hlsl.y-negate-2.vert.out
 diff -b $BASEDIR/hlsl.y-negate-2.vert.out $TARGETDIR/hlsl.y-negate-2.vert.out || HASERROR=1
-$EXE -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-3.vert > $TARGETDIR/hlsl.y-negate-3.vert.out
+run -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-3.vert > $TARGETDIR/hlsl.y-negate-3.vert.out
 diff -b $BASEDIR/hlsl.y-negate-3.vert.out $TARGETDIR/hlsl.y-negate-3.vert.out || HASERROR=1
 
 #
 # Testing hlsl_functionality1
 #
 echo "Testing hlsl_functionality1"
-$EXE -H -e main -D -Od -fhlsl_functionality1 hlsl.structbuffer.incdec.frag > \
+run -H -e main -D -Od -fhlsl_functionality1 hlsl.structbuffer.incdec.frag > \
     $TARGETDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out
 diff -b $BASEDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out $TARGETDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out || HASERROR=1
-$EXE -H -e main -D -Od -fhlsl_functionality1 hlsl.noSemantic.functionality1.comp > \
+run -H -e main -D -Od -fhlsl_functionality1 hlsl.noSemantic.functionality1.comp > \
     $TARGETDIR/hlsl.noSemantic.functionality1.comp.out
 diff -b $BASEDIR/hlsl.noSemantic.functionality1.comp.out $TARGETDIR/hlsl.noSemantic.functionality1.comp.out || HASERROR=1
 
@@ -241,7 +259,7 @@
 # Testing HLSL-specific PP feature expansion
 #
 echo "Testing HLSL-specific PP feature expansion"
-$EXE -D -E hlsl.pp.expand.frag > $TARGETDIR/hlsl.pp.expand.frag.out 2> $TARGETDIR/hlsl.pp.expand.frag.err
+run -D -E hlsl.pp.expand.frag > $TARGETDIR/hlsl.pp.expand.frag.out 2> $TARGETDIR/hlsl.pp.expand.frag.err
 diff -b $BASEDIR/hlsl.pp.expand.frag.out $TARGETDIR/hlsl.pp.expand.frag.out || HASERROR=1
 diff -b $BASEDIR/hlsl.pp.expand.frag.err $TARGETDIR/hlsl.pp.expand.frag.err || HASERROR=1
 
@@ -249,7 +267,7 @@
 # Test --nan-clamp
 #
 echo "Testing nan-clamp"
-$EXE --nan-clamp -H --aml --amb spv.400.frag > $TARGETDIR/spv.400.frag.nanclamp.out
+run --nan-clamp -H --aml --amb spv.400.frag > $TARGETDIR/spv.400.frag.nanclamp.out
 diff -b $BASEDIR/spv.400.frag.nanclamp.out $TARGETDIR/spv.400.frag.nanclamp.out || HASERROR=1
 
 #
diff --git a/Test/spv.1.4.OpEntryPoint.opaqueParams.vert b/Test/spv.1.4.OpEntryPoint.opaqueParams.vert
new file mode 100644
index 0000000..71c287d
--- /dev/null
+++ b/Test/spv.1.4.OpEntryPoint.opaqueParams.vert
@@ -0,0 +1,15 @@
+#version 450

+

+layout(binding = 0) uniform sampler2D s2D;

+layout(binding = 1) uniform texture2D t2D;

+layout(binding = 3) uniform sampler s;

+

+vec2 funOpaque(in sampler2D s2D, texture2D t2D, sampler s)

+{

+    return textureSize(s2D, 0) * texture(sampler2D(t2D, s), vec2(0.5)).xy;

+}

+

+void main()

+{

+    vec2 size = funOpaque(s2D, t2D, s);

+}
\ No newline at end of file
diff --git a/Test/spv.140.frag b/Test/spv.140.frag
index ceeac47..92923eb 100644
--- a/Test/spv.140.frag
+++ b/Test/spv.140.frag
@@ -1,4 +1,5 @@
 #version 140

+#extension GL_ARB_enhanced_layouts : require

 

 in vec4 k;

 out vec4 o;

diff --git a/Test/spv.atomicFloat.comp b/Test/spv.atomicFloat.comp
new file mode 100755
index 0000000..2022734
--- /dev/null
+++ b/Test/spv.atomicFloat.comp
@@ -0,0 +1,197 @@
+#version 450 core
+
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_EXT_shader_atomic_float: enable
+#pragma use_vulkan_memory_model
+
+layout(local_size_x = 16, local_size_y = 16) in;
+
+layout(binding = 0) buffer Buffer
+{
+    float dataf;
+    double datad;
+} buf;
+
+shared float  atomf;
+shared double atomd;
+
+layout(binding = 0, r32f) volatile coherent uniform image1D        fimage1D;
+layout(binding = 1, r32f) volatile coherent uniform image1DArray   fimage1DArray;
+layout(binding = 2, r32f) volatile coherent uniform image2D        fimage2D;
+layout(binding = 3, r32f) volatile coherent uniform image2DArray   fimage2DArray;
+layout(binding = 4, r32f) volatile coherent uniform image2DRect    fimage2DRect;
+layout(binding = 5, r32f) volatile coherent uniform imageCube      fimageCube;
+layout(binding = 6, r32f) volatile coherent uniform imageCubeArray fimageCubeArray;
+layout(binding = 9, r32f) volatile coherent uniform image3D        fimage3D;
+
+void main()
+{
+    //atomicAdd
+    float resultf = 0;
+    resultf = atomicAdd(atomf, 3.0);
+    resultf = atomicAdd(atomf, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed);
+    resultf = atomicAdd(buf.dataf, 3.0);
+    resultf = atomicAdd(buf.dataf, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed);
+
+    double resultd = 0;
+    resultd = atomicAdd(atomd, 3.0);
+    resultd = atomicAdd(atomd, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed);
+    resultd = atomicAdd(buf.datad, 3.0);
+    resultd = atomicAdd(buf.datad, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed);
+
+    //atomicExchange
+    resultf = atomicExchange(buf.dataf, resultf);
+    buf.dataf += resultf;
+    resultf = atomicExchange(buf.dataf, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.dataf += resultf;
+    resultf = atomicExchange(atomf, resultf);
+    buf.dataf += resultf;
+    resultf = atomicExchange(atomf, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.dataf += resultf;
+
+    resultd = atomicExchange(buf.datad, resultd);
+    buf.datad += resultd;
+    resultd = atomicExchange(buf.datad, resultd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.datad += resultd;
+    resultd = atomicExchange(atomd, resultd);
+    buf.datad += resultd;
+    resultd = atomicExchange(atomd, resultd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.datad += resultd;
+
+    //atomic load/store
+    resultf = atomicLoad(buf.dataf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    atomicStore(buf.dataf, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.dataf += resultf;
+
+    resultf = atomicLoad(atomf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    atomicStore(atomf, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.dataf += resultf;
+
+    resultd = atomicLoad(buf.datad, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    atomicStore(buf.datad, resultd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.datad += resultd;
+
+    resultd = atomicLoad(atomd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    atomicStore(atomd, resultd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.datad += resultd;
+
+    // image atomics on 1D:
+    atomf = imageAtomicAdd(fimage1D, int(0), 2.0);
+    buf.dataf += atomf;
+    atomf = imageAtomicAdd(fimage1D, int(1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicExchange(fimage1D, int(1), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicLoad(fimage1D, int(1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    imageAtomicStore(fimage1D, int(2), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    // image atomics on 1D Array:
+    atomf = imageAtomicAdd(fimage1DArray, ivec2(0,0), 2.0);
+    buf.dataf += atomf;
+    atomf = imageAtomicAdd(fimage1DArray, ivec2(1,1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicExchange(fimage1DArray, ivec2(1,0), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicLoad(fimage1DArray, ivec2(1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    imageAtomicStore(fimage1DArray, ivec2(2,2), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    // image atomics on 2D:
+    atomf = imageAtomicAdd(fimage2D, ivec2(0,0), 2.0);
+    buf.dataf += atomf;
+    atomf = imageAtomicAdd(fimage2D, ivec2(1,1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicExchange(fimage2D, ivec2(1,0), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicLoad(fimage2D, ivec2(1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    imageAtomicStore(fimage2D, ivec2(2,2), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    // image atomics on 2D Rect:
+    atomf = imageAtomicAdd(fimage2DRect, ivec2(0,0), 2.0);
+    buf.dataf += atomf;
+    atomf = imageAtomicAdd(fimage2DRect, ivec2(1,1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicExchange(fimage2DRect, ivec2(1,0), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicLoad(fimage2DRect, ivec2(1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    imageAtomicStore(fimage2DRect, ivec2(2,2), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    // image atomics on 2D Array:
+    atomf = imageAtomicAdd(fimage2DArray, ivec3(0,0,0), 2.0);
+    buf.dataf += atomf;
+    atomf = imageAtomicAdd(fimage2DArray, ivec3(1,1,0), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicExchange(fimage2DArray, ivec3(1,0,1), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicLoad(fimage2DArray, ivec3(1,1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    imageAtomicStore(fimage2DArray, ivec3(2,2,0), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    // image atomics on Cube:
+    atomf = imageAtomicAdd(fimageCube, ivec3(0,0,0), 2.0);
+    buf.dataf += atomf;
+    atomf = imageAtomicAdd(fimageCube, ivec3(1,1,0), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicExchange(fimageCube, ivec3(1,0,0), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicLoad(fimageCube, ivec3(1,1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    imageAtomicStore(fimageCube, ivec3(2,2,1), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    // image atomics on Cube Array:
+    atomf = imageAtomicAdd(fimageCubeArray, ivec3(0,0,0), 2.0);
+    buf.dataf += atomf;
+    atomf = imageAtomicAdd(fimageCubeArray, ivec3(1,1,0), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicExchange(fimageCubeArray, ivec3(1,0,1), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicLoad(fimageCubeArray, ivec3(1,1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    imageAtomicStore(fimageCubeArray, ivec3(2,2,0), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    // image atomics on 3D:
+    atomf = imageAtomicAdd(fimage3D, ivec3(0,0,0), 2.0);
+    buf.dataf += atomf;
+    atomf = imageAtomicAdd(fimage3D, ivec3(1,1,0), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicExchange(fimage3D, ivec3(1,0,1), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    atomf = imageAtomicLoad(fimage3D, ivec3(1,1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+
+    imageAtomicStore(fimage3D, ivec3(2,2,0), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+}
\ No newline at end of file
diff --git a/Test/spv.atomicFloat_Error.comp b/Test/spv.atomicFloat_Error.comp
new file mode 100755
index 0000000..b90b97f
--- /dev/null
+++ b/Test/spv.atomicFloat_Error.comp
@@ -0,0 +1,112 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable
+#pragma use_vulkan_memory_model
+
+layout(local_size_x = 16, local_size_y = 16) in;
+
+layout(binding = 0) buffer Buffer
+{
+    int    datai;
+    float  dataf;
+    double datad;
+} buf;
+
+shared int    atomi;
+shared float  atomf;
+shared double atomd;
+
+layout(binding = 0, r32f) volatile coherent uniform image1D fimage1D;
+layout(binding = 1, r32f) volatile coherent uniform image2D fimage2D;
+
+void undeclared_errors()
+{
+    //atomicAdd
+    float resultf = 0;
+    resultf = atomicAdd(atomf, 3.0);
+    resultf = atomicAdd(atomf, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed);
+    resultf = atomicAdd(buf.dataf, 3.0);
+    resultf = atomicAdd(buf.dataf, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed);
+
+    double resultd = 0;
+    resultd = atomicAdd(atomd, 3.0);
+    resultd = atomicAdd(atomd, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed);
+    resultd = atomicAdd(buf.datad, 3.0);
+    resultd = atomicAdd(buf.datad, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed);
+
+    //atomicExchange
+    resultf = atomicExchange(buf.dataf, resultf);
+    resultf = atomicExchange(buf.dataf, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    resultf = atomicExchange(atomf, resultf);
+    resultf = atomicExchange(atomf, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.dataf += resultf;
+
+    resultd = atomicExchange(buf.datad, resultd);
+    resultd = atomicExchange(buf.datad, resultd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    resultd = atomicExchange(atomd, resultd);
+    resultd = atomicExchange(atomd, resultd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.datad += resultd;
+
+    //atomic load/store
+    resultf = atomicLoad(buf.dataf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    atomicStore(buf.dataf, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    resultf = atomicLoad(atomf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    atomicStore(atomf, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.dataf += resultf;
+
+    resultd = atomicLoad(buf.datad, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    atomicStore(buf.datad, resultd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    resultd = atomicLoad(atomd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    atomicStore(atomd, resultd, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.datad += resultd;
+
+    // image atomics:
+    atomf = imageAtomicAdd(fimage2D, ivec2(0,0), 2.0);
+    atomf = imageAtomicAdd(fimage2D, ivec2(1,1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed);
+    atomf = imageAtomicExchange(fimage2D, ivec2(1,0), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    atomf = imageAtomicLoad(fimage2D, ivec2(1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    imageAtomicStore(fimage2D, ivec2(2,2), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+}
+
+#extension GL_EXT_shader_atomic_float: enable
+
+void main()
+{
+    float resultf = 0;
+    double resultd = 0;
+    int resulti = 0;
+
+    //atomicAdd
+    resultf = atomicAdd(atomi);
+    resultf = atomicAdd(atomi, 3.0);
+    resultf = atomicAdd(atomi, resultf, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed);
+    resultf = atomicAdd(atomi, resultf, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed);
+
+    //atomicExchange
+    resultf = atomicExchange(buf.datai);
+    resultf = atomicExchange(buf.datai, resultf);
+    resultf = atomicExchange(buf.datai, resultf, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    resultf = atomicExchange(buf.datai, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    resultf = atomicExchange(atomi, resultf);
+    resultf = atomicExchange(atomi, resultf, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    buf.dataf += resultf;
+
+    //atomic load/store
+    resultf = atomicLoad(buf.datai, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+    atomicStore(buf.datai, resulti, gl_StorageSemanticsShared, gl_SemanticsRelaxed);
+
+    // image atomics:
+    atomf = imageAtomicAdd(fimage1D, ivec2(0,0), 2.0);
+    atomf = imageAtomicAdd(fimage2D, ivec3(0,0,0), 2.0);
+    atomf = imageAtomicAdd(fimage2D, 2.0);
+    atomf = imageAtomicExchange(fimage1D, ivec2(1,0), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    atomf = imageAtomicExchange(fimage2D, 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    atomf = imageAtomicExchange(fimage2D, ivec3(1,0,1), 4.0, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    atomf = imageAtomicLoad(fimage1D, ivec2(1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    atomf = imageAtomicLoad(fimage2D, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    atomf = imageAtomicLoad(fimage2D, ivec3(1,1,1), gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    imageAtomicStore(fimage1D, ivec2(2,2), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    imageAtomicStore(fimage2D, atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    imageAtomicStore(fimage2D, ivec3(2,2,1), atomf, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed);
+    buf.dataf += atomf;
+}
\ No newline at end of file
diff --git a/Test/spv.ext.RayGenShader.rgen b/Test/spv.ext.RayGenShader.rgen
index 27d450f..9fedf3a 100644
--- a/Test/spv.ext.RayGenShader.rgen
+++ b/Test/spv.ext.RayGenShader.rgen
@@ -1,7 +1,7 @@
 #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 = 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;
diff --git a/Test/spv.ext.World3x4.rahit b/Test/spv.ext.World3x4.rahit
new file mode 100644
index 0000000..4f541f8
--- /dev/null
+++ b/Test/spv.ext.World3x4.rahit
@@ -0,0 +1,21 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+
+hitAttributeEXT vec3 attribs;
+layout(location = 0) rayPayloadInEXT vec3 hitValue;
+layout(set = 0, binding = 0, r32i) uniform iimage3D result;
+
+void main()
+{
+  float k = 1048576.0f;
+  int ndx = -1;
+  for (int col = 0; col < 3; col++)
+  for (int row = 0; row < 4; row++)
+  {
+    ndx++;
+    ivec3 p = ivec3(gl_LaunchIDEXT.xy, ndx);
+    float r = k * gl_WorldToObject3x4EXT[col][row];
+    ivec4 c = ivec4(int(r),0,0,1);
+    imageStore(result, p, c);
+  }
+}
diff --git a/Test/spv.precision.frag b/Test/spv.precision.frag
index 090c1a6..463afdf 100644
--- a/Test/spv.precision.frag
+++ b/Test/spv.precision.frag
@@ -57,4 +57,6 @@
     

     mediumfout *= s.a;

     mediumfout *= s.b;

+

+    mediumfout = ((mediumfin * mediumfin > 4.2) ? 2.0 * mediumfout : 3.0 * mediumfout);

 }

diff --git a/Test/spv.precisionArgs.frag b/Test/spv.precisionArgs.frag
new file mode 100644
index 0000000..4a968cb
--- /dev/null
+++ b/Test/spv.precisionArgs.frag
@@ -0,0 +1,27 @@
+#version 310 es
+
+precision mediump float;
+
+void fooConst(const in float f, const in highp float g) { }
+
+void foo(in float f, in highp float g) { }
+
+      float retM (      float x) { return x; }
+highp float retH (highp float x) { return x; }
+      float retHM(highp float x) { return x; }
+highp float retMH(      float x) { return x; }
+
+void main()
+{
+    float aM, bM;
+    highp float aH, bH;
+    fooConst(aM, bM);   // must copy bM
+    fooConst(aH, bH);   // must copy aH
+    foo(aM, bM);
+    foo(aH, bH);
+
+    retM(aM);
+    retH(aH);
+    retHM(aH);
+    retMH(aM);
+}
diff --git a/Test/spv.precisionTexture.frag b/Test/spv.precisionTexture.frag
new file mode 100644
index 0000000..7868889
--- /dev/null
+++ b/Test/spv.precisionTexture.frag
@@ -0,0 +1,24 @@
+#version 310 es

+precision mediump float;

+precision mediump int;

+layout(binding = 0) uniform mediump sampler2D texM;

+layout(binding = 1) uniform highp sampler2D texH;

+layout(binding = 0, rgba32f) uniform readonly mediump image2D imageM;

+layout(binding = 1, rgba32f) uniform readonly highp image2D imageH;

+

+layout(location = 0) in highp vec4 vertex;

+layout(location = 1) flat in highp ivec2 coord;

+layout(location = 0) out vec4 fragColor;

+

+void main()

+{

+    vec4 v;

+    v = texture(texM, vertex.xy);

+    v = texture(texH, vertex.xy);

+    v = textureLod(texM, vertex.xy, vertex.z);

+    v = textureLod(texH, vertex.xy, vertex.z);

+    v = textureProj(texM, vertex.xyz);

+    v = textureProj(texH, vertex.xyz);

+    v = imageLoad(imageM, coord);

+    v = imageLoad(imageH, coord);

+}
\ No newline at end of file
diff --git a/Test/spv.specConstant.float16.comp b/Test/spv.specConstant.float16.comp
new file mode 100644
index 0000000..d729cb9
--- /dev/null
+++ b/Test/spv.specConstant.float16.comp
@@ -0,0 +1,18 @@
+#version 450
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require
+
+layout(constant_id = 1) const float16_t sc0 = 9.5hf;
+layout(constant_id = 2) const float16_t sc1 = -14.25hf;
+
+layout (set = 0, binding = 0, std430) writeonly buffer Output {
+    float16_t r0;
+    float16_t r1;
+} sb_out;
+
+
+void main (void)
+{
+    sb_out.r0 = sc0;
+    sb_out.r1 = sc1;
+}
+
diff --git a/Test/spv.specConstant.int16.comp b/Test/spv.specConstant.int16.comp
new file mode 100644
index 0000000..80f6300
--- /dev/null
+++ b/Test/spv.specConstant.int16.comp
@@ -0,0 +1,18 @@
+#version 450
+#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
+
+layout(constant_id = 1) const int16_t sc0 = 20000s;
+layout(constant_id = 2) const int16_t sc1 = -20000s;
+
+layout (set = 0, binding = 0, std430) writeonly buffer Output {
+    int16_t r0;
+    int16_t r1;
+} sb_out;
+
+
+void main (void)
+{
+    sb_out.r0 = sc0;
+    sb_out.r1 = sc1;
+}
+
diff --git a/Test/spv.specConstant.int8.comp b/Test/spv.specConstant.int8.comp
new file mode 100644
index 0000000..e2b6318
--- /dev/null
+++ b/Test/spv.specConstant.int8.comp
@@ -0,0 +1,18 @@
+#version 450
+#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require
+
+layout(constant_id = 1) const int8_t sc0 = int8_t(127);
+layout(constant_id = 2) const int8_t sc1 = int8_t(-127);
+
+layout (set = 0, binding = 0, std430) writeonly buffer Output {
+    int8_t r0;
+    int8_t r1;
+} sb_out;
+
+
+void main (void)
+{
+    sb_out.r0 = sc0;
+    sb_out.r1 = sc1;
+}
+
diff --git a/Test/spv.uniformInitializer.frag b/Test/spv.uniformInitializer.frag
new file mode 100644
index 0000000..cdae1c1
--- /dev/null
+++ b/Test/spv.uniformInitializer.frag
@@ -0,0 +1,10 @@
+#version 450
+
+layout (location = 0) out vec4 color;
+
+layout (location = 0) uniform vec4 in_color = vec4(0.0, 1.0, 0.0, 1.0);
+
+void main()
+{
+	color = in_color;
+}
diff --git a/Test/spv.uniformInitializerSpecConstant.frag b/Test/spv.uniformInitializerSpecConstant.frag
new file mode 100644
index 0000000..289d61a
--- /dev/null
+++ b/Test/spv.uniformInitializerSpecConstant.frag
@@ -0,0 +1,14 @@
+#version 450
+
+layout (location = 0) out vec4 color;
+
+layout (constant_id = 1) const float opacity = 0.5;
+
+layout (location = 0) uniform vec3 in_color = vec3(1.0, 0.5, 0);
+
+layout (location = 4) uniform float foo = opacity;
+
+void main()
+{
+	color = vec4(in_color, foo);
+}
diff --git a/Test/spv.uniformInitializerStruct.frag b/Test/spv.uniformInitializerStruct.frag
new file mode 100644
index 0000000..b614806
--- /dev/null
+++ b/Test/spv.uniformInitializerStruct.frag
@@ -0,0 +1,19 @@
+#version 450
+
+layout (location = 0) out vec4 color;
+
+layout (location = 0) uniform struct {
+        float r;
+        float g;
+        float b;
+} parts[2] = { { 1.0, 1.0, 1.0}, { 0.0, 1.0, 0.0 } };
+
+void main() {
+  color = vec4(0.0, 0.0, 0.0, 1.0);
+
+  for (int i = 0; i < 2; i++) {
+    color.r += parts[i].r;
+    color.g += parts[i].g;
+    color.b += parts[i].b;
+  }
+}
diff --git a/Test/xfbUnsizedArray.error.vert b/Test/xfbUnsizedArray.error.vert
new file mode 100644
index 0000000..5beb9f8
--- /dev/null
+++ b/Test/xfbUnsizedArray.error.vert
@@ -0,0 +1,16 @@
+#version 430 core

+#extension GL_ARB_enhanced_layouts : require

+

+layout (xfb_offset = 0) out vec4 xfb_buffer[]; // ERROR: unsized array cannot be used for an xfb buffer?

+

+in  vec4 in_vs;

+out vec4 out_vs;

+

+void main()

+{

+    vec4 result = in_vs;

+

+    xfb_buffer[0] = result / 2;

+

+    out_vs = result;

+}

diff --git a/build_info.h.tmpl b/build_info.h.tmpl
new file mode 100644
index 0000000..eacecb0
--- /dev/null
+++ b/build_info.h.tmpl
@@ -0,0 +1,62 @@
+// Copyright (C) 2020 The Khronos Group Inc.
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of The Khronos Group Inc. nor the names of its
+//    contributors may be used to endorse or promote products derived
+//    from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef GLSLANG_BUILD_INFO
+#define GLSLANG_BUILD_INFO
+
+#define GLSLANG_VERSION_MAJOR <major>
+#define GLSLANG_VERSION_MINOR <minor>
+#define GLSLANG_VERSION_PATCH <patch>
+#define GLSLANG_VERSION_FLAVOR "<flavor>"
+
+#define GLSLANG_VERSION_GREATER_THAN(major, minor, patch) \
+    (((major) > GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \
+    (((minor) > GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \
+     ((patch) > GLSLANG_VERSION_PATCH)))))
+
+#define GLSLANG_VERSION_GREATER_OR_EQUAL_TO(major, minor, patch) \
+    (((major) > GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \
+    (((minor) > GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \
+     ((patch) >= GLSLANG_VERSION_PATCH)))))
+
+#define GLSLANG_VERSION_LESS_THAN(major, minor, patch) \
+    (((major) < GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \
+    (((minor) < GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \
+     ((patch) < GLSLANG_VERSION_PATCH)))))
+
+#define GLSLANG_VERSION_LESS_OR_EQUAL_TO(major, minor, patch) \
+    (((major) < GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \
+    (((minor) < GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \
+     ((patch) <= GLSLANG_VERSION_PATCH)))))
+
+#endif // GLSLANG_BUILD_INFO
diff --git a/build_info.py b/build_info.py
new file mode 100755
index 0000000..2ac864b
--- /dev/null
+++ b/build_info.py
@@ -0,0 +1,226 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2020 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import datetime
+import errno
+import os
+import os.path
+import re
+import subprocess
+import sys
+import time
+
+usage = """{} emits a string to stdout or file with project version information.
+
+args: <project-dir> [<input-string>] [-i <input-file>] [-o <output-file>]
+
+Either <input-string> or -i <input-file> needs to be provided.
+
+The tool will output the provided string or file content with the following
+tokens substituted:
+
+ <major>   - The major version point parsed from the CHANGES.md file.
+ <minor>   - The minor version point parsed from the CHANGES.md file.
+ <patch>   - The point version point parsed from the CHANGES.md file.
+ <flavor>  - The optional dash suffix parsed from the CHANGES.md file (excluding
+             dash prefix).
+ <-flavor> - The optional dash suffix parsed from the CHANGES.md file (including
+             dash prefix).
+ <date>    - The optional date of the release in the form YYYY-MM-DD
+ <commit>  - The git commit information for the directory taken from
+             "git describe" if that succeeds, or "git rev-parse HEAD"
+             if that succeeds, or otherwise a message containing the phrase
+             "unknown hash".
+
+-o is an optional flag for writing the output string to the given file. If
+   ommitted then the string is printed to stdout.
+"""
+
+def mkdir_p(directory):
+    """Make the directory, and all its ancestors as required.  Any of the
+    directories are allowed to already exist."""
+
+    if directory == "":
+        # We're being asked to make the current directory.
+        return
+
+    try:
+        os.makedirs(directory)
+    except OSError as e:
+        if e.errno == errno.EEXIST and os.path.isdir(directory):
+            pass
+        else:
+            raise
+
+
+def command_output(cmd, directory):
+    """Runs a command in a directory and returns its standard output stream.
+
+    Captures the standard error stream.
+
+    Raises a RuntimeError if the command fails to launch or otherwise fails.
+    """
+    p = subprocess.Popen(cmd,
+                         cwd=directory,
+                         stdout=subprocess.PIPE,
+                         stderr=subprocess.PIPE)
+    (stdout, _) = p.communicate()
+    if p.returncode != 0:
+        raise RuntimeError('Failed to run %s in %s' % (cmd, directory))
+    return stdout
+
+
+def deduce_software_version(directory):
+    """Returns a software version number parsed from the CHANGES.md file
+    in the given directory.
+
+    The CHANGES.md file describes most recent versions first.
+    """
+
+    # Match the first well-formed version-and-date line.
+    # Allow trailing whitespace in the checked-out source code has
+    # unexpected carriage returns on a linefeed-only system such as
+    # Linux.
+    pattern = re.compile(r'^#* +(\d+)\.(\d+)\.(\d+)(-\w+)? (\d\d\d\d-\d\d-\d\d)? *$')
+    changes_file = os.path.join(directory, 'CHANGES.md')
+    with open(changes_file, mode='r') as f:
+        for line in f.readlines():
+            match = pattern.match(line)
+            if match:
+                flavor = match.group(4)
+                if flavor == None:
+                    flavor = ""
+                return {
+                    "major": match.group(1),
+                    "minor": match.group(2),
+                    "patch": match.group(3),
+                    "flavor": flavor.lstrip("-"),
+                    "-flavor": flavor,
+                    "date": match.group(5),
+                }
+    raise Exception('No version number found in {}'.format(changes_file))
+
+
+def describe(directory):
+    """Returns a string describing the current Git HEAD version as descriptively
+    as possible.
+
+    Runs 'git describe', or alternately 'git rev-parse HEAD', in directory.  If
+    successful, returns the output; otherwise returns 'unknown hash, <date>'."""
+    try:
+        # decode() is needed here for Python3 compatibility. In Python2,
+        # str and bytes are the same type, but not in Python3.
+        # Popen.communicate() returns a bytes instance, which needs to be
+        # decoded into text data first in Python3. And this decode() won't
+        # hurt Python2.
+        return command_output(['git', 'describe'], directory).rstrip().decode()
+    except:
+        try:
+            return command_output(
+                ['git', 'rev-parse', 'HEAD'], directory).rstrip().decode()
+        except:
+            # This is the fallback case where git gives us no information,
+            # e.g. because the source tree might not be in a git tree.
+            # In this case, usually use a timestamp.  However, to ensure
+            # reproducible builds, allow the builder to override the wall
+            # clock time with environment variable SOURCE_DATE_EPOCH
+            # containing a (presumably) fixed timestamp.
+            timestamp = int(os.environ.get('SOURCE_DATE_EPOCH', time.time()))
+            formatted = datetime.datetime.utcfromtimestamp(timestamp).isoformat()
+            return 'unknown hash, {}'.format(formatted)
+
+def parse_args():
+    directory = None
+    input_string = None
+    input_file = None
+    output_file = None
+
+    if len(sys.argv) < 2:
+        raise Exception("Invalid number of arguments")
+
+    directory = sys.argv[1]
+    i = 2
+
+    if not sys.argv[i].startswith("-"):
+        input_string = sys.argv[i]
+        i = i + 1
+
+    while i < len(sys.argv):
+        opt = sys.argv[i]
+        i = i + 1
+
+        if opt == "-i" or opt == "-o":
+            if i == len(sys.argv):
+                raise Exception("Expected path after {}".format(opt))
+            val = sys.argv[i]
+            i = i + 1
+            if (opt == "-i"):
+                input_file = val
+            elif (opt == "-o"):
+                output_file = val
+            else:
+                raise Exception("Unknown flag {}".format(opt))
+
+    return {
+        "directory": directory,
+        "input_string": input_string,
+        "input_file": input_file,
+        "output_file": output_file,
+    }
+
+def main():
+    args = None
+    try:
+        args = parse_args()
+    except Exception as e:
+        print(e)
+        print("\nUsage:\n")
+        print(usage.format(sys.argv[0]))
+        sys.exit(1)
+
+    directory = args["directory"]
+    template = args["input_string"]
+    if template == None:
+        with open(args["input_file"], 'r') as f:
+            template = f.read()
+    output_file = args["output_file"]
+
+    software_version = deduce_software_version(directory)
+    commit = describe(directory)
+    output = template \
+        .replace("<major>", software_version["major"]) \
+        .replace("<minor>", software_version["minor"]) \
+        .replace("<patch>", software_version["patch"]) \
+        .replace("<flavor>", software_version["flavor"]) \
+        .replace("<-flavor>", software_version["-flavor"]) \
+        .replace("<date>", software_version["date"]) \
+        .replace("<commit>", commit)
+
+    if output_file is None:
+        print(output)
+    else:
+        mkdir_p(os.path.dirname(output_file))
+
+        if os.path.isfile(output_file):
+            with open(output_file, 'r') as f:
+                if output == f.read():
+                    return
+
+        with open(output_file, 'w') as f:
+            f.write(output)
+
+if __name__ == '__main__':
+    main()
diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp
index c4c24a9..54283e6 100644
--- a/glslang/CInterface/glslang_c_interface.cpp
+++ b/glslang/CInterface/glslang_c_interface.cpp
@@ -32,9 +32,6 @@
 
 #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"
@@ -401,36 +398,6 @@
     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)
diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
index a0259a3..14249bf 100644
--- a/glslang/CMakeLists.txt
+++ b/glslang/CMakeLists.txt
@@ -1,3 +1,36 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 if(WIN32)
     add_subdirectory(OSDependent/Windows)
 elseif(UNIX)
@@ -11,7 +44,20 @@
     add_subdirectory(OSDependent/Web)
 endif(EMSCRIPTEN OR ENABLE_GLSLANG_JS)
 
-set(SOURCES
+################################################################################
+# GenericCodeGen
+################################################################################
+add_library(GenericCodeGen STATIC
+    GenericCodeGen/CodeGen.cpp
+    GenericCodeGen/Link.cpp)
+set_property(TARGET GenericCodeGen PROPERTY POSITION_INDEPENDENT_CODE ON)
+set_property(TARGET GenericCodeGen PROPERTY FOLDER glslang)
+glslang_default_to_hidden_visibility(GenericCodeGen)
+
+################################################################################
+# MachineIndependent
+################################################################################
+set(MACHINEINDEPENDENT_SOURCES
     MachineIndependent/glslang.m4
     MachineIndependent/glslang.y
     MachineIndependent/glslang_tab.cpp
@@ -41,26 +87,9 @@
     MachineIndependent/preprocessor/PpScanner.cpp
     MachineIndependent/preprocessor/PpTokens.cpp
     MachineIndependent/propagateNoContraction.cpp
-    GenericCodeGen/CodeGen.cpp
-    GenericCodeGen/Link.cpp
-    CInterface/glslang_c_interface.cpp)
+)
 
-set(HEADERS
-    Public/ShaderLang.h
-    Include/arrays.h
-    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
-    Include/PoolAlloc.h
-    Include/ResourceLimits.h
-    Include/revision.h
-    Include/ShHandle.h
-    Include/Types.h
+set(MACHINEINDEPENDENT_HEADERS
     MachineIndependent/attribute.h
     MachineIndependent/glslang_tab.cpp.h
     MachineIndependent/gl_types.h
@@ -78,50 +107,122 @@
     MachineIndependent/parseVersions.h
     MachineIndependent/propagateNoContraction.h
     MachineIndependent/preprocessor/PpContext.h
-    MachineIndependent/preprocessor/PpTokens.h)
+    MachineIndependent/preprocessor/PpTokens.h
+)
 
-glslang_pch(SOURCES MachineIndependent/pch.cpp)
+if(ENABLE_HLSL)
+    list(APPEND MACHINEINDEPENDENT_SOURCES
+        HLSL/hlslAttributes.cpp
+        HLSL/hlslParseHelper.cpp
+        HLSL/hlslScanContext.cpp
+        HLSL/hlslOpMap.cpp
+        HLSL/hlslTokenStream.cpp
+        HLSL/hlslGrammar.cpp
+        HLSL/hlslParseables.cpp)
 
-add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS})
-set_property(TARGET glslang PROPERTY FOLDER glslang)
-set_property(TARGET glslang PROPERTY POSITION_INDEPENDENT_CODE ON)
-target_link_libraries(glslang OGLCompiler OSDependent)
-target_include_directories(glslang PUBLIC 
+    list(APPEND MACHINEINDEPENDENT_HEADERS
+        HLSL/hlslAttributes.h
+        HLSL/hlslParseHelper.h
+        HLSL/hlslTokens.h
+        HLSL/hlslScanContext.h
+        HLSL/hlslOpMap.h
+        HLSL/hlslTokenStream.h
+        HLSL/hlslGrammar.h
+        HLSL/hlslParseables.h)
+endif(ENABLE_HLSL)
+
+add_library(MachineIndependent STATIC ${MACHINEINDEPENDENT_SOURCES} ${MACHINEINDEPENDENT_HEADERS})
+set_property(TARGET MachineIndependent PROPERTY POSITION_INDEPENDENT_CODE ON)
+set_property(TARGET MachineIndependent PROPERTY FOLDER glslang)
+glslang_only_export_explicit_symbols(MachineIndependent)
+
+glslang_add_build_info_dependency(MachineIndependent)
+
+glslang_pch(MachineIndependent MachineIndependent/pch.h)
+
+target_link_libraries(MachineIndependent PRIVATE OGLCompiler OSDependent GenericCodeGen)
+
+################################################################################
+# glslang
+################################################################################
+set(GLSLANG_SOURCES
+    CInterface/glslang_c_interface.cpp)
+
+set(GLSLANG_HEADERS
+    Public/ShaderLang.h
+    Include/arrays.h
+    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
+    Include/PoolAlloc.h
+    Include/ResourceLimits.h
+    Include/ShHandle.h
+    Include/Types.h)
+
+add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${GLSLANG_SOURCES} ${GLSLANG_HEADERS})
+set_target_properties(glslang PROPERTIES
+    FOLDER glslang
+    POSITION_INDEPENDENT_CODE ON
+    VERSION   "${GLSLANG_VERSION}"
+    SOVERSION "${GLSLANG_VERSION_MAJOR}")
+target_link_libraries(glslang PRIVATE OGLCompiler MachineIndependent)
+target_include_directories(glslang PUBLIC
     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
     $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 
+glslang_add_build_info_dependency(glslang)
+
+glslang_only_export_explicit_symbols(glslang)
+
 if(WIN32 AND BUILD_SHARED_LIBS)
     set_target_properties(glslang PROPERTIES PREFIX "")
 endif()
 
-if(ENABLE_HLSL)
-    target_link_libraries(glslang HLSL)
-endif()
-
+################################################################################
+# source_groups
+################################################################################
 if(WIN32)
     source_group("Public" REGULAR_EXPRESSION "Public/*")
     source_group("MachineIndependent" REGULAR_EXPRESSION "MachineIndependent/[^/]*")
     source_group("Include" REGULAR_EXPRESSION "Include/[^/]*")
     source_group("GenericCodeGen" REGULAR_EXPRESSION "GenericCodeGen/*")
     source_group("MachineIndependent\\Preprocessor" REGULAR_EXPRESSION "MachineIndependent/preprocessor/*")
+    source_group("HLSL" REGULAR_EXPRESSION "HLSL/*")
+    source_group("CInterface" REGULAR_EXPRESSION "CInterface/*")
 endif(WIN32)
 
+################################################################################
+# install
+################################################################################
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
-        install(TARGETS glslang EXPORT glslangTargets
+        install(TARGETS glslang
+                EXPORT  glslangTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     else()
-        install(TARGETS glslang EXPORT glslangTargets
+        install(TARGETS glslang MachineIndependent GenericCodeGen
+                EXPORT  glslangTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
-    install(EXPORT glslangTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
-endif(ENABLE_GLSLANG_INSTALL)
 
-if(ENABLE_GLSLANG_INSTALL)
-    foreach(file ${HEADERS})
+    install(EXPORT glslangTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+
+    set(ALL_HEADERS
+        ${GLSLANG_HEADERS}
+        ${MACHINEINDEPENDENT_HEADERS})
+
+    foreach(file ${ALL_HEADERS})
         get_filename_component(dir ${file} DIRECTORY)
         install(FILES ${file} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/${dir})
     endforeach()
+
+    install(FILES ${GLSLANG_BUILD_INFO_H} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang)
+
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/hlsl/hlslAttributes.cpp b/glslang/HLSL/hlslAttributes.cpp
similarity index 100%
rename from hlsl/hlslAttributes.cpp
rename to glslang/HLSL/hlslAttributes.cpp
diff --git a/hlsl/hlslAttributes.h b/glslang/HLSL/hlslAttributes.h
similarity index 94%
rename from hlsl/hlslAttributes.h
rename to glslang/HLSL/hlslAttributes.h
index b1cc037..62faa5b 100644
--- a/hlsl/hlslAttributes.h
+++ b/glslang/HLSL/hlslAttributes.h
@@ -39,8 +39,8 @@
 #include <unordered_map>
 #include <functional>
 
-#include "../glslang/MachineIndependent/attribute.h"
-#include "../glslang/MachineIndependent/SymbolTable.h"
+#include "../MachineIndependent/attribute.h"
+#include "../MachineIndependent/SymbolTable.h"
 #include "hlslScanContext.h"
 
 namespace glslang {
diff --git a/hlsl/hlslGrammar.cpp b/glslang/HLSL/hlslGrammar.cpp
similarity index 99%
rename from hlsl/hlslGrammar.cpp
rename to glslang/HLSL/hlslGrammar.cpp
index 47ced29..5bfc53f 100644
--- a/hlsl/hlslGrammar.cpp
+++ b/glslang/HLSL/hlslGrammar.cpp
@@ -382,6 +382,16 @@
     if (forbidDeclarators)
         return true;
 
+    // Check if there are invalid in/out qualifiers
+    switch (declaredType.getQualifier().storage) {
+    case EvqIn:
+    case EvqOut:
+    case EvqInOut:
+        parseContext.error(token.loc, "in/out qualifiers are only valid on parameters", token.string->c_str(), "");
+    default:
+        break;
+    }
+
     // declarator_list
     //    : declarator
     //         : identifier
@@ -697,7 +707,9 @@
             qualifier.noContraction = true;
             break;
         case EHTokIn:
-            qualifier.storage = (qualifier.storage == EvqOut) ? EvqInOut : EvqIn;
+            if (qualifier.storage != EvqUniform) {
+                qualifier.storage = (qualifier.storage == EvqOut) ? EvqInOut : EvqIn;
+            }
             break;
         case EHTokOut:
             qualifier.storage = (qualifier.storage == EvqIn) ? EvqInOut : EvqOut;
diff --git a/hlsl/hlslGrammar.h b/glslang/HLSL/hlslGrammar.h
similarity index 100%
rename from hlsl/hlslGrammar.h
rename to glslang/HLSL/hlslGrammar.h
diff --git a/hlsl/hlslOpMap.cpp b/glslang/HLSL/hlslOpMap.cpp
similarity index 100%
rename from hlsl/hlslOpMap.cpp
rename to glslang/HLSL/hlslOpMap.cpp
diff --git a/hlsl/hlslOpMap.h b/glslang/HLSL/hlslOpMap.h
similarity index 100%
rename from hlsl/hlslOpMap.h
rename to glslang/HLSL/hlslOpMap.h
diff --git a/hlsl/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp
similarity index 98%
rename from hlsl/hlslParseHelper.cpp
rename to glslang/HLSL/hlslParseHelper.cpp
index 87ca4c8..ca0d207 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/glslang/HLSL/hlslParseHelper.cpp
@@ -39,11 +39,11 @@
 #include "hlslGrammar.h"
 #include "hlslAttributes.h"
 
-#include "../glslang/Include/Common.h"
-#include "../glslang/MachineIndependent/Scan.h"
-#include "../glslang/MachineIndependent/preprocessor/PpContext.h"
+#include "../Include/Common.h"
+#include "../MachineIndependent/Scan.h"
+#include "../MachineIndependent/preprocessor/PpContext.h"
 
-#include "../glslang/OSDependent/osinclude.h"
+#include "../OSDependent/osinclude.h"
 
 #include <algorithm>
 #include <functional>
@@ -814,7 +814,7 @@
                   base->getAsSymbolNode()->getName().c_str(), "");
         else
             error(loc, " left of '[' is not of type array, matrix, or vector ", "expression", "");
-    } else if (base->getType().getQualifier().isFrontEndConstant() && 
+    } else if (base->getType().getQualifier().isFrontEndConstant() &&
                index->getQualifier().isFrontEndConstant()) {
         // both base and index are front-end constants
         checkIndex(loc, base->getType(), indexValue);
@@ -1848,7 +1848,7 @@
                 error(loc, "invalid partitioning", "", "");
             } else {
                 TVertexSpacing partitioning = EvsNone;
-                
+
                 if (partitionStr == "integer") {
                     partitioning = EvsEqual;
                 } else if (partitionStr == "fractional_even") {
@@ -2111,6 +2111,23 @@
                 makeVariableInOut(*(*it));
     }
 
+    // Add uniform parameters to the $Global uniform block.
+    TVector<TVariable*> opaque_uniforms;
+    for (int i = 0; i < userFunction.getParamCount(); i++) {
+        TType& paramType = *userFunction[i].type;
+        TString& paramName = *userFunction[i].name;
+        if (paramType.getQualifier().storage == EvqUniform) {
+            if (!paramType.containsOpaque()) {
+                // Add it to the global uniform block.
+                growGlobalUniformBlock(loc, paramType, paramName);
+            } else {
+                // Declare it as a separate variable.
+                TVariable *var = makeInternalVariable(paramName.c_str(), paramType);
+                opaque_uniforms.push_back(var);
+            }
+        }
+    }
+
     // Synthesize the call
 
     pushScope(); // matches the one in handleFunctionBody()
@@ -2131,6 +2148,7 @@
     TVector<TVariable*> argVars;
     TIntermAggregate* synthBody = new TIntermAggregate();
     auto inputIt = inputs.begin();
+    auto opaqueUniformIt = opaque_uniforms.begin();
     TIntermTyped* callingArgs = nullptr;
 
     for (int i = 0; i < userFunction.getParamCount(); i++) {
@@ -2149,6 +2167,17 @@
                                                                intermediate.addSymbol(**inputIt)));
             inputIt++;
         }
+        if (param.type->getQualifier().storage == EvqUniform) {
+            if (!param.type->containsOpaque()) {
+                // Look it up in the $Global uniform block.
+                intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign, arg,
+                                                                   handleVariable(loc, param.name)));
+            } else {
+                intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign, arg,
+                                                                   intermediate.addSymbol(**opaqueUniformIt)));
+                ++opaqueUniformIt;
+            }
+        }
     }
 
     // Call
@@ -2455,7 +2484,7 @@
         TIntermTyped* rhsElement = intermediate.addIndex(EOpIndexDirect, tempSymR, index, loc);
 
         const TType derefType(right->getType(), 0);
-    
+
         lhsElement->setType(derefType);
         rhsElement->setType(derefType);
 
@@ -2475,7 +2504,7 @@
 
     return assignList;
 }
-    
+
 // Clip and cull distance require special handling due to a semantic mismatch.  In HLSL,
 // these can be float scalar, float vector, or arrays of float scalar or float vector.
 // In SPIR-V, they are arrays of scalar floats in all cases.  We must copy individual components
@@ -2544,7 +2573,7 @@
         vecItems += (*semanticNSize)[x];
         arrayLoc += (*semanticNSize)[x];
     }
- 
+
 
     // It can have up to 2 array dimensions (in the case of geometry shader inputs)
     const TArraySizes* const internalArraySizes = internalNode->getType().getArraySizes();
@@ -2565,7 +2594,7 @@
         // into a float array, or vice versa.  Here, we make the array the right size and type,
         // which depends on the incoming data, which has several potential dimensions:
         //    * Semantic ID
-        //    * vector size 
+        //    * vector size
         //    * array size
         // Of those, semantic ID and array size cannot appear simultaneously.
         //
@@ -2626,7 +2655,7 @@
     // Holds individual component assignments as we make them.
     TIntermTyped* clipCullAssign = nullptr;
 
-    // If the types are homomorphic, use a simple assign.  No need to mess about with 
+    // If the types are homomorphic, use a simple assign.  No need to mess about with
     // individual components.
     if (clipCullSym->getType().isArray() == internalNode->getType().isArray() &&
         clipCullInnerArraySize == internalInnerArraySize &&
@@ -2737,7 +2766,7 @@
         if (binaryNode == nullptr)
             return false;
 
-        return (binaryNode->getOp() == EOpIndexDirect || binaryNode->getOp() == EOpIndexIndirect) && 
+        return (binaryNode->getOp() == EOpIndexDirect || binaryNode->getOp() == EOpIndexIndirect) &&
                wasSplit(binaryNode->getLeft());
     };
 
@@ -2769,7 +2798,7 @@
     const bool isFlattenLeft  = wasFlattened(leftSymbol);
     const bool isFlattenRight = wasFlattened(rightSymbol);
 
-    // OK to do a single assign if neither side is split or flattened.  Otherwise, 
+    // OK to do a single assign if neither side is split or flattened.  Otherwise,
     // fall through to a member-wise copy.
     if (!isFlattenLeft && !isFlattenRight && !isSplitLeft && !isSplitRight) {
         // Clip and cull distance requires more processing.  See comment above assignClipCullDistance.
@@ -3401,9 +3430,9 @@
 
             // Byte address buffers index in bytes (only multiples of 4 permitted... not so much a byte address
             // buffer then, but that's what it calls itself.
-            const bool isByteAddressBuffer = (builtInType == EbvByteAddressBuffer   || 
+            const bool isByteAddressBuffer = (builtInType == EbvByteAddressBuffer   ||
                                               builtInType == EbvRWByteAddressBuffer);
-                
+
 
             if (isByteAddressBuffer)
                 argIndex = intermediate.addBinaryNode(EOpRightShift, argIndex,
@@ -3418,7 +3447,7 @@
             const TType derefType(argArray->getType(), 0);
             node->setType(derefType);
         }
-        
+
         break;
 
     case EOpMethodLoad2:
@@ -3544,8 +3573,8 @@
                     const TType indexType(argValue->getType(), 0);
                     rValue->setType(indexType);
                 }
-                    
-                TIntermTyped* assign = intermediate.addAssign(EOpAssign, lValue, rValue, loc); 
+
+                TIntermTyped* assign = intermediate.addAssign(EOpAssign, lValue, rValue, loc);
 
                 body = intermediate.growAggregate(body, assign);
             }
@@ -3722,7 +3751,7 @@
     }
 
     TConstUnionArray* values = new TConstUnionArray(numSamples*2);
-    
+
     for (int pos=0; pos<count; ++pos) {
         TConstUnion x, y;
         x.setDConst(sampleLoc[pos].x);
@@ -3756,7 +3785,7 @@
         result->setType(TType(node->getType().getBasicType(), EvqTemporary, node->getVectorSize()));
 
         TIntermTyped* convertedResult = nullptr;
-        
+
         TType retType;
         getTextureReturnType(sampler, retType);
 
@@ -3782,7 +3811,7 @@
 
             for (unsigned m = 0; m < unsigned(retType.getStruct()->size()); ++m) {
                 const TType memberType(retType, m); // dereferenced type of the member we're about to assign.
-                
+
                 // Check for bad struct members.  This should have been caught upstream.  Complain, because
                 // wwe don't know what to do with it.  This algorithm could be generalized to handle
                 // other things, e.g, sub-structures, but HLSL doesn't allow them.
@@ -3790,7 +3819,7 @@
                     error(loc, "expected: scalar or vector type in texture structure", "", "");
                     return nullptr;
                 }
-                    
+
                 // Index into the struct variable to find the member to assign.
                 TIntermTyped* structMember = intermediate.addIndex(EOpIndexDirectStruct,
                                                                    intermediate.addSymbol(*structVar, loc),
@@ -3812,14 +3841,14 @@
 
                         TIntermTyped* structVecComponent = intermediate.addIndex(EOpIndexDirect, structMember,
                                                                                  intermediate.addConstantUnion(component, loc), loc);
-                        
+
                         memberAssign = intermediate.addAssign(EOpAssign, structVecComponent, vec4Member, loc);
                     } else {
                         // Scalar member: we can assign to it directly.
                         memberAssign = intermediate.addAssign(EOpAssign, structMember, vec4Member, loc);
                     }
 
-                    
+
                     conversionAggregate->getSequence().push_back(memberAssign);
                 }
             }
@@ -3858,7 +3887,7 @@
             if (arguments->getAsTyped()->getBasicType() != EbtSampler)
                 return;
         } else {
-            if (argAggregate->getSequence().size() == 0 || 
+            if (argAggregate->getSequence().size() == 0 ||
                 argAggregate->getSequence()[0] == nullptr ||
                 argAggregate->getSequence()[0]->getAsTyped()->getBasicType() != EbtSampler)
                 return;
@@ -3895,6 +3924,7 @@
             case Esd3D:   constructOp = EOpConstructVec3;  coordSize = 3; break; // 3D
             case EsdCube: constructOp = EOpConstructVec3;  coordSize = 3; break; // also 3D
             default:
+                error(loc, "unhandled DX9 texture LoD dimension", "", "");
                 break;
             }
 
@@ -3931,7 +3961,9 @@
             case Esd2D:   constructOp = EOpConstructVec2;  break; // 2D
             case Esd3D:   constructOp = EOpConstructVec3;  break; // 3D
             case EsdCube: constructOp = EOpConstructVec3;  break; // also 3D
-            default: break;
+            default:
+                error(loc, "unhandled DX9 texture bias dimension", "", "");
+                break;
             }
 
             TIntermAggregate* constructCoord = new TIntermAggregate(constructOp);
@@ -4055,7 +4087,8 @@
             case EsdBuffer: numDims = 1; break; // W (buffers)
             case EsdRect:   numDims = 2; break; // W, H (rect)
             default:
-                assert(0 && "unhandled texture dimension");
+                error(loc, "unhandled DX10 MethodGet dimension", "", "");
+                break;
             }
 
             // Arrayed adds another dimension for the number of array elements
@@ -4191,7 +4224,9 @@
             case 3: constructOp = EOpConstructVec3;  break;
             case 4: constructOp = EOpConstructVec4;  break;
             case 5: constructOp = EOpConstructVec4;  break; // cubeArrayShadow, cmp value is separate arg.
-            default: assert(0); break;
+            default:
+                error(loc, "unhandled DX10 MethodSample dimension", "", "");
+                break;
             }
 
             TIntermAggregate* coordWithCmp = new TIntermAggregate(constructOp);
@@ -4555,13 +4590,13 @@
             int count = 0;
             for (int val = 2; val <= 16; val *= 2)
                 idxtest[count++] =
-                    intermediate.addBinaryNode(EOpEqual, 
+                    intermediate.addBinaryNode(EOpEqual,
                                                intermediate.addSymbol(*outSampleCount, loc),
                                                intermediate.addConstantUnion(val, loc),
                                                loc, TType(EbtBool));
 
             const TOperator idxOp = (argSampIdx->getQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect;
-            
+
             // Create index ops into position arrays given sample index.
             // TODO: should it be clamped?
             TIntermTyped* index[4];
@@ -4576,13 +4611,13 @@
             // (sampleCount == 4)  ? pos4[idx] :
             // (sampleCount == 8)  ? pos8[idx] :
             // (sampleCount == 16) ? pos16[idx] : float2(0,0);
-            TIntermTyped* test = 
-                intermediate.addSelection(idxtest[0], index[0], 
-                    intermediate.addSelection(idxtest[1], index[1], 
+            TIntermTyped* test =
+                intermediate.addSelection(idxtest[0], index[0],
+                    intermediate.addSelection(idxtest[1], index[1],
                         intermediate.addSelection(idxtest[2], index[2],
-                            intermediate.addSelection(idxtest[3], index[3], 
+                            intermediate.addSelection(idxtest[3], index[3],
                                                       getSamplePosArray(1), loc), loc), loc), loc);
-                                         
+
             compoundStatement = intermediate.growAggregate(compoundStatement, test);
             compoundStatement->setOperator(EOpSequence);
             compoundStatement->setLoc(loc);
@@ -4595,7 +4630,7 @@
 
     case EOpSubpassLoad:
         {
-            const TIntermTyped* argSubpass = 
+            const TIntermTyped* argSubpass =
                 argAggregate ? argAggregate->getSequence()[0]->getAsTyped() :
                 arguments->getAsTyped();
 
@@ -4610,7 +4645,7 @@
 
             break;
         }
-        
+
 
     default:
         break; // most pass through unchanged
@@ -5130,7 +5165,7 @@
 
             for (int idx = 0; idx < vecSize; ++idx) {
                 TIntermTyped* idxConst = intermediate.addConstantUnion(idx, loc, true);
-                TIntermTyped* component = argValue->getType().isVector() ? 
+                TIntermTyped* component = argValue->getType().isVector() ?
                     intermediate.addIndex(EOpIndexDirect, argValue, idxConst, loc) : argValue;
 
                 if (component != argValue)
@@ -5142,7 +5177,7 @@
                 unpackOp->setLoc(loc);
 
                 TIntermTyped* lowOrder  = intermediate.addIndex(EOpIndexDirect, unpackOp, zero, loc);
-                
+
                 if (result != nullptr) {
                     result->getSequence().push_back(lowOrder);
                     node = result;
@@ -5150,7 +5185,7 @@
                     node = lowOrder;
                 }
             }
-            
+
             break;
         }
 
@@ -5181,7 +5216,7 @@
 
             for (int idx = 0; idx < vecSize; ++idx) {
                 TIntermTyped* idxConst = intermediate.addConstantUnion(idx, loc, true);
-                TIntermTyped* component = argValue->getType().isVector() ? 
+                TIntermTyped* component = argValue->getType().isVector() ?
                     intermediate.addIndex(EOpIndexDirect, argValue, idxConst, loc) : argValue;
 
                 if (component != argValue)
@@ -5192,7 +5227,7 @@
                 vec2ComponentAndZero->getSequence().push_back(zero);
                 vec2ComponentAndZero->setType(TType(EbtFloat, EvqTemporary, 2));
                 vec2ComponentAndZero->setLoc(loc);
-                
+
                 TIntermTyped* packOp = new TIntermUnary(EOpPackHalf2x16);
                 packOp->getAsUnaryNode()->setOperand(vec2ComponentAndZero);
                 packOp->setLoc(loc);
@@ -5265,7 +5300,7 @@
 
             TIntermTyped* notinf = handleUnaryMath(loc, "!", EOpLogicalNot, isinf);
             notinf->setType(boolType);
-            
+
             TIntermTyped* andNode = handleBinaryMath(loc, "and", EOpLogicalAnd, notnan, notinf);
             andNode->setType(boolType);
 
@@ -5649,7 +5684,7 @@
         // means take 'arguments' itself as the one argument.
         TIntermTyped* arg = function.getParamCount() == 1
                                    ? arguments->getAsTyped()
-                                   : (aggregate ? 
+                                   : (aggregate ?
                                         aggregate->getSequence()[param]->getAsTyped() :
                                         arguments->getAsTyped());
         if (*function[param].type != arg->getType()) {
@@ -5720,7 +5755,7 @@
         else if (args.size() > 1) {
             if (function.getParamCount() + functionParamNumberOffset == 1) {
                 arguments = intermediate.makeAggregate(args.front());
-                std::for_each(args.begin() + 1, args.end(), 
+                std::for_each(args.begin() + 1, args.end(),
                     [&](TIntermTyped* arg) {
                         arguments = intermediate.growAggregate(arguments, arg);
                     });
@@ -5739,7 +5774,7 @@
         // means take 'arguments' itself as the one argument.
         TIntermTyped* arg = function.getParamCount() == 1
                                    ? arguments->getAsTyped()
-                                   : (aggregate ? 
+                                   : (aggregate ?
                                         aggregate->getSequence()[param + functionParamNumberOffset]->getAsTyped() :
                                         arguments->getAsTyped());
 
@@ -6100,6 +6135,32 @@
         return semanticNum;
     };
 
+    if (builtIn == EbvNone && hlslDX9Compatible()) {
+        if (language == EShLangVertex) {
+            if (qualifier.isParamOutput()) {
+                if (upperCase == "POSITION") {
+                    builtIn = EbvPosition;
+                }
+                if (upperCase == "PSIZE") {
+                    builtIn = EbvPointSize;
+                }
+            }
+        } else if (language == EShLangFragment) {
+            if (qualifier.isParamInput() && upperCase == "VPOS") {
+                builtIn = EbvFragCoord;
+            }
+            if (qualifier.isParamOutput()) {
+                if (upperCase.compare(0, 5, "COLOR") == 0) {
+                    qualifier.layoutLocation = getSemanticNumber(upperCase, 0, nullptr);
+                    nextOutLocation = std::max(nextOutLocation, qualifier.layoutLocation + 1u);
+                }
+                if (upperCase == "DEPTH") {
+                    builtIn = EbvFragDepth;
+                }
+            }
+        }
+    }
+
     switch(builtIn) {
     case EbvNone:
         // Get location numbers from fragment outputs, instead of
@@ -6914,7 +6975,6 @@
         type.getQualifier().storage = EvqConstReadOnly;
         break;
     case EvqGlobal:
-    case EvqUniform:
     case EvqTemporary:
         type.getQualifier().storage = EvqIn;
         break;
@@ -8514,7 +8574,7 @@
     // bump up to the next component to consume
     const auto getNextComponent = [&]() {
         TIntermTyped* component;
-        component = handleBracketDereference(node->getLoc(), constructee, 
+        component = handleBracketDereference(node->getLoc(), constructee,
                                              intermediate.addConstantUnion(constructeeElement, node->getLoc()));
         if (component->isVector())
             component = handleBracketDereference(node->getLoc(), component,
@@ -9586,7 +9646,7 @@
     // Insert it in the vector that tracks struct return types.
     sampler.structReturnIndex = unsigned(textureReturnStruct.size());
     textureReturnStruct.push_back(members);
-    
+
     // Success!
     return true;
 }
@@ -9634,7 +9694,7 @@
     TVector<const TFunction*> candidateList;
     bool builtIn;
     symbolTable.findFunctionNameList(mangledName, candidateList, builtIn);
-    
+
     // We have to have one and only one, or we don't know which to pick: the patchconstantfunc does not
     // allow any disambiguation of overloads.
     if (candidateList.empty()) {
@@ -9705,26 +9765,26 @@
 
         return type.isSizedArray() && biType == EbvOutputPatch;
     };
-    
+
     // We will perform these steps.  Each is in a scoped block for separation: they could
     // become separate functions to make addPatchConstantInvocation shorter.
-    // 
+    //
     // 1. Union the interfaces, and create built-ins for anything present in the PCF and
     //    declared as a built-in variable that isn't present in the entry point's signature.
     //
     // 2. Synthesizes a call to the patchconstfunction using built-in variables from either main,
     //    or the ones we created.  Matching is based on built-in type.  We may use synthesized
     //    variables from (1) above.
-    // 
+    //
     // 2B: Synthesize per control point invocations of wrapped entry point if the PCF requires them.
     //
     // 3. Create a return sequence: copy the return value (if any) from the PCF to a
     //    (non-sanitized) output variable.  In case this may involve multiple copies, such as for
     //    an arrayed variable, a temporary copy of the PCF output is created to avoid multiple
     //    indirections into a complex R-value coming from the call to the PCF.
-    // 
+    //
     // 4. Create a barrier.
-    // 
+    //
     // 5/5B. Call the PCF inside an if test for (invocation id == 0).
 
     TFunction* patchConstantFunctionPtr = const_cast<TFunction*>(findPatchConstantFunction(loc));
@@ -9831,7 +9891,7 @@
             } else {
                 // find which built-in it is
                 const TBuiltInVariable biType = patchConstantFunction[p].getDeclaredBuiltIn();
-                
+
                 if (biType == EbvInputPatch && inputPatch == nullptr) {
                     error(loc, "unimplemented: PCF input patch without entry point input patch parameter", "", "");
                     return;
@@ -9938,7 +9998,7 @@
             element->setType(derefType);
             element->setLoc(loc);
 
-            pcfCallSequence = intermediate.growAggregate(pcfCallSequence, 
+            pcfCallSequence = intermediate.growAggregate(pcfCallSequence,
                                                          handleAssign(loc, EOpAssign, element, callReturn));
         }
     }
@@ -9987,7 +10047,7 @@
         pcfCallSequence = intermediate.growAggregate(pcfCallSequence, pcfCall);
     }
 
-    // ================ Step 4: Barrier ================    
+    // ================ Step 4: Barrier ================
     TIntermTyped* barrier = new TIntermAggregate(EOpBarrier);
     barrier->setLoc(loc);
     barrier->setType(TType(EbtVoid));
@@ -10059,7 +10119,7 @@
 
     // Patch append sequences, now that we know the stream output symbol.
     for (auto append = gsAppends.begin(); append != gsAppends.end(); ++append) {
-        append->node->getSequence()[0] = 
+        append->node->getSequence()[0] =
             handleAssign(append->loc, EOpAssign,
                          intermediate.addSymbol(*gsStreamOutput, append->loc),
                          append->node->getSequence()[0]->getAsTyped());
diff --git a/hlsl/hlslParseHelper.h b/glslang/HLSL/hlslParseHelper.h
similarity index 98%
rename from hlsl/hlslParseHelper.h
rename to glslang/HLSL/hlslParseHelper.h
index 3ca21c6..b92856a 100644
--- a/hlsl/hlslParseHelper.h
+++ b/glslang/HLSL/hlslParseHelper.h
@@ -36,9 +36,9 @@
 #ifndef HLSL_PARSE_INCLUDED_
 #define HLSL_PARSE_INCLUDED_
 
-#include "../glslang/MachineIndependent/parseVersions.h"
-#include "../glslang/MachineIndependent/ParseHelper.h"
-#include "../glslang/MachineIndependent/attribute.h"
+#include "../MachineIndependent/parseVersions.h"
+#include "../MachineIndependent/ParseHelper.h"
+#include "../MachineIndependent/attribute.h"
 
 #include <array>
 
@@ -60,8 +60,8 @@
     virtual const char* getGlobalUniformBlockName() const override { return "$Global"; }
     virtual void setUniformBlockDefaults(TType& block) const override
     {
-        block.getQualifier().layoutPacking = ElpStd140;
-        block.getQualifier().layoutMatrix = ElmRowMajor;
+        block.getQualifier().layoutPacking = globalUniformDefaults.layoutPacking;
+        block.getQualifier().layoutMatrix = globalUniformDefaults.layoutMatrix;
     }
 
     void reservedPpErrorCheck(const TSourceLoc&, const char* /*name*/, const char* /*op*/) override { }
@@ -320,7 +320,7 @@
     // Finalization step: remove unused buffer blocks from linkage (we don't know until the
     // shader is entirely compiled)
     void removeUnusedStructBufferCounters();
- 
+
     static bool isClipOrCullDistance(TBuiltInVariable);
     static bool isClipOrCullDistance(const TQualifier& qual) { return isClipOrCullDistance(qual.builtIn); }
     static bool isClipOrCullDistance(const TType& type) { return isClipOrCullDistance(type.getQualifier()); }
@@ -407,7 +407,7 @@
     // This tracks texture sample user structure return types.  Only a limited number are supported, as
     // may fit in TSampler::structReturnIndex.
     TVector<TTypeList*> textureReturnStruct;
-    
+
     TMap<TString, bool> structBufferCounter;  // true if counter buffer is in use
 
     // The built-in interstage IO map considers e.g, EvqPosition on input and output separately, so that we
@@ -456,7 +456,7 @@
     std::array<int, maxClipCullRegs> cullSemanticNSizeOut; // vector, indexed by cull semantic ID
 
     // This tracks the first (mip level) argument to the .mips[][] operator.  Since this can be nested as
-    // in tx.mips[tx.mips[0][1].x][2], we need a stack.  We also track the TSourceLoc for error reporting 
+    // in tx.mips[tx.mips[0][1].x][2], we need a stack.  We also track the TSourceLoc for error reporting
     // purposes.
     struct tMipsOperatorData {
         tMipsOperatorData(TSourceLoc l, TIntermTyped* m) : loc(l), mipLevel(m) { }
diff --git a/hlsl/hlslParseables.cpp b/glslang/HLSL/hlslParseables.cpp
similarity index 94%
rename from hlsl/hlslParseables.cpp
rename to glslang/HLSL/hlslParseables.cpp
index a63ecb6..61c820b 100644
--- a/hlsl/hlslParseables.cpp
+++ b/glslang/HLSL/hlslParseables.cpp
@@ -56,18 +56,6 @@
 
 namespace {  // anonymous namespace functions
 
-const bool UseHlslTypes = true;
-
-const char* BaseTypeName(const char argOrder, const char* scalarName, const char* vecName, const char* matName)
-{
-    switch (argOrder) {
-    case 'S': return scalarName;
-    case 'V': return vecName;
-    case 'M': return matName;
-    default:  return "UNKNOWN_TYPE";
-    }
-}
-
 // arg order queries
 bool IsSamplerType(const char argType)     { return argType == 'S' || argType == 's'; }
 bool IsArrayed(const char argOrder)        { return argOrder == '@' || argOrder == '&' || argOrder == '#'; }
@@ -216,8 +204,7 @@
     return 0; // none found.
 }
 
-// Create and return a type name.  This is done in GLSL, not HLSL conventions, until such
-// time as builtins are parsed using the HLSL parser.
+// Create and return a type name, using HLSL type conventions.
 //
 //    order:   S = scalar, V = vector, M = matrix
 //    argType: F = float, D = double, I = int, U = uint, B = bool, S = sampler
@@ -252,63 +239,35 @@
 
     char order = *argOrder;
 
-    if (UseHlslTypes) {
-        switch (type) {
-        case '-': s += "void";                                break;
-        case 'F': s += "float";                               break;
-        case 'D': s += "double";                              break;
-        case 'I': s += "int";                                 break;
-        case 'U': s += "uint";                                break;
-        case 'L': s += "int64_t";                             break;
-        case 'M': s += "uint64_t";                            break;
-        case 'B': s += "bool";                                break;
-        case 'S': s += "sampler";                             break;
-        case 's': s += "SamplerComparisonState";              break;
-        case 'T': s += ((isBuffer && isImage) ? "RWBuffer" :
-                        isSubpass ? "SubpassInput" :
-                        isBuffer ? "Buffer" :
-                        isImage  ? "RWTexture" : "Texture");  break;
-        case 'i': s += ((isBuffer && isImage) ? "RWBuffer" :
-                        isSubpass ? "SubpassInput" :
-                        isBuffer ? "Buffer" :
-                        isImage ? "RWTexture" : "Texture");   break;
-        case 'u': s += ((isBuffer && isImage) ? "RWBuffer" :
-                        isSubpass ? "SubpassInput" :
-                        isBuffer ? "Buffer" :
-                        isImage ? "RWTexture" : "Texture");   break;
-        default:  s += "UNKNOWN_TYPE";                        break;
-        }
-
-        if (isSubpass && isMS)
-            s += "MS";
-
-    } else {
-        switch (type) {
-        case '-': s += "void"; break;
-        case 'F': s += BaseTypeName(order, "float",  "vec",  "mat");  break;
-        case 'D': s += BaseTypeName(order, "double", "dvec", "dmat"); break;
-        case 'I': s += BaseTypeName(order, "int",    "ivec", "imat"); break;
-        case 'U': s += BaseTypeName(order, "uint",   "uvec", "umat"); break;
-        case 'B': s += BaseTypeName(order, "bool",   "bvec", "bmat"); break;
-        case 'S': s += "sampler";                                     break;
-        case 's': s += "samplerShadow";                               break;
-        case 'T': // fall through
-        case 'i': // ...
-        case 'u': // ...
-            if (type != 'T') // create itexture, utexture, etc
-                s += type;
-
-            s += ((isImage && isBuffer) ? "imageBuffer"   :
-                  isSubpass             ? "subpassInput" :
-                  isImage               ? "image"         :
-                  isBuffer              ? "samplerBuffer" :
-                  "texture");
-            break;
-
-        default:  s += "UNKNOWN_TYPE"; break;
-        }
+    switch (type) {
+    case '-': s += "void";                                break;
+    case 'F': s += "float";                               break;
+    case 'D': s += "double";                              break;
+    case 'I': s += "int";                                 break;
+    case 'U': s += "uint";                                break;
+    case 'L': s += "int64_t";                             break;
+    case 'M': s += "uint64_t";                            break;
+    case 'B': s += "bool";                                break;
+    case 'S': s += "sampler";                             break;
+    case 's': s += "SamplerComparisonState";              break;
+    case 'T': s += ((isBuffer && isImage) ? "RWBuffer" :
+                    isSubpass ? "SubpassInput" :
+                    isBuffer ? "Buffer" :
+                    isImage  ? "RWTexture" : "Texture");  break;
+    case 'i': s += ((isBuffer && isImage) ? "RWBuffer" :
+                    isSubpass ? "SubpassInput" :
+                    isBuffer ? "Buffer" :
+                    isImage ? "RWTexture" : "Texture");   break;
+    case 'u': s += ((isBuffer && isImage) ? "RWBuffer" :
+                    isSubpass ? "SubpassInput" :
+                    isBuffer ? "Buffer" :
+                    isImage ? "RWTexture" : "Texture");   break;
+    default:  s += "UNKNOWN_TYPE";                        break;
     }
 
+    if (isSubpass && isMS)
+        s += "MS";
+
     // handle fixed vector sizes, such as float3, and only ever 3.
     const int fixedVecSize = FixedVecSize(argOrder);
     if (fixedVecSize != 0)
@@ -324,7 +283,7 @@
             case 1: s += "1D";                   break;
             case 2: s += (isMS ? "2DMS" : "2D"); break;
             case 3: s += "3D";                   break;
-            case 4: s += "Cube";                 break;
+            case 4: s += (type == 'S'? "CUBE" : "Cube"); break;
             default: s += "UNKNOWN_SAMPLER";     break;
             }
         }
@@ -357,26 +316,24 @@
     if (isArrayed)
         s += "Array";
 
-    // For HLSL, append return type for texture types
-    if (UseHlslTypes) {
-        switch (type) {
-        case 'i': s += "<int";   s += dim0Char; s += ">"; break;
-        case 'u': s += "<uint";  s += dim0Char; s += ">"; break;
-        case 'T': s += "<float"; s += dim0Char; s += ">"; break;
-        default: break;
-        }
+    switch (type) {
+    case 'i': s += "<int";   s += dim0Char; s += ">"; break;
+    case 'u': s += "<uint";  s += dim0Char; s += ">"; break;
+    case 'T': s += "<float"; s += dim0Char; s += ">"; break;
+    default: break;
     }
 
     return s;
 }
 
-// The GLSL parser can be used to parse a subset of HLSL prototypes.  However, many valid HLSL prototypes
-// are not valid GLSL prototypes.  This rejects the invalid ones.  Thus, there is a single switch below
-// to enable creation of the entire HLSL space.
-inline bool IsValid(const char* cname, char retOrder, char retType, char argOrder, char argType, int dim0, int dim1)
+// This rejects prototypes not normally valid for GLSL and it's way of finding
+// overloaded built-ins under implicit type conversion.
+//
+// It is possible that this is not needed, but that would require some tweaking
+// of other rules to get the same results.
+inline bool IsValid(const char* cname, char /* retOrder */, char /* retType */, char argOrder, char /* argType */, int dim0, int /* dim1 */)
 {
     const bool isVec = (argOrder == 'V');
-    const bool isMat = (argOrder == 'M');
 
     const std::string name(cname);
 
@@ -387,26 +344,6 @@
     if (!IsTextureType(argOrder) && (isVec && dim0 == 1)) // avoid vec1
         return false;
 
-    if (UseHlslTypes) {
-        // NO further restrictions for HLSL
-    } else {
-        // GLSL parser restrictions
-        if ((isMat && (argType == 'I' || argType == 'U' || argType == 'B')) ||
-            (retOrder == 'M' && (retType == 'I' || retType == 'U' || retType == 'B')))
-            return false;
-
-        if (isMat && dim0 == 1 && dim1 == 1)  // avoid mat1x1
-            return false;
-
-        if (isMat && dim1 == 1)  // TODO: avoid mat Nx1 until we find the right GLSL profile
-            return false;
-
-        if (name == "GetRenderTargetSamplePosition" ||
-            name == "tex1D" ||
-            name == "tex1Dgrad")
-            return false;
-    }
-
     return true;
 }
 
@@ -461,12 +398,10 @@
 {
     TString& s = commonBuiltins;
 
-    const int first = (UseHlslTypes ? 1 : 2);
-
-    for (int xRows = first; xRows <=4; xRows++) {
-        for (int xCols = first; xCols <=4; xCols++) {
+    for (int xRows = 1; xRows <=4; xRows++) {
+        for (int xCols = 1; xCols <=4; xCols++) {
             const int yRows = xCols;
-            for (int yCols = first; yCols <=4; yCols++) {
+            for (int yCols = 1; yCols <=4; yCols++) {
                 const int retRows = xRows;
                 const int retCols = yCols;
 
@@ -917,7 +852,7 @@
         { "WaveActiveAllEqual",               "S",     "B",       "SV",             "DFUI",           EShLangPSCS,  false},
         { "WaveActiveAllEqualBool",           "S",     "B",       "S",              "B",              EShLangPSCS,  false},
         { "WaveActiveCountBits",              "S",     "U",       "S",              "B",              EShLangPSCS,  false},
-        
+
         { "WaveActiveSum",                    nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
         { "WaveActiveProduct",                nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
         { "WaveActiveBitAnd",                 nullptr, nullptr,   "SV",             "DFUI",           EShLangPSCS,  false},
diff --git a/hlsl/hlslParseables.h b/glslang/HLSL/hlslParseables.h
similarity index 97%
rename from hlsl/hlslParseables.h
rename to glslang/HLSL/hlslParseables.h
index 28f424b..a4aef6c 100644
--- a/hlsl/hlslParseables.h
+++ b/glslang/HLSL/hlslParseables.h
@@ -36,7 +36,7 @@
 #ifndef _HLSLPARSEABLES_INCLUDED_
 #define _HLSLPARSEABLES_INCLUDED_
 
-#include "../glslang/MachineIndependent/Initialize.h"
+#include "../MachineIndependent/Initialize.h"
 
 namespace glslang {
 
diff --git a/hlsl/hlslScanContext.cpp b/glslang/HLSL/hlslScanContext.cpp
similarity index 98%
rename from hlsl/hlslScanContext.cpp
rename to glslang/HLSL/hlslScanContext.cpp
index 28a66bb..fc62672 100644
--- a/hlsl/hlslScanContext.cpp
+++ b/glslang/HLSL/hlslScanContext.cpp
@@ -42,15 +42,15 @@
 #include <unordered_map>
 #include <unordered_set>
 
-#include "../glslang/Include/Types.h"
-#include "../glslang/MachineIndependent/SymbolTable.h"
-#include "../glslang/MachineIndependent/ParseHelper.h"
+#include "../Include/Types.h"
+#include "../MachineIndependent/SymbolTable.h"
+#include "../MachineIndependent/ParseHelper.h"
 #include "hlslScanContext.h"
 #include "hlslTokens.h"
 
 // preprocessor includes
-#include "../glslang/MachineIndependent/preprocessor/PpContext.h"
-#include "../glslang/MachineIndependent/preprocessor/PpTokens.h"
+#include "../MachineIndependent/preprocessor/PpContext.h"
+#include "../MachineIndependent/preprocessor/PpTokens.h"
 
 namespace {
 
@@ -317,7 +317,7 @@
     (*KeywordMap)["sampler1D"] =               EHTokSampler1d;
     (*KeywordMap)["sampler2D"] =               EHTokSampler2d;
     (*KeywordMap)["sampler3D"] =               EHTokSampler3d;
-    (*KeywordMap)["samplerCube"] =             EHTokSamplerCube;
+    (*KeywordMap)["samplerCUBE"] =             EHTokSamplerCube;
     (*KeywordMap)["sampler_state"] =           EHTokSamplerState;
     (*KeywordMap)["SamplerState"] =            EHTokSamplerState;
     (*KeywordMap)["SamplerComparisonState"] =  EHTokSamplerComparisonState;
diff --git a/hlsl/hlslScanContext.h b/glslang/HLSL/hlslScanContext.h
similarity index 97%
rename from hlsl/hlslScanContext.h
rename to glslang/HLSL/hlslScanContext.h
index 9d30a12..3b191e4 100644
--- a/hlsl/hlslScanContext.h
+++ b/glslang/HLSL/hlslScanContext.h
@@ -41,7 +41,7 @@
 #ifndef HLSLSCANCONTEXT_H_
 #define HLSLSCANCONTEXT_H_
 
-#include "../glslang/MachineIndependent/ParseHelper.h"
+#include "../MachineIndependent/ParseHelper.h"
 #include "hlslTokens.h"
 
 namespace glslang {
diff --git a/hlsl/hlslTokenStream.cpp b/glslang/HLSL/hlslTokenStream.cpp
similarity index 100%
rename from hlsl/hlslTokenStream.cpp
rename to glslang/HLSL/hlslTokenStream.cpp
diff --git a/hlsl/hlslTokenStream.h b/glslang/HLSL/hlslTokenStream.h
similarity index 100%
rename from hlsl/hlslTokenStream.h
rename to glslang/HLSL/hlslTokenStream.h
diff --git a/hlsl/hlslTokens.h b/glslang/HLSL/hlslTokens.h
similarity index 100%
rename from hlsl/hlslTokens.h
rename to glslang/HLSL/hlslTokens.h
diff --git a/hlsl/pch.h b/glslang/HLSL/pch.h
similarity index 91%
rename from hlsl/pch.h
rename to glslang/HLSL/pch.h
index e0bc491..465e7c1 100644
--- a/hlsl/pch.h
+++ b/glslang/HLSL/pch.h
@@ -34,21 +34,20 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
+#include "hlslAttributes.h"
+#include "hlslGrammar.h"
 #include "hlslParseHelper.h"
 #include "hlslScanContext.h"
-#include "hlslGrammar.h"
-#include "hlslAttributes.h"
 
-#include "../glslang/MachineIndependent/Scan.h"
-#include "../glslang/MachineIndependent/preprocessor/PpContext.h"
+#include "../MachineIndependent/Scan.h"
+#include "../MachineIndependent/preprocessor/PpContext.h"
 
-#include "../glslang/OSDependent/osinclude.h"
+#include "../OSDependent/osinclude.h"
 
 #include <algorithm>
-#include <functional>
-#include <cctype>
 #include <array>
+#include <cctype>
+#include <functional>
 #include <set>
 
-
 #endif /* _PCH_H */
diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h
index 733a790..b628cdc 100644
--- a/glslang/Include/Common.h
+++ b/glslang/Include/Common.h
@@ -37,6 +37,17 @@
 #ifndef _COMMON_INCLUDED_
 #define _COMMON_INCLUDED_
 
+#include <algorithm>
+#include <cassert>
+#include <cstdio>
+#include <cstdlib>
+#include <list>
+#include <map>
+#include <set>
+#include <string>
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
 
 #if defined(__ANDROID__) || (defined(_MSC_VER) && _MSC_VER < 1700)
 #include <sstream>
@@ -93,18 +104,6 @@
     #pragma warning(disable : 4201) // nameless union
 #endif
 
-#include <set>
-#include <unordered_set>
-#include <vector>
-#include <map>
-#include <unordered_map>
-#include <list>
-#include <algorithm>
-#include <string>
-#include <cstdio>
-#include <cstdlib>
-#include <cassert>
-
 #include "PoolAlloc.h"
 
 //
diff --git a/glslang/Include/InitializeGlobals.h b/glslang/Include/InitializeGlobals.h
index 95d0a40..b7fdd7a 100644
--- a/glslang/Include/InitializeGlobals.h
+++ b/glslang/Include/InitializeGlobals.h
@@ -37,7 +37,7 @@
 
 namespace glslang {
 
-bool InitializePoolIndex();
+inline bool InitializePoolIndex() { return true; } // DEPRECATED: No need to call
 
 } // end namespace glslang
 
diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h
index 15bf1e1..d01a115 100644
--- a/glslang/Include/glslang_c_shader_types.h
+++ b/glslang/Include/glslang_c_shader_types.h
@@ -164,7 +164,9 @@
     GLSLANG_REFLECTION_SEPARATE_BUFFERS_BIT = (1 << 3),
     GLSLANG_REFLECTION_ALL_BLOCK_VARIABLES_BIT = (1 << 4),
     GLSLANG_REFLECTION_UNWRAP_IO_BLOCKS_BIT = (1 << 5),
-    GLSLANG_REFLECTION_SHARED_STD140_BLOCKS_BIT = (1 << 6),
+    GLSLANG_REFLECTION_ALL_IO_VARIABLES_BIT = (1 << 6),
+    GLSLANG_REFLECTION_SHARED_STD140_SSBO_BIT = (1 << 7),
+    GLSLANG_REFLECTION_SHARED_STD140_UBO_BIT = (1 << 8),
     LAST_ELEMENT_MARKER(GLSLANG_REFLECTION_COUNT),
 } glslang_reflection_options_t;
 
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index bf12fcf..30cb6fb 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -1231,6 +1231,7 @@
     TOperator getFlowOp() const { return flowOp; }
     TIntermTyped* getExpression() const { return expression; }
     void setExpression(TIntermTyped* pExpression) { expression = pExpression; }
+    void updatePrecision(TPrecisionQualifier parentPrecision);
 protected:
     TOperator flowOp;
     TIntermTyped* expression;
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
deleted file mode 100644
index 693557b..0000000
--- a/glslang/Include/revision.h
+++ /dev/null
@@ -1,3 +0,0 @@
-// This header is generated by the make-revision script.
-
-#define GLSLANG_PATCH_LEVEL 3766
diff --git a/glslang/Include/revision.template b/glslang/Include/revision.template
deleted file mode 100644
index 4a16bee..0000000
--- a/glslang/Include/revision.template
+++ /dev/null
@@ -1,13 +0,0 @@
-// 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/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 78eacac..2a121b2 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -1241,11 +1241,19 @@
             " int64_t atomicAdd(coherent volatile inout  int64_t,  int64_t);"
             "uint64_t atomicAdd(coherent volatile inout uint64_t, uint64_t, int, int, int);"
             " int64_t atomicAdd(coherent volatile inout  int64_t,  int64_t, int, int, int);"
+            "   float atomicAdd(coherent volatile inout float, float);"
+            "   float atomicAdd(coherent volatile inout float, float, int, int, int);"
+            "  double atomicAdd(coherent volatile inout double, double);"
+            "  double atomicAdd(coherent volatile inout double, double, int, int, int);"
 
             "uint64_t atomicExchange(coherent volatile inout uint64_t, uint64_t);"
             " int64_t atomicExchange(coherent volatile inout  int64_t,  int64_t);"
             "uint64_t atomicExchange(coherent volatile inout uint64_t, uint64_t, int, int, int);"
             " int64_t atomicExchange(coherent volatile inout  int64_t,  int64_t, int, int, int);"
+            "   float atomicExchange(coherent volatile inout float, float);"
+            "   float atomicExchange(coherent volatile inout float, float, int, int, int);"
+            "  double atomicExchange(coherent volatile inout double, double);"
+            "  double atomicExchange(coherent volatile inout double, double, int, int, int);"
 
             "uint64_t atomicCompSwap(coherent volatile inout uint64_t, uint64_t, uint64_t);"
             " int64_t atomicCompSwap(coherent volatile inout  int64_t,  int64_t,  int64_t);"
@@ -1254,9 +1262,13 @@
 
             "uint64_t atomicLoad(coherent volatile in uint64_t, int, int, int);"
             " int64_t atomicLoad(coherent volatile in  int64_t, int, int, int);"
+            "   float atomicLoad(coherent volatile in float, int, int, int);"
+            "  double atomicLoad(coherent volatile in double, int, int, int);"
 
             "void atomicStore(coherent volatile out uint64_t, uint64_t, int, int, int);"
             "void atomicStore(coherent volatile out  int64_t,  int64_t, int, int, int);"
+            "void atomicStore(coherent volatile out float, float, int, int, int);"
+            "void atomicStore(coherent volatile out double, double, int, int, int);"
             "\n");
     }
 #endif
@@ -6013,12 +6025,39 @@
             // not int or uint
             // GL_ARB_ES3_1_compatibility
             // TODO: spec issue: are there restrictions on the kind of layout() that can be used?  what about dropping memory qualifiers?
-            if ((profile != EEsProfile && version >= 450) ||
-                (profile == EEsProfile && version >= 310)) {
+            if (profile == EEsProfile && version >= 310) {
                 commonBuiltins.append("float imageAtomicExchange(volatile coherent ");
                 commonBuiltins.append(imageParams);
                 commonBuiltins.append(", float);\n");
             }
+            if (profile != EEsProfile && version >= 450) {
+                commonBuiltins.append("float imageAtomicAdd(volatile coherent ");
+                commonBuiltins.append(imageParams);
+                commonBuiltins.append(", float);\n");
+
+                commonBuiltins.append("float imageAtomicAdd(volatile coherent ");
+                commonBuiltins.append(imageParams);
+                commonBuiltins.append(", float");
+                commonBuiltins.append(", int, int, int);\n");
+
+                commonBuiltins.append("float imageAtomicExchange(volatile coherent ");
+                commonBuiltins.append(imageParams);
+                commonBuiltins.append(", float);\n");
+
+                commonBuiltins.append("float imageAtomicExchange(volatile coherent ");
+                commonBuiltins.append(imageParams);
+                commonBuiltins.append(", float");
+                commonBuiltins.append(", int, int, int);\n");
+
+                commonBuiltins.append("float imageAtomicLoad(readonly volatile coherent ");
+                commonBuiltins.append(imageParams);
+                commonBuiltins.append(", int, int, int);\n");
+
+                commonBuiltins.append("void imageAtomicStore(writeonly volatile coherent ");
+                commonBuiltins.append(imageParams);
+                commonBuiltins.append(", float");
+                commonBuiltins.append(", int, int, int);\n");
+            }
         }
     }
 
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 52ec611..bb03aa0 100755
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -2777,6 +2777,22 @@
     return node;
 }
 
+// Propagate precision from formal function return type to actual return type,
+// and on to its subtree.
+void TIntermBranch::updatePrecision(TPrecisionQualifier parentPrecision)
+{
+    TIntermTyped* exp = getExpression();
+    if (exp == nullptr)
+        return;
+
+    if (exp->getBasicType() == EbtInt || exp->getBasicType() == EbtUint ||
+        exp->getBasicType() == EbtFloat || exp->getBasicType() == EbtFloat16) {
+        if (parentPrecision != EpqNone && exp->getQualifier().precision == EpqNone) {
+            exp->propagatePrecision(parentPrecision);
+        }
+    }
+}
+
 //
 // This is to be executed after the final root is put on top by the parsing
 // process.
@@ -3284,9 +3300,11 @@
     return true;
 }
 
+// Propagate precision qualifiers *up* from children to parent.
 void TIntermUnary::updatePrecision()
 {
-    if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
+    if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
+        getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
         if (operand->getQualifier().precision > getQualifier().precision)
             getQualifier().precision = operand->getQualifier().precision;
     }
@@ -3782,9 +3800,12 @@
     return false;
 }
 
+// Propagate precision qualifiers *up* from children to parent, and then
+// back *down* again to the children's subtrees.
 void TIntermBinary::updatePrecision()
 {
-    if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
+     if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
+         getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
         getQualifier().precision = std::max(right->getQualifier().precision, left->getQualifier().precision);
         if (getQualifier().precision != EpqNone) {
             left->propagatePrecision(getQualifier().precision);
@@ -3793,9 +3814,14 @@
     }
 }
 
+// Recursively propagate precision qualifiers *down* the subtree of the current node,
+// until reaching a node that already has a precision qualifier or otherwise does
+// not participate in precision propagation.
 void TIntermTyped::propagatePrecision(TPrecisionQualifier newPrecision)
 {
-    if (getQualifier().precision != EpqNone || (getBasicType() != EbtInt && getBasicType() != EbtUint && getBasicType() != EbtFloat && getBasicType() != EbtFloat16))
+    if (getQualifier().precision != EpqNone ||
+        (getBasicType() != EbtInt && getBasicType() != EbtUint &&
+         getBasicType() != EbtFloat && getBasicType() != EbtFloat16))
         return;
 
     getQualifier().precision = newPrecision;
diff --git a/glslang/MachineIndependent/LiveTraverser.h b/glslang/MachineIndependent/LiveTraverser.h
index 7333bc9..9b39b59 100644
--- a/glslang/MachineIndependent/LiveTraverser.h
+++ b/glslang/MachineIndependent/LiveTraverser.h
@@ -74,14 +74,33 @@
         for (unsigned int f = 0; f < globals.size(); ++f) {
             TIntermAggregate* candidate = globals[f]->getAsAggregate();
             if (candidate && candidate->getOp() == EOpFunction && candidate->getName() == name) {
-                functions.push_back(candidate);
+                destinations.push_back(candidate);
                 break;
             }
         }
     }
 
-    typedef std::list<TIntermAggregate*> TFunctionStack;
-    TFunctionStack functions;
+    void pushGlobalReference(const TString& name)
+    {
+        TIntermSequence& globals = intermediate.getTreeRoot()->getAsAggregate()->getSequence();
+        for (unsigned int f = 0; f < globals.size(); ++f) {
+            TIntermAggregate* candidate = globals[f]->getAsAggregate();
+            if (candidate && candidate->getOp() == EOpSequence &&
+                candidate->getSequence().size() == 1 &&
+                candidate->getSequence()[0]->getAsBinaryNode()) {
+                TIntermBinary* binary = candidate->getSequence()[0]->getAsBinaryNode();
+                TIntermSymbol* symbol = binary->getLeft()->getAsSymbolNode();
+                if (symbol && symbol->getQualifier().storage == EvqGlobal &&
+                    symbol->getName() == name) {
+                    destinations.push_back(candidate);
+                    break;
+                }
+            }
+        }
+    }
+
+    typedef std::list<TIntermAggregate*> TDestinationStack;
+    TDestinationStack destinations;
 
 protected:
     // To catch which function calls are not dead, and hence which functions must be visited.
@@ -117,16 +136,27 @@
     // and only visit each function once.
     void addFunctionCall(TIntermAggregate* call)
     {
-        // // just use the map to ensure we process each function at most once
+        // just use the map to ensure we process each function at most once
         if (liveFunctions.find(call->getName()) == liveFunctions.end()) {
             liveFunctions.insert(call->getName());
             pushFunction(call->getName());
         }
     }
 
+    void addGlobalReference(const TString& name)
+    {
+        // just use the map to ensure we process each global at most once
+        if (liveGlobals.find(name) == liveGlobals.end()) {
+            liveGlobals.insert(name);
+            pushGlobalReference(name);
+        }
+    }
+
     const TIntermediate& intermediate;
     typedef std::unordered_set<TString> TLiveFunctions;
     TLiveFunctions liveFunctions;
+    typedef std::unordered_set<TString> TLiveGlobals;
+    TLiveGlobals liveGlobals;
     bool traverseAll;
 
 private:
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index a35d41a..c2e7021 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -1295,7 +1295,7 @@
     TIntermTyped *result = intermediate.addBuiltInFunctionCall(loc, function.getBuiltInOp(),
                                                                function.getParamCount() == 1,
                                                                arguments, function.getType());
-    if (obeyPrecisionQualifiers())
+    if (result != nullptr && obeyPrecisionQualifiers())
         computeBuiltinPrecisions(*result, function);
 
     if (result == nullptr) {
@@ -1415,23 +1415,28 @@
 #endif
 
     functionReturnsValue = true;
+    TIntermBranch* branch = nullptr;
     if (currentFunctionType->getBasicType() == EbtVoid) {
         error(loc, "void function cannot return a value", "return", "");
-        return intermediate.addBranch(EOpReturn, loc);
+        branch = intermediate.addBranch(EOpReturn, loc);
     } else if (*currentFunctionType != value->getType()) {
         TIntermTyped* converted = intermediate.addConversion(EOpReturn, *currentFunctionType, value);
         if (converted) {
             if (*currentFunctionType != converted->getType())
                 error(loc, "cannot convert return value to function return type", "return", "");
             if (version < 420)
-                warn(loc, "type conversion on return values was not explicitly allowed until version 420", "return", "");
-            return intermediate.addBranch(EOpReturn, converted, loc);
+                warn(loc, "type conversion on return values was not explicitly allowed until version 420",
+                     "return", "");
+            branch = intermediate.addBranch(EOpReturn, converted, loc);
         } else {
             error(loc, "type does not match, or is not convertible to, the function's return type", "return", "");
-            return intermediate.addBranch(EOpReturn, value, loc);
+            branch = intermediate.addBranch(EOpReturn, value, loc);
         }
     } else
-        return intermediate.addBranch(EOpReturn, value, loc);
+        branch = intermediate.addBranch(EOpReturn, value, loc);
+
+    branch->updatePrecision(currentFunctionType->getQualifier().precision);
+    return branch;
 }
 
 // See if the operation is being done in an illegal location.
@@ -2105,7 +2110,14 @@
             if (imageType.getQualifier().getFormat() != ElfR32i && imageType.getQualifier().getFormat() != ElfR32ui)
                 error(loc, "only supported on image with format r32i or r32ui", fnCandidate.getName().c_str(), "");
         } else {
-            if (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") != 0)
+            bool isImageAtomicOnFloatAllowed = ((fnCandidate.getName().compare(0, 14, "imageAtomicAdd") == 0) ||
+                (fnCandidate.getName().compare(0, 15, "imageAtomicLoad") == 0) ||
+                (fnCandidate.getName().compare(0, 16, "imageAtomicStore") == 0) ||
+                (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") == 0));
+            if (imageType.getSampler().type == EbtFloat && isImageAtomicOnFloatAllowed &&
+                (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") != 0)) // imageAtomicExchange doesn't require GL_EXT_shader_atomic_float
+                requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float, fnCandidate.getName().c_str());
+            if (!isImageAtomicOnFloatAllowed)
                 error(loc, "only supported on integer images", fnCandidate.getName().c_str(), "");
             else if (imageType.getQualifier().getFormat() != ElfR32f && isEsProfile())
                 error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), "");
@@ -2134,10 +2146,18 @@
         if (argp->size() > 3) {
             requireExtensions(loc, 1, &E_GL_KHR_memory_scope_semantics, fnCandidate.getName().c_str());
             memorySemanticsCheck(loc, fnCandidate, callNode);
+            if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange ||
+                callNode.getOp() == EOpAtomicLoad || callNode.getOp() == EOpAtomicStore) &&
+                (arg0->getType().isFloatingDomain())) {
+                requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float, fnCandidate.getName().c_str());
+            }
         } else if (arg0->getType().getBasicType() == EbtInt64 || arg0->getType().getBasicType() == EbtUint64) {
             const char* const extensions[2] = { E_GL_NV_shader_atomic_int64,
                                                 E_GL_EXT_shader_atomic_int64 };
             requireExtensions(loc, 2, extensions, fnCandidate.getName().c_str());
+        } else if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange) &&
+                   (arg0->getType().isFloatingDomain())) {
+            requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float, fnCandidate.getName().c_str());
         }
         break;
     }
@@ -5776,6 +5796,8 @@
         int repeated = intermediate.addXfbBufferOffset(type);
         if (repeated >= 0)
             error(loc, "overlapping offsets at", "xfb_offset", "offset %d in buffer %d", repeated, qualifier.layoutXfbBuffer);
+        if (type.isUnsizedArray())
+            error(loc, "unsized array", "xfb_offset", "in buffer %d", qualifier.layoutXfbBuffer);
 
         // "The offset must be a multiple of the size of the first component of the first
         // qualified variable or block member, or a compile-time error results. Further, if applied to an aggregate
@@ -7461,8 +7483,8 @@
             arraySizesCheck(memberLoc, currentBlockQualifier, memberType.getArraySizes(), nullptr, member == typeList.size() - 1);
         if (memberQualifier.hasOffset()) {
             if (spvVersion.spv == 0) {
-                requireProfile(memberLoc, ~EEsProfile, "offset on block member");
-                profileRequires(memberLoc, ~EEsProfile, 440, E_GL_ARB_enhanced_layouts, "offset on block member");
+                profileRequires(memberLoc, ~EEsProfile, 440, E_GL_ARB_enhanced_layouts, "\"offset\" on block member");
+                profileRequires(memberLoc, EEsProfile, 300, E_GL_ARB_enhanced_layouts, "\"offset\" on block member");
             }
         }
 
diff --git a/glslang/MachineIndependent/PoolAlloc.cpp b/glslang/MachineIndependent/PoolAlloc.cpp
index 84c40f4..c269d7d 100644
--- a/glslang/MachineIndependent/PoolAlloc.cpp
+++ b/glslang/MachineIndependent/PoolAlloc.cpp
@@ -35,34 +35,28 @@
 #include "../Include/Common.h"
 #include "../Include/PoolAlloc.h"
 
-#include "../Include/InitializeGlobals.h"
-#include "../OSDependent/osinclude.h"
-
 namespace glslang {
 
-// Process-wide TLS index
-OS_TLSIndex PoolIndex;
+namespace {
+thread_local TPoolAllocator* threadPoolAllocator = nullptr;
+
+TPoolAllocator* GetDefaultThreadPoolAllocator()
+{
+    thread_local TPoolAllocator defaultAllocator;
+    return &defaultAllocator;
+}
+} // anonymous namespace
 
 // Return the thread-specific current pool.
 TPoolAllocator& GetThreadPoolAllocator()
 {
-    return *static_cast<TPoolAllocator*>(OS_GetTLSValue(PoolIndex));
+    return *(threadPoolAllocator ? threadPoolAllocator : GetDefaultThreadPoolAllocator());
 }
 
 // Set the thread-specific current pool.
 void SetThreadPoolAllocator(TPoolAllocator* poolAllocator)
 {
-    OS_SetTLSValue(PoolIndex, poolAllocator);
-}
-
-// Process-wide set up of the TLS pool storage.
-bool InitializePoolIndex()
-{
-    // Allocate a TLS index.
-    if ((PoolIndex = OS_AllocTLSIndex()) == OS_INVALID_TLS_INDEX)
-        return false;
-
-    return true;
+    threadPoolAllocator = poolAllocator;
 }
 
 //
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index a1392db..9c8610c 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -51,9 +51,9 @@
 #include "ScanContext.h"
 
 #ifdef ENABLE_HLSL
-#include "../../hlsl/hlslParseHelper.h"
-#include "../../hlsl/hlslParseables.h"
-#include "../../hlsl/hlslScanContext.h"
+#include "../HLSL/hlslParseHelper.h"
+#include "../HLSL/hlslParseables.h"
+#include "../HLSL/hlslScanContext.h"
 #endif
 
 #include "../Include/ShHandle.h"
@@ -72,6 +72,9 @@
 // token to print ", but none of that seems appropriate for this file.
 #include "preprocessor/PpTokens.h"
 
+// Build-time generated includes
+#include "glslang/build_info.h"
+
 namespace { // anonymous namespace for file-local functions and symbols
 
 // Total number of successful initializers of glslang: a refcount
@@ -1684,19 +1687,29 @@
 
 namespace glslang {
 
-#include "../Include/revision.h"
+Version GetVersion()
+{
+    Version version;
+    version.major = GLSLANG_VERSION_MAJOR;
+    version.minor = GLSLANG_VERSION_MINOR;
+    version.patch = GLSLANG_VERSION_PATCH;
+    version.flavor = GLSLANG_VERSION_FLAVOR;
+    return version;
+}
 
 #define QUOTE(s) #s
 #define STR(n) QUOTE(n)
 
 const char* GetEsslVersionString()
 {
-    return "OpenGL ES GLSL 3.20 glslang Khronos. " STR(GLSLANG_MINOR_VERSION) "." STR(GLSLANG_PATCH_LEVEL);
+    return "OpenGL ES GLSL 3.20 glslang Khronos. " STR(GLSLANG_VERSION_MAJOR) "." STR(GLSLANG_VERSION_MINOR) "." STR(
+        GLSLANG_VERSION_PATCH) GLSLANG_VERSION_FLAVOR;
 }
 
 const char* GetGlslVersionString()
 {
-    return "4.60 glslang Khronos. " STR(GLSLANG_MINOR_VERSION) "." STR(GLSLANG_PATCH_LEVEL);
+    return "4.60 glslang Khronos. " STR(GLSLANG_VERSION_MAJOR) "." STR(GLSLANG_VERSION_MINOR) "." STR(
+        GLSLANG_VERSION_PATCH) GLSLANG_VERSION_FLAVOR;
 }
 
 int GetKhronosToolId()
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index d4dad8a..b311024 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -167,7 +167,7 @@
 
     const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4} };
 
-    for (int ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) {
+    for (size_t ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) {
         // Add only extensions which require > spv1.0 to save space in map
         if (exts[ii].minSpvVersion > EShTargetSpv_1_0) {
             extensionMinSpv[E_GL_EXT_ray_tracing] = exts[ii].minSpvVersion;
@@ -347,6 +347,7 @@
     extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int16]   = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int64]   = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_float16] = EBhDisable;
+    extensionBehavior[E_GL_EXT_shader_atomic_float]                    = EBhDisable;
 }
 
 #endif // GLSLANG_WEB
@@ -520,6 +521,8 @@
             "#define GL_EXT_shader_subgroup_extended_types_int16 1\n"
             "#define GL_EXT_shader_subgroup_extended_types_int64 1\n"
             "#define GL_EXT_shader_subgroup_extended_types_float16 1\n"
+
+            "#define GL_EXT_shader_atomic_float 1\n"
             ;
 
         if (version >= 150) {
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index c90db96..f52f605 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -298,6 +298,8 @@
 const char* const E_GL_EXT_shader_subgroup_extended_types_int64   = "GL_EXT_shader_subgroup_extended_types_int64";
 const char* const E_GL_EXT_shader_subgroup_extended_types_float16 = "GL_EXT_shader_subgroup_extended_types_float16";
 
+const char* const E_GL_EXT_shader_atomic_float = "GL_EXT_shader_atomic_float";
+
 // Arrays of extensions for the above AEP duplications
 
 const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader };
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index 4e409e0..9859f08 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -79,6 +79,11 @@
             target = &outputList;
         else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant())
             target = &uniformList;
+        // If a global is being visited, then we should also traverse it incase it's evaluation
+        // ends up visiting inputs we want to tag as live
+        else if (base->getQualifier().storage == EvqGlobal)
+            addGlobalReference(base->getName());
+
         if (target) {
             TVarEntryInfo ent = {base->getId(), base, ! traverseAll};
             ent.stage = intermediate.getStage();
@@ -309,26 +314,43 @@
         TIntermSymbol* base = ent1.symbol;
         const TType& type = ent1.symbol->getType();
         const TString& name = entKey.first;
-        TString mangleName1, mangleName2;
-        type.appendMangledName(mangleName1);
         EShLanguage stage = ent1.stage;
+        TString mangleName1, mangleName2;
         if (currentStage != stage) {
             preStage = currentStage;
             currentStage = stage;
             nextStage = EShLangCount;
             for (int i = currentStage + 1; i < EShLangCount; i++) {
-                if (inVarMaps[i] != nullptr)
+                if (inVarMaps[i] != nullptr) {
                     nextStage = static_cast<EShLanguage>(i);
+                    break;
+                }
             }
         }
+
+        if (type.getQualifier().isArrayedIo(stage)) {
+            TType subType(type, 0);
+            subType.appendMangledName(mangleName1);
+        } else {
+            type.appendMangledName(mangleName1);
+        }
+
         if (base->getQualifier().storage == EvqVaryingIn) {
             // validate stage in;
             if (preStage == EShLangCount)
                 return;
+            if (name == "gl_PerVertex")
+                return;
             if (outVarMaps[preStage] != nullptr) {
                 auto ent2 = outVarMaps[preStage]->find(name);
                 if (ent2 != outVarMaps[preStage]->end()) {
-                    ent2->second.symbol->getType().appendMangledName(mangleName2);
+                    if (ent2->second.symbol->getType().getQualifier().isArrayedIo(preStage)) {
+                        TType subType(ent2->second.symbol->getType(), 0);
+                        subType.appendMangledName(mangleName2);
+                    }
+                    else {
+                        ent2->second.symbol->getType().appendMangledName(mangleName2);
+                    }
                     if (mangleName1 == mangleName2)
                         return;
                     else {
@@ -343,10 +365,18 @@
             // validate stage out;
             if (nextStage == EShLangCount)
                 return;
+            if (name == "gl_PerVertex")
+                return;
             if (outVarMaps[nextStage] != nullptr) {
                 auto ent2 = inVarMaps[nextStage]->find(name);
                 if (ent2 != inVarMaps[nextStage]->end()) {
-                    ent2->second.symbol->getType().appendMangledName(mangleName2);
+                    if (ent2->second.symbol->getType().getQualifier().isArrayedIo(nextStage)) {
+                        TType subType(ent2->second.symbol->getType(), 0);
+                        subType.appendMangledName(mangleName2);
+                    }
+                    else {
+                        ent2->second.symbol->getType().appendMangledName(mangleName2);
+                    }
                     if (mangleName1 == mangleName2)
                         return;
                     else {
@@ -1080,11 +1110,12 @@
     TVarGatherTraverser iter_binding_live(intermediate, false, inVarMap, outVarMap, uniformVarMap);
     root->traverse(&iter_binding_all);
     iter_binding_live.pushFunction(intermediate.getEntryPointMangledName().c_str());
-    while (! iter_binding_live.functions.empty()) {
-        TIntermNode* function = iter_binding_live.functions.back();
-        iter_binding_live.functions.pop_back();
-        function->traverse(&iter_binding_live);
+    while (! iter_binding_live.destinations.empty()) {
+        TIntermNode* destination = iter_binding_live.destinations.back();
+        iter_binding_live.destinations.pop_back();
+        destination->traverse(&iter_binding_live);
     }
+
     // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info.
     std::for_each(inVarMap.begin(), inVarMap.end(),
                   [&inVector](TVarLivePair p) { inVector.push_back(p); });
@@ -1175,11 +1206,12 @@
                                           *uniformVarMap[stage]);
     root->traverse(&iter_binding_all);
     iter_binding_live.pushFunction(intermediate.getEntryPointMangledName().c_str());
-    while (! iter_binding_live.functions.empty()) {
-        TIntermNode* function = iter_binding_live.functions.back();
-        iter_binding_live.functions.pop_back();
-        function->traverse(&iter_binding_live);
+    while (! iter_binding_live.destinations.empty()) {
+        TIntermNode* destination = iter_binding_live.destinations.back();
+        iter_binding_live.destinations.pop_back();
+        destination->traverse(&iter_binding_live);
     }
+
     TNotifyInOutAdaptor inOutNotify(stage, *resolver);
     TNotifyUniformAdaptor uniformNotify(stage, *resolver);
     // Resolve current stage input symbol location with previous stage output here,
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index 045d45e..f0bede5 100755
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -1362,9 +1362,9 @@
     // that component's size.  Aggregate types are flattened down to the component
     // level to get this sequence of components."
 
-    if (type.isArray()) {
+    if (type.isSizedArray()) {
         // TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness
-        assert(type.isSizedArray());
+        // Unsized array use to xfb should be a compile error.
         TType elementType(type, 0);
         return type.getOuterArraySize() * computeTypeXfbSize(elementType, contains64BitType, contains16BitType, contains16BitType);
     }
@@ -1550,7 +1550,9 @@
         RoundToPow2(size, alignment);
         stride = size;  // uses full matrix size for stride of an array of matrices (not quite what rule 6/8, but what's expected)
                         // uses the assumption for rule 10 in the comment above
-        size = stride * type.getOuterArraySize();
+        // use one element to represent the last member of SSBO which is unsized array
+        int arraySize = (type.isUnsizedArray() && (type.getOuterArraySize() == 0)) ? 1 : type.getOuterArraySize();
+        size = stride * arraySize;
         return alignment;
     }
 
diff --git a/glslang/MachineIndependent/pch.cpp b/glslang/MachineIndependent/pch.cpp
deleted file mode 100644
index b7a0865..0000000
--- a/glslang/MachineIndependent/pch.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// Copyright (C) 2018 The Khronos Group Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-//
-//    Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//
-//    Redistributions in binary form must reproduce the above
-//    copyright notice, this list of conditions and the following
-//    disclaimer in the documentation and/or other materials provided
-//    with the distribution.
-//
-//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
-//    contributors may be used to endorse or promote products derived
-//    from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-// POSSIBILITY OF SUCH DAMAGE.
-//
-
-#include "pch.h"
diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp
index 55caa1f..03d6fe1 100644
--- a/glslang/MachineIndependent/reflection.cpp
+++ b/glslang/MachineIndependent/reflection.cpp
@@ -107,22 +107,13 @@
                 else
                     baseName = "";
 
-                if (base.getType().isArray()) {
-                    TType derefType(base.getType(), 0);
-
-                    assert(!anonymous);
-                    for (int e = 0; e < base.getType().getCumulativeArraySize(); ++e)
-                        blockIndex = addBlockName(blockName + "[" + String(e) + "]", derefType,
-                            intermediate.getBlockSize(base.getType()));
-                }
-                else
-                    blockIndex = addBlockName(blockName, base.getType(), intermediate.getBlockSize(base.getType()));
+                blockIndex = addBlockName(blockName, base.getType(), intermediate.getBlockSize(base.getType()));
             }
 
             // Use a degenerate (empty) set of dereferences to immediately put as at the end of
             // the dereference change expected by blowUpActiveAggregate.
-            blowUpActiveAggregate(base.getType(), baseName, derefs, derefs.end(), offset, blockIndex, 0, 0,
-                                  base.getQualifier().storage, updateStageMasks);
+            blowUpActiveAggregate(base.getType(), baseName, derefs, derefs.end(), offset, blockIndex, 0, -1, 0,
+                                    base.getQualifier().storage, updateStageMasks);
         }
     }
 
@@ -259,7 +250,7 @@
     // A value of 0 for arraySize will mean to use the full array's size.
     void blowUpActiveAggregate(const TType& baseType, const TString& baseName, const TList<TIntermBinary*>& derefs,
                                TList<TIntermBinary*>::const_iterator deref, int offset, int blockIndex, int arraySize,
-                               int topLevelArrayStride, TStorageQualifier baseStorage, bool active)
+                               int topLevelArraySize, int topLevelArrayStride, TStorageQualifier baseStorage, bool active)
     {
         // when strictArraySuffix is enabled, we closely follow the rules from ARB_program_interface_query.
         // Broadly:
@@ -288,14 +279,15 @@
                 // Visit all the indices of this array, and for each one add on the remaining dereferencing
                 for (int i = 0; i < std::max(visitNode->getLeft()->getType().getOuterArraySize(), 1); ++i) {
                     TString newBaseName = name;
-                    if (strictArraySuffix && blockParent)
+                    if (terminalType->getBasicType() == EbtBlock) {}
+                    else if (strictArraySuffix && blockParent)
                         newBaseName.append(TString("[0]"));
                     else if (strictArraySuffix || baseType.getBasicType() != EbtBlock)
                         newBaseName.append(TString("[") + String(i) + "]");
                     TList<TIntermBinary*>::const_iterator nextDeref = deref;
                     ++nextDeref;
                     blowUpActiveAggregate(*terminalType, newBaseName, derefs, nextDeref, offset, blockIndex, arraySize,
-                                          topLevelArrayStride, baseStorage, active);
+                                          topLevelArraySize, topLevelArrayStride, baseStorage, active);
 
                     if (offset >= 0)
                         offset += stride;
@@ -308,9 +300,10 @@
                 int stride = getArrayStride(baseType, visitNode->getLeft()->getType());
 
                 index = visitNode->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst();
-                if (strictArraySuffix && blockParent) {
+                if (terminalType->getBasicType() == EbtBlock) {}
+                else if (strictArraySuffix && blockParent)
                     name.append(TString("[0]"));
-                } else if (strictArraySuffix || baseType.getBasicType() != EbtBlock) {
+                else if (strictArraySuffix || baseType.getBasicType() != EbtBlock) {
                     name.append(TString("[") + String(index) + "]");
 
                     if (offset >= 0)
@@ -320,7 +313,10 @@
                 if (topLevelArrayStride == 0)
                     topLevelArrayStride = stride;
 
-                blockParent = false;
+                // expand top-level arrays in blocks with [0] suffix
+                if (topLevelArrayStride != 0 && visitNode->getLeft()->getType().isArray()) {
+                    blockParent = false;
+                }
                 break;
             }
             case EOpIndexDirectStruct:
@@ -330,6 +326,12 @@
                 if (name.size() > 0)
                     name.append(".");
                 name.append((*visitNode->getLeft()->getType().getStruct())[index].type->getFieldName());
+
+                // expand non top-level arrays with [x] suffix
+                if (visitNode->getLeft()->getType().getBasicType() != EbtBlock && terminalType->isArray())
+                {
+                    blockParent = false;
+                }
                 break;
             default:
                 break;
@@ -349,14 +351,16 @@
                 if (offset >= 0)
                     stride = getArrayStride(baseType, *terminalType);
 
-                if (topLevelArrayStride == 0)
-                    topLevelArrayStride = stride;
-
                 int arrayIterateSize = std::max(terminalType->getOuterArraySize(), 1);
 
                 // for top-level arrays in blocks, only expand [0] to avoid explosion of items
-                if (strictArraySuffix && blockParent)
+                if ((strictArraySuffix && blockParent) ||
+                    ((topLevelArraySize == arrayIterateSize) && (topLevelArrayStride == 0))) {
                     arrayIterateSize = 1;
+                }
+
+                if (topLevelArrayStride == 0)
+                    topLevelArrayStride = stride;
 
                 for (int i = 0; i < arrayIterateSize; ++i) {
                     TString newBaseName = name;
@@ -367,7 +371,7 @@
                         offset = baseOffset + stride * i;
 
                     blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0,
-                                          topLevelArrayStride, baseStorage, active);
+                                          topLevelArraySize, topLevelArrayStride, baseStorage, active);
                 }
             } else {
                 // Visit all members of this aggregate, and for each one,
@@ -396,8 +400,31 @@
                         arrayStride = getArrayStride(baseType, derefType);
                     }
 
-                    blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0,
-                                          arrayStride, baseStorage, active);
+                    if (topLevelArraySize == -1 && arrayStride == 0 && blockParent)
+                        topLevelArraySize = 1;
+
+                    if (strictArraySuffix && blockParent) {
+                        // if this member is an array, store the top-level array stride but start the explosion from
+                        // the inner struct type.
+                        if (derefType.isArray() && derefType.isStruct()) {
+                            newBaseName.append("[0]");
+                            auto dimSize = derefType.isUnsizedArray() ? 0 : derefType.getArraySizes()->getDimSize(0);
+                            blowUpActiveAggregate(TType(derefType, 0), newBaseName, derefs, derefs.end(), memberOffsets[i],
+                                blockIndex, 0, dimSize, arrayStride, terminalType->getQualifier().storage, false);
+                        }
+                        else if (derefType.isArray()) {
+                            auto dimSize = derefType.isUnsizedArray() ? 0 : derefType.getArraySizes()->getDimSize(0);
+                            blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), memberOffsets[i], blockIndex,
+                                0, dimSize, 0, terminalType->getQualifier().storage, false);
+                        }
+                        else {
+                            blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), memberOffsets[i], blockIndex,
+                                0, 1, 0, terminalType->getQualifier().storage, false);
+                        }
+                    } else {
+                        blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0,
+                                              topLevelArraySize, arrayStride, baseStorage, active);
+                    }
                 }
             }
 
@@ -433,6 +460,7 @@
             if ((reflection.options & EShReflectionSeparateBuffers) && terminalType->isAtomic())
                 reflection.atomicCounterUniformIndices.push_back(uniformIndex);
 
+            variables.back().topLevelArraySize = topLevelArraySize;
             variables.back().topLevelArrayStride = topLevelArrayStride;
             
             if ((reflection.options & EShReflectionAllBlockVariables) && active) {
@@ -564,65 +592,17 @@
             if (! anonymous)
                 baseName = blockName;
 
-            if (base->getType().isArray()) {
-                TType derefType(base->getType(), 0);
-
-                assert(! anonymous);
-                for (int e = 0; e < base->getType().getCumulativeArraySize(); ++e)
-                    blockIndex = addBlockName(blockName + "[" + String(e) + "]", derefType,
-                                              intermediate.getBlockSize(base->getType()));
-                baseName.append(TString("[0]"));
-            } else
-                blockIndex = addBlockName(blockName, base->getType(), intermediate.getBlockSize(base->getType()));
+            blockIndex = addBlockName(blockName, base->getType(), intermediate.getBlockSize(base->getType()));
 
             if (reflection.options & EShReflectionAllBlockVariables) {
                 // Use a degenerate (empty) set of dereferences to immediately put as at the end of
                 // the dereference change expected by blowUpActiveAggregate.
                 TList<TIntermBinary*> derefs;
 
-                // because we don't have any derefs, the first thing blowUpActiveAggregate will do is iterate over each
-                // member in the struct definition. This will lose any information about whether the parent was a buffer
-                // block. So if we're using strict array rules which don't expand the first child of a buffer block we
-                // instead iterate over the children here.
-                const bool strictArraySuffix = (reflection.options & EShReflectionStrictArraySuffix);
-                bool blockParent = (base->getType().getBasicType() == EbtBlock && base->getQualifier().storage == EvqBuffer);
-
-                if (strictArraySuffix && blockParent) {
-                    TType structDerefType(base->getType(), 0);
-
-                    const TType &structType = base->getType().isArray() ? structDerefType : base->getType();
-                    const TTypeList& typeList = *structType.getStruct();
-
-                    TVector<int> memberOffsets;
-
-                    memberOffsets.resize(typeList.size());
-                    getOffsets(structType, memberOffsets);
-
-                    for (int i = 0; i < (int)typeList.size(); ++i) {
-                        TType derefType(structType, i);
-                        TString name = baseName;
-                        if (name.size() > 0)
-                            name.append(".");
-                        name.append(typeList[i].type->getFieldName());
-
-                        // if this member is an array, store the top-level array stride but start the explosion from
-                        // the inner struct type.
-                        if (derefType.isArray() && derefType.isStruct()) {
-                            name.append("[0]");
-                            blowUpActiveAggregate(TType(derefType, 0), name, derefs, derefs.end(), memberOffsets[i],
-                                                  blockIndex, 0, getArrayStride(structType, derefType),
-                                                  base->getQualifier().storage, false);
-                        } else {
-                            blowUpActiveAggregate(derefType, name, derefs, derefs.end(), memberOffsets[i], blockIndex,
-                                                  0, 0, base->getQualifier().storage, false);
-                        }
-                    }
-                } else {
-                    // otherwise - if we're not using strict array suffix rules, or this isn't a block so we are
-                    // expanding root arrays anyway, just start the iteration from the base block type.
-                    blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.end(), 0, blockIndex, 0, 0,
+                // otherwise - if we're not using strict array suffix rules, or this isn't a block so we are
+                // expanding root arrays anyway, just start the iteration from the base block type.
+                blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.end(), 0, blockIndex, 0, -1, 0,
                                           base->getQualifier().storage, false);
-                }
             }
         }
 
@@ -653,31 +633,37 @@
             else
                 baseName = base->getName();
         }
-        blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.begin(), offset, blockIndex, arraySize, 0,
+        blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.begin(), offset, blockIndex, arraySize, -1, 0,
                               base->getQualifier().storage, true);
     }
 
     int addBlockName(const TString& name, const TType& type, int size)
     {
-        TReflection::TMapIndexToReflection& blocks = reflection.GetBlockMapForStorage(type.getQualifier().storage);
-
         int blockIndex;
-        TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name.c_str());
-        if (reflection.nameToIndex.find(name.c_str()) == reflection.nameToIndex.end()) {
-            blockIndex = (int)blocks.size();
-            reflection.nameToIndex[name.c_str()] = blockIndex;
-            blocks.push_back(TObjectReflection(name.c_str(), type, -1, -1, size, -1));
+        if (type.isArray()) {
+            TType derefType(type, 0);
+            for (int e = 0; e < type.getOuterArraySize(); ++e) {
+                int memberBlockIndex = addBlockName(name + "[" + String(e) + "]", derefType, size);
+                if (e == 0)
+                    blockIndex = memberBlockIndex;
+            }
+        } else {
+            TReflection::TMapIndexToReflection& blocks = reflection.GetBlockMapForStorage(type.getQualifier().storage);
 
-            blocks.back().numMembers = countAggregateMembers(type);
+            TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name.c_str());
+            if (reflection.nameToIndex.find(name.c_str()) == reflection.nameToIndex.end()) {
+                blockIndex = (int)blocks.size();
+                reflection.nameToIndex[name.c_str()] = blockIndex;
+                blocks.push_back(TObjectReflection(name.c_str(), type, -1, -1, size, blockIndex));
 
-            if (updateStageMasks) {
+                blocks.back().numMembers = countAggregateMembers(type);
+
                 EShLanguageMask& stages = blocks.back().stages;
                 stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
             }
-        } else {
-            blockIndex = it->second;
+            else {
+                blockIndex = it->second;
 
-            if (updateStageMasks) {
                 EShLanguageMask& stages = blocks[blockIndex].stages;
                 stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
             }
@@ -1064,7 +1050,7 @@
 {
     if (base->getQualifier().storage == EvqUniform) {
         if (base->getBasicType() == EbtBlock) {
-            if (reflection.options & EShReflectionSharedStd140Blocks) {
+            if (reflection.options & EShReflectionSharedStd140UBO) {
                 addUniform(*base);
             }
         } else {
@@ -1072,6 +1058,13 @@
         }
     }
 
+    // #TODO add std140/layout active rules for ssbo, same with ubo.
+    // Storage buffer blocks will be collected and expanding in this part.
+    if((reflection.options & EShReflectionSharedStd140SSBO) &&
+       (base->getQualifier().storage == EvqBuffer && base->getBasicType() == EbtBlock &&
+        (base->getQualifier().layoutPacking == ElpStd140 || base->getQualifier().layoutPacking == ElpShared)))
+        addUniform(*base);
+
     if ((intermediate.getStage() == reflection.firstStage && base->getQualifier().isPipeInput()) ||
         (intermediate.getStage() == reflection.lastStage && base->getQualifier().isPipeOutput()))
         addPipeIOVariable(*base);
@@ -1182,15 +1175,23 @@
                 TIntermAggregate* linkerObjects = sequnence->getAsAggregate();
                 for (auto& sequnence : linkerObjects->getSequence()) {
                     auto pNode = sequnence->getAsSymbolNode();
-                    if (pNode != nullptr && pNode->getQualifier().storage == EvqUniform &&
-                        (options & EShReflectionSharedStd140Blocks)) {
-                        if (pNode->getBasicType() == EbtBlock) {
+                    if (pNode != nullptr) {
+                        if ((pNode->getQualifier().storage == EvqUniform &&
+                            (options & EShReflectionSharedStd140UBO)) ||
+                           (pNode->getQualifier().storage == EvqBuffer &&
+                            (options & EShReflectionSharedStd140SSBO))) {
                             // collect std140 and shared uniform block form AST
-                            if (pNode->getQualifier().layoutPacking == ElpStd140 ||
-                                pNode->getQualifier().layoutPacking == ElpShared) {
-                                pNode->traverse(&it);
+                            if ((pNode->getBasicType() == EbtBlock) &&
+                                ((pNode->getQualifier().layoutPacking == ElpStd140) ||
+                                 (pNode->getQualifier().layoutPacking == ElpShared))) {
+                                   pNode->traverse(&it);
                             }
                         }
+                        else if ((options & EShReflectionAllIOVariables) &&
+                            (pNode->getQualifier().isPipeInput() || pNode->getQualifier().isPipeOutput()))
+                        {
+                            pNode->traverse(&it);
+                        }
                     }
                 }
             } else {
diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt
index 9994314..354a3e9 100644
--- a/glslang/OSDependent/Unix/CMakeLists.txt
+++ b/glslang/OSDependent/Unix/CMakeLists.txt
@@ -1,3 +1,36 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 add_library(OSDependent STATIC ossource.cpp ../osinclude.h)
 set_property(TARGET OSDependent PROPERTY FOLDER glslang)
 set_property(TARGET OSDependent PROPERTY POSITION_INDEPENDENT_CODE ON)
diff --git a/glslang/OSDependent/Web/CMakeLists.txt b/glslang/OSDependent/Web/CMakeLists.txt
index 697b0b7..0f60dbc 100644
--- a/glslang/OSDependent/Web/CMakeLists.txt
+++ b/glslang/OSDependent/Web/CMakeLists.txt
@@ -1,3 +1,36 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 if(ENABLE_GLSLANG_JS)
     add_executable(glslang.js "glslang.js.cpp")
     glslang_set_link_args(glslang.js)
diff --git a/glslang/OSDependent/Windows/CMakeLists.txt b/glslang/OSDependent/Windows/CMakeLists.txt
index c050ef6..9cf1b7f 100644
--- a/glslang/OSDependent/Windows/CMakeLists.txt
+++ b/glslang/OSDependent/Windows/CMakeLists.txt
@@ -1,3 +1,36 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 set(SOURCES ossource.cpp ../osinclude.h)
 
 add_library(OSDependent STATIC ${SOURCES})
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index 5b63ff7..e3909f6 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -44,16 +44,25 @@
 #include <vector>
 
 #ifdef _WIN32
-#define C_DECL __cdecl
-//#ifdef SH_EXPORTING
-//    #define SH_IMPORT_EXPORT __declspec(dllexport)
-//#else
-//    #define SH_IMPORT_EXPORT __declspec(dllimport)
-//#endif
-#define SH_IMPORT_EXPORT
+    #define C_DECL __cdecl
 #else
-#define SH_IMPORT_EXPORT
-#define C_DECL
+    #define C_DECL
+#endif
+
+#ifdef GLSLANG_IS_SHARED_LIBRARY
+    #ifdef _WIN32
+        #ifdef GLSLANG_EXPORTING
+            #define GLSLANG_EXPORT __declspec(dllexport)
+        #else
+            #define GLSLANG_EXPORT __declspec(dllimport)
+        #endif
+    #elif __GNUC__ >= 4
+        #define GLSLANG_EXPORT __attribute__((visibility("default")))
+    #endif
+#endif // GLSLANG_IS_SHARED_LIBRARY
+
+#ifndef GLSLANG_EXPORT
+#define GLSLANG_EXPORT
 #endif
 
 //
@@ -65,22 +74,17 @@
     extern "C" {
 #endif
 
-// This should always increase, as some paths to do not consume
-// a more major number.
-// It should increment by one when new functionality is added.
-#define GLSLANG_MINOR_VERSION 14
-
 //
 // Call before doing any other compiler/linker operations.
 //
 // (Call once per process, not once per thread.)
 //
-SH_IMPORT_EXPORT int ShInitialize();
+GLSLANG_EXPORT int ShInitialize();
 
 //
 // Call this at process shutdown to clean up memory.
 //
-SH_IMPORT_EXPORT int ShFinalize();
+GLSLANG_EXPORT int ShFinalize();
 
 //
 // Types of languages the compiler can consume.
@@ -205,7 +209,7 @@
     TTarget target;           // what to generate
 };
 
-const char* StageName(EShLanguage);
+GLSLANG_EXPORT const char* StageName(EShLanguage);
 
 } // end namespace glslang
 
@@ -255,7 +259,7 @@
     EShMsgDebugInfo        = (1 << 10), // save debug information
     EShMsgHlslEnable16BitTypes  = (1 << 11), // enable use of 16-bit types in SPIR-V for HLSL
     EShMsgHlslLegalization  = (1 << 12), // enable HLSL Legalization messages
-    EShMsgHlslDX9Compatible = (1 << 13), // enable HLSL DX9 compatible mode (right now only for samplers)
+    EShMsgHlslDX9Compatible = (1 << 13), // enable HLSL DX9 compatible mode (for samplers and semantics)
     EShMsgBuiltinSymbolTable = (1 << 14), // print the builtin symbol table
     LAST_ELEMENT_MARKER(EShMsgCount),
 };
@@ -271,7 +275,9 @@
     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
-    EShReflectionSharedStd140Blocks = (1 << 6), // Apply std140/shared rules for ubo to ssbo
+    EShReflectionAllIOVariables     = (1 << 6), // reflect all input/output variables, even if they are inactive
+    EShReflectionSharedStd140SSBO   = (1 << 7), // Apply std140/shared rules for ubo to ssbo
+    EShReflectionSharedStd140UBO    = (1 << 8), // Apply std140/shared rules for ubo to ssbo
     LAST_ELEMENT_MARKER(EShReflectionCount),
 } EShReflectionOptions;
 
@@ -304,10 +310,10 @@
 // Driver calls these to create and destroy compiler/linker
 // objects.
 //
-SH_IMPORT_EXPORT ShHandle ShConstructCompiler(const EShLanguage, int debugOptions);  // one per shader
-SH_IMPORT_EXPORT ShHandle ShConstructLinker(const EShExecutable, int debugOptions);  // one per shader pair
-SH_IMPORT_EXPORT ShHandle ShConstructUniformMap();                 // one per uniform namespace (currently entire program object)
-SH_IMPORT_EXPORT void ShDestruct(ShHandle);
+GLSLANG_EXPORT ShHandle ShConstructCompiler(const EShLanguage, int debugOptions);  // one per shader
+GLSLANG_EXPORT ShHandle ShConstructLinker(const EShExecutable, int debugOptions);  // one per shader pair
+GLSLANG_EXPORT ShHandle ShConstructUniformMap();                 // one per uniform namespace (currently entire program object)
+GLSLANG_EXPORT void ShDestruct(ShHandle);
 
 //
 // The return value of ShCompile is boolean, non-zero indicating
@@ -316,7 +322,7 @@
 // The info-log should be written by ShCompile into
 // ShHandle, so it can answer future queries.
 //
-SH_IMPORT_EXPORT int ShCompile(
+GLSLANG_EXPORT int ShCompile(
     const ShHandle,
     const char* const shaderStrings[],
     const int numStrings,
@@ -329,7 +335,7 @@
     EShMessages messages = EShMsgDefault // warnings and errors
     );
 
-SH_IMPORT_EXPORT int ShLinkExt(
+GLSLANG_EXPORT int ShLinkExt(
     const ShHandle,               // linker object
     const ShHandle h[],           // compiler objects to link together
     const int numHandles);
@@ -338,26 +344,26 @@
 // ShSetEncrpytionMethod is a place-holder for specifying
 // how source code is encrypted.
 //
-SH_IMPORT_EXPORT void ShSetEncryptionMethod(ShHandle);
+GLSLANG_EXPORT void ShSetEncryptionMethod(ShHandle);
 
 //
 // All the following return 0 if the information is not
 // available in the object passed down, or the object is bad.
 //
-SH_IMPORT_EXPORT const char* ShGetInfoLog(const ShHandle);
-SH_IMPORT_EXPORT const void* ShGetExecutable(const ShHandle);
-SH_IMPORT_EXPORT int ShSetVirtualAttributeBindings(const ShHandle, const ShBindingTable*);   // to detect user aliasing
-SH_IMPORT_EXPORT int ShSetFixedAttributeBindings(const ShHandle, const ShBindingTable*);     // to force any physical mappings
+GLSLANG_EXPORT const char* ShGetInfoLog(const ShHandle);
+GLSLANG_EXPORT const void* ShGetExecutable(const ShHandle);
+GLSLANG_EXPORT int ShSetVirtualAttributeBindings(const ShHandle, const ShBindingTable*);   // to detect user aliasing
+GLSLANG_EXPORT int ShSetFixedAttributeBindings(const ShHandle, const ShBindingTable*);     // to force any physical mappings
 //
 // Tell the linker to never assign a vertex attribute to this list of physical attributes
 //
-SH_IMPORT_EXPORT int ShExcludeAttributes(const ShHandle, int *attributes, int count);
+GLSLANG_EXPORT int ShExcludeAttributes(const ShHandle, int *attributes, int count);
 
 //
 // Returns the location ID of the named uniform.
 // Returns -1 if error.
 //
-SH_IMPORT_EXPORT int ShGetUniformLocation(const ShHandle uniformMap, const char* name);
+GLSLANG_EXPORT int ShGetUniformLocation(const ShHandle uniformMap, const char* name);
 
 #ifdef __cplusplus
     }  // end extern "C"
@@ -388,19 +394,27 @@
 
 namespace glslang {
 
-const char* GetEsslVersionString();
-const char* GetGlslVersionString();
-int GetKhronosToolId();
+struct Version {
+    int major;
+    int minor;
+    int patch;
+    const char* flavor;
+};
+
+GLSLANG_EXPORT Version GetVersion();
+GLSLANG_EXPORT const char* GetEsslVersionString();
+GLSLANG_EXPORT const char* GetGlslVersionString();
+GLSLANG_EXPORT int GetKhronosToolId();
 
 class TIntermediate;
 class TProgram;
 class TPoolAllocator;
 
 // Call this exactly once per process before using anything else
-bool InitializeProcess();
+GLSLANG_EXPORT bool InitializeProcess();
 
 // Call once per process to tear down everything
-void FinalizeProcess();
+GLSLANG_EXPORT void FinalizeProcess();
 
 // Resource type for IO resolver
 enum TResourceType {
@@ -433,40 +447,41 @@
 //
 class TShader {
 public:
-    explicit TShader(EShLanguage);
-    virtual ~TShader();
-    void setStrings(const char* const* s, int n);
-    void setStringsWithLengths(const char* const* s, const int* l, int n);
-    void setStringsWithLengthsAndNames(
+    GLSLANG_EXPORT explicit TShader(EShLanguage);
+    GLSLANG_EXPORT virtual ~TShader();
+    GLSLANG_EXPORT void setStrings(const char* const* s, int n);
+    GLSLANG_EXPORT void setStringsWithLengths(
+        const char* const* s, const int* l, int n);
+    GLSLANG_EXPORT void setStringsWithLengthsAndNames(
         const char* const* s, const int* l, const char* const* names, int n);
     void setPreamble(const char* s) { preamble = s; }
-    void setEntryPoint(const char* entryPoint);
-    void setSourceEntryPoint(const char* sourceEntryPointName);
-    void addProcesses(const std::vector<std::string>&);
+    GLSLANG_EXPORT void setEntryPoint(const char* entryPoint);
+    GLSLANG_EXPORT void setSourceEntryPoint(const char* sourceEntryPointName);
+    GLSLANG_EXPORT void addProcesses(const std::vector<std::string>&);
 
     // IO resolver binding data: see comments in ShaderLang.cpp
-    void setShiftBinding(TResourceType res, unsigned int base);
-    void setShiftSamplerBinding(unsigned int base);  // DEPRECATED: use setShiftBinding
-    void setShiftTextureBinding(unsigned int base);  // DEPRECATED: use setShiftBinding
-    void setShiftImageBinding(unsigned int base);    // DEPRECATED: use setShiftBinding
-    void setShiftUboBinding(unsigned int base);      // DEPRECATED: use setShiftBinding
-    void setShiftUavBinding(unsigned int base);      // DEPRECATED: use setShiftBinding
-    void setShiftCbufferBinding(unsigned int base);  // synonym for setShiftUboBinding
-    void setShiftSsboBinding(unsigned int base);     // DEPRECATED: use setShiftBinding
-    void setShiftBindingForSet(TResourceType res, unsigned int base, unsigned int set);
-    void setResourceSetBinding(const std::vector<std::string>& base);
-    void setAutoMapBindings(bool map);
-    void setAutoMapLocations(bool map);
-    void addUniformLocationOverride(const char* name, int loc);
-    void setUniformLocationBase(int base);
-    void setInvertY(bool invert);
+    GLSLANG_EXPORT void setShiftBinding(TResourceType res, unsigned int base);
+    GLSLANG_EXPORT void setShiftSamplerBinding(unsigned int base);  // DEPRECATED: use setShiftBinding
+    GLSLANG_EXPORT void setShiftTextureBinding(unsigned int base);  // DEPRECATED: use setShiftBinding
+    GLSLANG_EXPORT void setShiftImageBinding(unsigned int base);    // DEPRECATED: use setShiftBinding
+    GLSLANG_EXPORT void setShiftUboBinding(unsigned int base);      // DEPRECATED: use setShiftBinding
+    GLSLANG_EXPORT void setShiftUavBinding(unsigned int base);      // DEPRECATED: use setShiftBinding
+    GLSLANG_EXPORT void setShiftCbufferBinding(unsigned int base);  // synonym for setShiftUboBinding
+    GLSLANG_EXPORT void setShiftSsboBinding(unsigned int base);     // DEPRECATED: use setShiftBinding
+    GLSLANG_EXPORT void setShiftBindingForSet(TResourceType res, unsigned int base, unsigned int set);
+    GLSLANG_EXPORT void setResourceSetBinding(const std::vector<std::string>& base);
+    GLSLANG_EXPORT void setAutoMapBindings(bool map);
+    GLSLANG_EXPORT void setAutoMapLocations(bool map);
+    GLSLANG_EXPORT void addUniformLocationOverride(const char* name, int loc);
+    GLSLANG_EXPORT void setUniformLocationBase(int base);
+    GLSLANG_EXPORT void setInvertY(bool invert);
 #ifdef ENABLE_HLSL
-    void setHlslIoMapping(bool hlslIoMap);
-    void setFlattenUniformArrays(bool flatten);
+    GLSLANG_EXPORT void setHlslIoMapping(bool hlslIoMap);
+    GLSLANG_EXPORT void setFlattenUniformArrays(bool flatten);
 #endif
-    void setNoStorageFormat(bool useUnknownFormat);
-    void setNanMinMaxClamp(bool nanMinMaxClamp);
-    void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode);
+    GLSLANG_EXPORT void setNoStorageFormat(bool useUnknownFormat);
+    GLSLANG_EXPORT void setNanMinMaxClamp(bool nanMinMaxClamp);
+    GLSLANG_EXPORT void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode);
 
     // For setting up the environment (cleared to nothingness in the constructor).
     // These must be called so that parsing is done for the right source language and
@@ -606,8 +621,10 @@
         virtual void releaseInclude(IncludeResult*) override { }
     };
 
-    bool parse(const TBuiltInResource*, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile,
-               bool forwardCompatible, EShMessages, Includer&);
+    GLSLANG_EXPORT bool parse(
+        const TBuiltInResource*, int defaultVersion, EProfile defaultProfile,
+        bool forceDefaultVersionAndProfile, bool forwardCompatible,
+        EShMessages, Includer&);
 
     bool parse(const TBuiltInResource* res, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile,
                bool forwardCompatible, EShMessages messages)
@@ -630,13 +647,14 @@
 
     // NOTE: Doing just preprocessing to obtain a correct preprocessed shader string
     // is not an officially supported or fully working path.
-    bool preprocess(const TBuiltInResource* builtInResources,
-                    int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile,
-                    bool forwardCompatible, EShMessages message, std::string* outputString,
-                    Includer& includer);
+    GLSLANG_EXPORT bool preprocess(
+        const TBuiltInResource* builtInResources, int defaultVersion,
+        EProfile defaultProfile, bool forceDefaultVersionAndProfile,
+        bool forwardCompatible, EShMessages message, std::string* outputString,
+        Includer& includer);
 
-    const char* getInfoLog();
-    const char* getInfoDebugLog();
+    GLSLANG_EXPORT const char* getInfoLog();
+    GLSLANG_EXPORT const char* getInfoDebugLog();
     EShLanguage getStage() const { return stage; }
     TIntermediate* getIntermediate() const { return intermediate; }
 
@@ -681,11 +699,11 @@
 // Data needed for just a single object at the granularity exchanged by the reflection API
 class TObjectReflection {
 public:
-    TObjectReflection(const std::string& pName, const TType& pType, int pOffset, int pGLDefineType, int pSize, int pIndex);
+    GLSLANG_EXPORT TObjectReflection(const std::string& pName, const TType& pType, int pOffset, int pGLDefineType, int pSize, int pIndex);
 
-    const TType* getType() const { return type; }
-    int getBinding() const;
-    void dump() const;
+    GLSLANG_EXPORT const TType* getType() const { return type; }
+    GLSLANG_EXPORT int getBinding() const;
+    GLSLANG_EXPORT void dump() const;
     static TObjectReflection badReflection() { return TObjectReflection(); }
 
     std::string name;
@@ -696,6 +714,7 @@
     int counterIndex;
     int numMembers;
     int arrayStride;            // stride of an array variable
+    int topLevelArraySize;      // size of the top-level variable in a storage buffer member
     int topLevelArrayStride;    // stride of the top-level variable in a storage buffer member
     EShLanguageMask stages;
 
@@ -799,14 +818,14 @@
 //
 class TProgram {
 public:
-    TProgram();
-    virtual ~TProgram();
+    GLSLANG_EXPORT TProgram();
+    GLSLANG_EXPORT 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();
-    const char* getInfoDebugLog();
+    GLSLANG_EXPORT bool link(EShMessages);
+    GLSLANG_EXPORT const char* getInfoLog();
+    GLSLANG_EXPORT const char* getInfoDebugLog();
 
     TIntermediate* getIntermediate(EShLanguage stage) const { return intermediate[stage]; }
 
@@ -815,24 +834,24 @@
     // Reflection Interface
 
     // call first, to do liveness analysis, index mapping, etc.; returns false on failure
-    bool buildReflection(int opts = EShReflectionDefault);
-    unsigned getLocalSize(int dim) const;                  // return dim'th local size
-    int getReflectionIndex(const char *name) const;
-    int getReflectionPipeIOIndex(const char* name, const bool inOrOut) const;
-    int getNumUniformVariables() const;
-    const TObjectReflection& getUniform(int index) const;
-    int getNumUniformBlocks() const;
-    const TObjectReflection& getUniformBlock(int index) const;
-    int getNumPipeInputs() const;
-    const TObjectReflection& getPipeInput(int index) const;
-    int getNumPipeOutputs() const;
-    const TObjectReflection& getPipeOutput(int index) const;
-    int getNumBufferVariables() const;
-    const TObjectReflection& getBufferVariable(int index) const;
-    int getNumBufferBlocks() const;
-    const TObjectReflection& getBufferBlock(int index) const;
-    int getNumAtomicCounters() const;
-    const TObjectReflection& getAtomicCounter(int index) const;
+    GLSLANG_EXPORT bool buildReflection(int opts = EShReflectionDefault);
+    GLSLANG_EXPORT unsigned getLocalSize(int dim) const;                  // return dim'th local size
+    GLSLANG_EXPORT int getReflectionIndex(const char *name) const;
+    GLSLANG_EXPORT int getReflectionPipeIOIndex(const char* name, const bool inOrOut) const;
+    GLSLANG_EXPORT int getNumUniformVariables() const;
+    GLSLANG_EXPORT const TObjectReflection& getUniform(int index) const;
+    GLSLANG_EXPORT int getNumUniformBlocks() const;
+    GLSLANG_EXPORT const TObjectReflection& getUniformBlock(int index) const;
+    GLSLANG_EXPORT int getNumPipeInputs() const;
+    GLSLANG_EXPORT const TObjectReflection& getPipeInput(int index) const;
+    GLSLANG_EXPORT int getNumPipeOutputs() const;
+    GLSLANG_EXPORT const TObjectReflection& getPipeOutput(int index) const;
+    GLSLANG_EXPORT int getNumBufferVariables() const;
+    GLSLANG_EXPORT const TObjectReflection& getBufferVariable(int index) const;
+    GLSLANG_EXPORT int getNumBufferBlocks() const;
+    GLSLANG_EXPORT const TObjectReflection& getBufferBlock(int index) const;
+    GLSLANG_EXPORT int getNumAtomicCounters() const;
+    GLSLANG_EXPORT const TObjectReflection& getAtomicCounter(int index) const;
 
     // Legacy Reflection Interface - expressed in terms of above interface
 
@@ -899,15 +918,15 @@
     // returns a TType*
     const TType *getAttributeTType(int index) const    { return getPipeInput(index).getType(); }
 
-    void dumpReflection();
+    GLSLANG_EXPORT void dumpReflection();
     // I/O mapping: apply base offsets and map live unbound variables
     // If resolver is not provided it uses the previous approach
     // and respects auto assignment and offsets.
-    bool mapIO(TIoMapResolver* pResolver = nullptr, TIoMapper* pIoMapper = nullptr);
+    GLSLANG_EXPORT bool mapIO(TIoMapResolver* pResolver = nullptr, TIoMapper* pIoMapper = nullptr);
 #endif
 
 protected:
-    bool linkStage(EShLanguage, EShMessages);
+    GLSLANG_EXPORT bool linkStage(EShLanguage, EShMessages);
 
     TPoolAllocator* pool;
     std::list<TShader*> stages[EShLangCount];
diff --git a/glslang/updateGrammar b/glslang/updateGrammar
index 9384db9..9209493 100755
--- a/glslang/updateGrammar
+++ b/glslang/updateGrammar
@@ -1,5 +1,38 @@
 #!/bin/bash
 
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 if [ "$1" = 'web' ]
 then
     m4 -P -DGLSLANG_WEB MachineIndependent/glslang.m4 > MachineIndependent/glslang.y
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index 5004671..7627137 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -234,6 +234,9 @@
         "maxClipDistances.vert",
         "findFunction.frag",
         "constantUnaryConversion.comp",
+        "xfbUnsizedArray.error.vert",
+        "glsl.140.layoutOffset.error.vert",
+        "glsl.430.layoutOffset.error.vert",
         "glsl.450.subgroup.frag",
         "glsl.450.subgroup.geom",
         "glsl.450.subgroup.tesc",
@@ -258,6 +261,7 @@
         "glsl.460.subgroup.rgen",
         "glsl.460.subgroup.rint",
         "glsl.460.subgroup.rmiss",
+        "glsl.es300.layoutOffset.error.vert",
         "glsl.es320.subgroup.frag",
         "glsl.es320.subgroup.geom",
         "glsl.es320.subgroup.tesc",
@@ -285,6 +289,7 @@
     })),
     FileNameAsCustomTestSuffix
 );
+
 // clang-format on
 
 }  // anonymous namespace
diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt
index dc53f5c..6c48d9c 100644
--- a/gtests/CMakeLists.txt
+++ b/gtests/CMakeLists.txt
@@ -1,3 +1,36 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 if(BUILD_TESTING)
     if(TARGET gmock)
         message(STATUS "Google Mock found - building tests")
@@ -27,9 +60,9 @@
                 ${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp)
         endif()
 
-        glslang_pch(TEST_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/pch.cpp)
 
         add_executable(glslangtests ${TEST_SOURCES})
+        glslang_pch(glslangtests ${CMAKE_CURRENT_SOURCE_DIR}/pch.h)
         set_property(TARGET glslangtests PROPERTY FOLDER tests)
         glslang_set_link_args(glslangtests)
         if(ENABLE_GLSLANG_INSTALL)
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 4601bd1..f3ca0b5 100755
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -239,6 +239,7 @@
         {"hlsl.implicitBool.frag", "main"},
         {"hlsl.inf.vert", "main"},
         {"hlsl.inoutquals.frag", "main"},
+        {"hlsl.inoutquals.negative.frag", "main"},
         {"hlsl.init.frag", "ShaderFunction"},
         {"hlsl.init2.frag", "main"},
         {"hlsl.isfinite.frag", "main"},
@@ -278,6 +279,7 @@
         {"hlsl.logical.unary.frag", "main"},
         {"hlsl.loopattr.frag", "main"},
         {"hlsl.matpack-pragma.frag", "main"},
+        {"hlsl.matpack-pragma-global.frag", "main"},
         {"hlsl.mip.operator.frag", "main"},
         {"hlsl.mip.negative.frag", "main"},
         {"hlsl.mip.negative2.frag", "main"},
diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp
index a43edcf..ee868c2 100755
--- a/gtests/Link.FromFile.Vk.cpp
+++ b/gtests/Link.FromFile.Vk.cpp
@@ -75,6 +75,11 @@
     result.linkingOutput = program.getInfoLog();
     result.linkingError = program.getInfoDebugLog();
 
+#ifndef GLSLANG_WEB
+        if (success)
+            program.mapIO();
+#endif
+
     if (success && (controls & EShMsgSpvRules)) {
         spv::SpvBuildLogger logger;
         std::vector<uint32_t> spirv_binary;
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index bfab402..af1409b 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -375,7 +375,9 @@
         "spv.Operations.frag",
         "spv.paramMemory.frag",
         "spv.precision.frag",
+        "spv.precisionArgs.frag",
         "spv.precisionNonESSamp.frag",
+        "spv.precisionTexture.frag",
         "spv.prepost.frag",
         "spv.privateVariableTypes.frag",
         "spv.qualifiers.vert",
@@ -426,6 +428,9 @@
         "spv.specConstant.comp",
         "spv.specConstantComposite.vert",
         "spv.specConstantOperations.vert",
+        "spv.specConstant.float16.comp",
+        "spv.specConstant.int16.comp",
+        "spv.specConstant.int8.comp",
         "spv.storageBuffer.vert",
         "spv.precise.tese",
         "spv.precise.tesc",
@@ -531,6 +536,7 @@
         "spv.1.4.LoopControl.frag",
         "spv.1.4.NonWritable.frag",
         "spv.1.4.OpEntryPoint.frag",
+        "spv.1.4.OpEntryPoint.opaqueParams.vert",
         "spv.1.4.OpSelect.frag",
         "spv.1.4.OpCopyLogical.comp",
         "spv.1.4.OpCopyLogicalBool.comp",
@@ -554,6 +560,7 @@
         "spv.ext.RayGenShader.rgen",
         "spv.ext.RayGenShader11.rgen",
         "spv.ext.RayGenShaderArray.rgen",
+        "spv.ext.World3x4.rahit",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -596,11 +603,16 @@
         "spv.460.vert",
         "spv.460.comp",
         "spv.atomic.comp",
+        "spv.atomicFloat.comp",
+        "spv.atomicFloat_Error.comp",
         "spv.glFragColor.frag",
         "spv.rankShift.comp",
         "spv.specConst.vert",
         "spv.specTexture.frag",
         "spv.OVR_multiview.vert",
+        "spv.uniformInitializer.frag",
+        "spv.uniformInitializerSpecConstant.frag",
+        "spv.uniformInitializerStruct.frag",
         "spv.xfbOffsetOnBlockMembersAssignment.vert",
         "spv.xfbOffsetOnStructMembersAssignment.vert",
         "spv.xfbOverlapOffsetCheckWithBlockAndMember.vert",
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
index 8d2ebd9..c8e72d3 100755
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -253,10 +253,13 @@
         glslang::TProgram program;
         program.addShader(&shader);
         success &= program.link(controls);
-
-        spv::SpvBuildLogger logger;
+#ifndef GLSLANG_WEB
+        if (success)
+            program.mapIO();
+#endif
 
         if (success && (controls & EShMsgSpvRules)) {
+            spv::SpvBuildLogger logger;
             std::vector<uint32_t> spirv_binary;
             options().disableOptimizer = !enableOptimizer;
             options().generateDebugInfo = enableDebug;
@@ -313,7 +316,8 @@
         
         success &= program.link(controls);
 #ifndef GLSLANG_WEB
-        success &= program.mapIO();
+        if (success)
+            program.mapIO();
 #endif
 
         spv::SpvBuildLogger logger;
@@ -356,10 +360,13 @@
         glslang::TProgram program;
         program.addShader(&shader);
         success &= program.link(controls);
-
-        spv::SpvBuildLogger logger;
+#ifndef GLSLANG_WEB
+        if (success)
+            program.mapIO();
+#endif
 
         if (success && (controls & EShMsgSpvRules)) {
+        spv::SpvBuildLogger logger;
             std::vector<uint32_t> spirv_binary;
             glslang::GlslangToSpv(*program.getIntermediate(stage),
                                   spirv_binary, &logger, &options());
diff --git a/gtests/pch.cpp b/gtests/pch.cpp
deleted file mode 100644
index b7a0865..0000000
--- a/gtests/pch.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// Copyright (C) 2018 The Khronos Group Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-//
-//    Redistributions of source code must retain the above copyright
-//    notice, this list of conditions and the following disclaimer.
-//
-//    Redistributions in binary form must reproduce the above
-//    copyright notice, this list of conditions and the following
-//    disclaimer in the documentation and/or other materials provided
-//    with the distribution.
-//
-//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
-//    contributors may be used to endorse or promote products derived
-//    from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-// POSSIBILITY OF SUCH DAMAGE.
-//
-
-#include "pch.h"
diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt
index ae0d4d4..62faa19 100644
--- a/hlsl/CMakeLists.txt
+++ b/hlsl/CMakeLists.txt
@@ -1,25 +1,43 @@
-set(SOURCES
-    hlslAttributes.cpp
-    hlslParseHelper.cpp
-    hlslScanContext.cpp
-    hlslOpMap.cpp
-    hlslTokenStream.cpp
-    hlslGrammar.cpp
-    hlslParseables.cpp)
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
 
-set(HEADERS
-    hlslAttributes.h
-    hlslParseHelper.h
-    hlslTokens.h
-    hlslScanContext.h
-    hlslOpMap.h
-    hlslTokenStream.h
-    hlslGrammar.h
-    hlslParseables.h)
+# The HLSL source is directly embedded into the glslang target when ENABLE_HLSL
+# is set.
+# This source now lives at: glslang/HLSL/
+# The HLSL target is now just a stub that exists for backwards compatibility for
+# projects that referenced this target.
 
-glslang_pch(SOURCES pch.cpp)
-
-add_library(HLSL ${LIB_TYPE} ${SOURCES} ${HEADERS})
+add_library(HLSL ${LIB_TYPE} "stub.cpp")
 set_property(TARGET HLSL PROPERTY FOLDER hlsl)
 set_property(TARGET HLSL PROPERTY POSITION_INDEPENDENT_CODE ON)
 
@@ -27,10 +45,6 @@
     set_target_properties(HLSL PROPERTIES PREFIX "")
 endif()
 
-if(WIN32)
-    source_group("Source" FILES ${SOURCES} ${HEADERS})
-endif(WIN32)
-
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
         install(TARGETS HLSL EXPORT HLSLTargets
diff --git a/hlsl/pch.cpp b/hlsl/stub.cpp
similarity index 77%
rename from hlsl/pch.cpp
rename to hlsl/stub.cpp
index b7a0865..f1d39c1 100644
--- a/hlsl/pch.cpp
+++ b/hlsl/stub.cpp
@@ -1,5 +1,6 @@
 //
-// Copyright (C) 2018 The Khronos Group Inc.
+// Copyright (C) 2020 Google, Inc.
+//
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -14,7 +15,7 @@
 //    disclaimer in the documentation and/or other materials provided
 //    with the distribution.
 //
-//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+//    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.
 //
@@ -32,4 +33,9 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#include "pch.h"
+// The HLSL source is directly embedded into the glslang target when ENABLE_HLSL
+// is set.
+// This source now lives at: glslang/HLSL/
+// The HLSL target is now just a stub that exists for backwards compatibility
+// for projects that referenced this target. As a target requires at least one
+// source file to build, this file acts as that stub.
diff --git a/known_good.json b/known_good.json
index 9846b11..eca209a 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,14 +5,14 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "e128ab0d624ce7beb08eb9656bb260c597a46d0a"
+      "commit" : "895927bd3f2d653f40cebab55aa6c7eabde30a86"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "ac638f1815425403e946d0ab78bac71d2bdbf3be"
+      "commit" : "979924c8bc839e4cb1b69d03d48398551f369ce7"
     }
   ]
 }
diff --git a/kokoro/android-ndk-build/build-docker.sh b/kokoro/android-ndk-build/build-docker.sh
new file mode 100755
index 0000000..2b23b27
--- /dev/null
+++ b/kokoro/android-ndk-build/build-docker.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+set -e # Fail on any error.
+
+. /bin/using.sh # Declare the bash `using` function for configuring toolchains.
+
+set -x # Display commands being run.
+
+using ndk-r21d
+
+export NDK_PROJECT_PATH="${ROOT_DIR}/ndk_test"
+export APP_BUILD_SCRIPT="${ROOT_DIR}/ndk_test/Android.mk"
+
+echo "Building..."
+ndk-build -j
diff --git a/kokoro/android-ndk-build/build.sh b/kokoro/android-ndk-build/build.sh
new file mode 100755
index 0000000..5924f33
--- /dev/null
+++ b/kokoro/android-ndk-build/build.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+set -e # Fail on any error.
+
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd )"
+ROOT_DIR="$( cd "${SCRIPT_DIR}/../.." >/dev/null 2>&1 && pwd )"
+
+docker run --rm -i \
+  --volume "${ROOT_DIR}:${ROOT_DIR}" \
+  --workdir "${ROOT_DIR}" \
+  --env ROOT_DIR="${ROOT_DIR}" \
+  --env SCRIPT_DIR="${SCRIPT_DIR}" \
+  --entrypoint "${SCRIPT_DIR}/build-docker.sh" \
+  "gcr.io/shaderc-build/radial-build:latest"
diff --git a/kokoro/android-ndk-build/continuous.cfg b/kokoro/android-ndk-build/continuous.cfg
new file mode 100644
index 0000000..ee0c4fb
--- /dev/null
+++ b/kokoro/android-ndk-build/continuous.cfg
@@ -0,0 +1,35 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/android-ndk-build/build.sh"
diff --git a/kokoro/android-ndk-build/presubmit.cfg b/kokoro/android-ndk-build/presubmit.cfg
new file mode 100644
index 0000000..16f4fb7
--- /dev/null
+++ b/kokoro/android-ndk-build/presubmit.cfg
@@ -0,0 +1,35 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/android-ndk-build/build.sh"
diff --git a/kokoro/license-check/build-docker.sh b/kokoro/license-check/build-docker.sh
new file mode 100755
index 0000000..41b0592
--- /dev/null
+++ b/kokoro/license-check/build-docker.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+set -e # Fail on any error.
+set -x # Display commands being run.
+
+license-checker --dir="$ROOT_DIR"
diff --git a/kokoro/license-check/build.sh b/kokoro/license-check/build.sh
new file mode 100755
index 0000000..6e9d980
--- /dev/null
+++ b/kokoro/license-check/build.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+set -e # Fail on any error.
+
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd )"
+ROOT_DIR="$( cd "${SCRIPT_DIR}/../.." >/dev/null 2>&1 && pwd )"
+
+docker run --rm -i \
+  --volume "${ROOT_DIR}:${ROOT_DIR}:ro" \
+  --workdir "${ROOT_DIR}" \
+  --env ROOT_DIR="${ROOT_DIR}" \
+  --env SCRIPT_DIR="${SCRIPT_DIR}" \
+  --entrypoint "${SCRIPT_DIR}/build-docker.sh" \
+  "gcr.io/shaderc-build/radial-build:latest"
diff --git a/kokoro/license-check/continuous.cfg b/kokoro/license-check/continuous.cfg
new file mode 100644
index 0000000..1f36031
--- /dev/null
+++ b/kokoro/license-check/continuous.cfg
@@ -0,0 +1,35 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/license-check/build.sh"
diff --git a/kokoro/license-check/presubmit.cfg b/kokoro/license-check/presubmit.cfg
new file mode 100644
index 0000000..4cf9238
--- /dev/null
+++ b/kokoro/license-check/presubmit.cfg
@@ -0,0 +1,35 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/license-check/build.sh"
diff --git a/kokoro/linux-clang-cmake/build-docker.sh b/kokoro/linux-clang-cmake/build-docker.sh
new file mode 100755
index 0000000..c5fdcd2
--- /dev/null
+++ b/kokoro/linux-clang-cmake/build-docker.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+set -e # Fail on any error.
+
+. /bin/using.sh # Declare the bash `using` function for configuring toolchains.
+
+set -x # Display commands being run.
+
+using cmake-3.17.2
+using clang-10.0.0
+using ninja-1.10.0
+
+echo "Building..."
+mkdir /build && cd /build
+
+cmake "$ROOT_DIR" -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS
+ninja install
diff --git a/kokoro/linux-clang-cmake/build.sh b/kokoro/linux-clang-cmake/build.sh
new file mode 100755
index 0000000..53d8291
--- /dev/null
+++ b/kokoro/linux-clang-cmake/build.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+set -e # Fail on any error.
+
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd )"
+ROOT_DIR="$( cd "${SCRIPT_DIR}/../.." >/dev/null 2>&1 && pwd )"
+
+docker run --rm -i \
+  --volume "${ROOT_DIR}:${ROOT_DIR}:ro" \
+  --workdir "${ROOT_DIR}" \
+  --env ROOT_DIR="${ROOT_DIR}" \
+  --env SCRIPT_DIR="${SCRIPT_DIR}" \
+  --env BUILD_SHARED_LIBS="${BUILD_SHARED_LIBS:-0}" \
+  --entrypoint "${SCRIPT_DIR}/build-docker.sh" \
+  "gcr.io/shaderc-build/radial-build:latest"
diff --git a/kokoro/linux-clang-cmake/shared/continuous.cfg b/kokoro/linux-clang-cmake/shared/continuous.cfg
new file mode 100644
index 0000000..e3de7ac
--- /dev/null
+++ b/kokoro/linux-clang-cmake/shared/continuous.cfg
@@ -0,0 +1,40 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/linux-clang-cmake/build.sh"
+
+env_vars {
+  key: "BUILD_SHARED_LIBS"
+  value: "1"
+}
diff --git a/kokoro/linux-clang-cmake/shared/presubmit.cfg b/kokoro/linux-clang-cmake/shared/presubmit.cfg
new file mode 100644
index 0000000..2d2e320
--- /dev/null
+++ b/kokoro/linux-clang-cmake/shared/presubmit.cfg
@@ -0,0 +1,40 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/linux-clang-cmake/build.sh"
+
+env_vars {
+  key: "BUILD_SHARED_LIBS"
+  value: "1"
+}
diff --git a/kokoro/linux-clang-cmake/static/continuous.cfg b/kokoro/linux-clang-cmake/static/continuous.cfg
new file mode 100644
index 0000000..f8f86c3
--- /dev/null
+++ b/kokoro/linux-clang-cmake/static/continuous.cfg
@@ -0,0 +1,40 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/linux-clang-cmake/build.sh"
+
+env_vars {
+  key: "BUILD_SHARED_LIBS"
+  value: "0"
+}
diff --git a/kokoro/linux-clang-cmake/static/presubmit.cfg b/kokoro/linux-clang-cmake/static/presubmit.cfg
new file mode 100644
index 0000000..9f30ddc
--- /dev/null
+++ b/kokoro/linux-clang-cmake/static/presubmit.cfg
@@ -0,0 +1,40 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/linux-clang-cmake/build.sh"
+
+env_vars {
+  key: "BUILD_SHARED_LIBS"
+  value: "0"
+}
diff --git a/kokoro/linux-clang-release-bazel/build.sh b/kokoro/linux-clang-release-bazel/build.sh
index f73162f..190e3d7 100644
--- a/kokoro/linux-clang-release-bazel/build.sh
+++ b/kokoro/linux-clang-release-bazel/build.sh
@@ -56,5 +56,5 @@
 echo $(date): Build completed.
 
 echo $(date): Starting bazel test...
-./bazel-0.29.1-linux-x86_64 test :all
+./bazel-0.29.1-linux-x86_64 test :all --test_output=all
 echo $(date): Bazel test completed.
diff --git a/kokoro/linux-gcc-cmake/build-docker.sh b/kokoro/linux-gcc-cmake/build-docker.sh
new file mode 100755
index 0000000..0edc05e
--- /dev/null
+++ b/kokoro/linux-gcc-cmake/build-docker.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+set -e # Fail on any error.
+
+. /bin/using.sh # Declare the bash `using` function for configuring toolchains.
+
+set -x # Display commands being run.
+
+using cmake-3.17.2
+using gcc-9
+using ninja-1.10.0
+
+echo "Building..."
+mkdir /build && cd /build
+
+cmake "$ROOT_DIR" -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS
+ninja install
diff --git a/kokoro/linux-gcc-cmake/build.sh b/kokoro/linux-gcc-cmake/build.sh
new file mode 100755
index 0000000..53d8291
--- /dev/null
+++ b/kokoro/linux-gcc-cmake/build.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+set -e # Fail on any error.
+
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd )"
+ROOT_DIR="$( cd "${SCRIPT_DIR}/../.." >/dev/null 2>&1 && pwd )"
+
+docker run --rm -i \
+  --volume "${ROOT_DIR}:${ROOT_DIR}:ro" \
+  --workdir "${ROOT_DIR}" \
+  --env ROOT_DIR="${ROOT_DIR}" \
+  --env SCRIPT_DIR="${SCRIPT_DIR}" \
+  --env BUILD_SHARED_LIBS="${BUILD_SHARED_LIBS:-0}" \
+  --entrypoint "${SCRIPT_DIR}/build-docker.sh" \
+  "gcr.io/shaderc-build/radial-build:latest"
diff --git a/kokoro/linux-gcc-cmake/shared/continuous.cfg b/kokoro/linux-gcc-cmake/shared/continuous.cfg
new file mode 100644
index 0000000..0bbc221
--- /dev/null
+++ b/kokoro/linux-gcc-cmake/shared/continuous.cfg
@@ -0,0 +1,40 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/linux-gcc-cmake/build.sh"
+
+env_vars {
+  key: "BUILD_SHARED_LIBS"
+  value: "1"
+}
diff --git a/kokoro/linux-gcc-cmake/shared/presubmit.cfg b/kokoro/linux-gcc-cmake/shared/presubmit.cfg
new file mode 100644
index 0000000..9f5f03e
--- /dev/null
+++ b/kokoro/linux-gcc-cmake/shared/presubmit.cfg
@@ -0,0 +1,40 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/linux-gcc-cmake/build.sh"
+
+env_vars {
+  key: "BUILD_SHARED_LIBS"
+  value: "1"
+}
diff --git a/kokoro/linux-gcc-cmake/static/continuous.cfg b/kokoro/linux-gcc-cmake/static/continuous.cfg
new file mode 100644
index 0000000..07a9e7e
--- /dev/null
+++ b/kokoro/linux-gcc-cmake/static/continuous.cfg
@@ -0,0 +1,40 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/linux-gcc-cmake/build.sh"
+
+env_vars {
+  key: "BUILD_SHARED_LIBS"
+  value: "0"
+}
diff --git a/kokoro/linux-gcc-cmake/static/presubmit.cfg b/kokoro/linux-gcc-cmake/static/presubmit.cfg
new file mode 100644
index 0000000..cbdf061
--- /dev/null
+++ b/kokoro/linux-gcc-cmake/static/presubmit.cfg
@@ -0,0 +1,40 @@
+# Copyright (C) 2020 Google, Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of Google Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/linux-gcc-cmake/build.sh"
+
+env_vars {
+  key: "BUILD_SHARED_LIBS"
+  value: "0"
+}
diff --git a/kokoro/macos-clang-release-bazel/build.sh b/kokoro/macos-clang-release-bazel/build.sh
index cc51fad..8f1b251 100644
--- a/kokoro/macos-clang-release-bazel/build.sh
+++ b/kokoro/macos-clang-release-bazel/build.sh
@@ -56,5 +56,5 @@
 echo $(date): Build completed.
 
 echo $(date): Starting bazel test...
-./bazel-0.29.1-darwin-x86_64 test :all
+./bazel-0.29.1-darwin-x86_64 test :all --test_output=all
 echo $(date): Bazel test completed.
diff --git a/kokoro/windows-msvc-2015-release-bazel/build.bat b/kokoro/windows-msvc-2015-release-bazel/build.bat
index 1a1557c..fb2009b 100644
--- a/kokoro/windows-msvc-2015-release-bazel/build.bat
+++ b/kokoro/windows-msvc-2015-release-bazel/build.bat
@@ -67,7 +67,7 @@
 :: Run the tests
 :: ##############
 echo "Running Tests... %DATE% %TIME%"
-bazel.exe test :all
+bazel.exe test :all --test_output=all
 if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL%
 echo "Tests Completed %DATE% %TIME%"
 
diff --git a/license-checker.cfg b/license-checker.cfg
new file mode 100644
index 0000000..886b335
--- /dev/null
+++ b/license-checker.cfg
@@ -0,0 +1,51 @@
+[

+    {

+        "licenses": [

+            "Apache-2.0-Header",

+            "BSD-2-Clause",

+            "BSD-3-Clause",

+            "MIT-0",

+            "MIT"

+        ],

+        "paths": [

+            {

+                "exclude": [

+                    "**.md",

+

+                    "_config.yml",

+                    ".*",

+                    "CMakeSettings.json",

+                    "known_good_khr.json",

+                    "known_good.json",

+                    "LICENSE.txt",

+                    "make-revision",

+                    "README-spirv-remap.txt",

+                    "WORKSPACE",

+

+                    "glslang/OSDependent/Web/glslang.*.js",

+                    "glslang/MachineIndependent/glslang_tab.cpp",

+                    "glslang/MachineIndependent/glslang_tab.cpp.h",

+

+                    "build/**",

+                    "out/**",

+                    "Test/**",

+                    "External/spirv-tools/**"

+                ]

+            }

+        ]

+    },

+    {

+        "licenses": [

+            "GPL-Header"

+        ],

+        "paths": [

+            { "exclude": [ "**" ] },

+            {

+                "include": [

+                    "glslang/MachineIndependent/glslang_tab.cpp",

+                    "glslang/MachineIndependent/glslang_tab.cpp.h"

+                ]

+            }

+        ]

+    }

+]

diff --git a/make-revision b/make-revision
deleted file mode 100755
index a89ff08..0000000
--- a/make-revision
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-(
-echo "// This header is generated by the make-revision script."
-echo
-echo \#define GLSLANG_PATCH_LEVEL `git log --oneline | wc -l`
-) > glslang/Include/revision.h
diff --git a/ndk_test/Android.mk b/ndk_test/Android.mk
index bcf82dd..b1b2207 100644
--- a/ndk_test/Android.mk
+++ b/ndk_test/Android.mk
@@ -1,3 +1,36 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 LOCAL_PATH:= $(call my-dir)
 
 include $(CLEAR_VARS)
diff --git a/ndk_test/jni/Application.mk b/ndk_test/jni/Application.mk
index d7ccd34..07b7615 100644
--- a/ndk_test/jni/Application.mk
+++ b/ndk_test/jni/Application.mk
@@ -1,5 +1,38 @@
+# Copyright (C) 2020 The Khronos Group Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#    Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#    Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials provided
+#    with the distribution.
+#
+#    Neither the name of The Khronos Group Inc. nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
 APP_ABI := all
 APP_BUILD_SCRIPT := Android.mk
-APP_STL := gnustl_static
+APP_STL := c++_static
 APP_PLATFORM := android-9
 NDK_TOOLCHAIN_VERSION := 4.9