Merge remote-tracking branch 'aosp/upstream-master' into update-shaderc

Includes:
5e634c89 Enable generation of compile_commands.json (#1938)
f57feff7 Fix the exports of glslang-default-resource-limits (#1942)
e7db8f40 Merge pull request #1941 from ehsannas/bazel_build
d3f3f01c Run tests on Windows too.
2398b216 Fix build scripts.
af7991e0 More cleanups for Windows.
8b11dfe1 Add Kokoro bots for building using Bazel.
dccaa59c Make it work on Windows.
834ee546 Merge pull request #1937 from jeffbolznv/volatile_atomics
016ddee8 Only apply volatile semantics to atomics when using Vulkan Memory Model
0608b9d6 Add Bazel build configuration files.
a959deb0 Merge pull request #1933 from dj2/runtest
3290d380 Use commandline options instead of ENV variables
9e4f6d03 Merge pull request #1932 from zoddicus/anotherSemiColonFix
62202427 Keep code style improvements
e3dd69b8 Merge pull request #1934 from durswd/master
7d623e1c Indenting
0f98465f Update CMakeLists.txt
3f072e15 Move TARGETDIR as well
16720143 Make runtests configurable.
1aeceaea Fix config issues and revert previous fixes for semi-colon issues
05398232 Added an option to make pch enabled in Cmake
b03e4fc4 Merge pull request #1866 from rumblehhh/master
8ba49b86 Merge pull request #1930 from ux3d/fix/CMakeOptionalExternalBuild
03be018a find Python and add External subdir only if BUILD_EXTERNAL option was set (on by default) and /External dir exists
765cee84 GLSL/SPV: Pre SPIR-V 1.5, subgroupQuadBroadcast index must be constant
101ca388 Merge pull request #1880 from georgeouzou/master
469d27f2 Merge pull request #1928 from Xottab-DUTY/patch-1
01a50473 remove redundant check
3c8b4daa Fixed typo in README.md
a1002588 Merge pull request #1926 from zoddicus/fixChromiumRoll
41261d95 Forgot that GCC doesn't recognize this flag
7c9accb6 Remove unnecessary semi-colons and add warning about them
69670380 Merge pull request #1888 from Roy-AMD/Adjusting-code-interface
f99beb50 Merge pull request #1925 from greg-lunarg/kg107
ee8e9c15 Fix #1924: Promote SPV_EXT_physical_storage_buffer to KHR when required.
39ced690 Update spirv-tools known good.
1ff0c181 Fix #1924: Emit SPV_EXT_physical_storage_buffer, not the KHR form.
4b97a110 Merge pull request #1919 from dj2/install_spirv
78ba2510 single line
c13e0f1e Update appveyor and travis files
7b0e2363 Move install directory for SPIRV/ folder.
135e3e35 Merge pull request #1918 from KhronosGroup/format-attributes
8a97d389 HLSL: Fix #1912: add attribute syntax for nonreadable/nonwritable
2d9b0a35 HLSL: Fix #1912: add attribute syntax for overriding image formats.
7bc04732 Merge pull request #1906 from ShchchowAMD/master
973d0e53 Merge pull request #1910 from KhronosGroup/fix-1900-const-nonuniform
c2fafea9 GLSL/SPV: Fix #1900: Drop const on literal when doing an object copy.
f7a48b15 Merge pull request #1907 from kainino0x/separate-web-and-emscripten
caca1d1c Merge pull request #1905 from KhronosGroup/GL_EXT_buffer_reference_uvec2
90e402f4 SPV_KHR_physical_storage_buffer/SPV: Add GL_EXT_buffer_reference_uvec2
4b5159ea Merge pull request #1908 from digit-google/fuchsia-fixes
9d43c7f3 Fix Fuchsia build.
d0848b72 Merge branch 'master' into separate-web-and-emscripten
230117a0 use custom es6 modularization instead of MODULARIZE=1
4391924a Separate GLSLANG_WEB (min-size build) and Emscripten options
e0932f67 README: Fix WASM typos.
54c72c6d HLSL: Fix #1903 Catch 0-argument case to constructors.
f4b2ba2c Reflection will crash when the VS input symbol defines the same name with FS output symbol
e4e56bcf Merge pull request #1902 from jeffbolznv/extended_types
c5b669e0 Add GL_EXT_shader_subgroup_extended_types support
be467db7 Merge pull request #1899 from KhronosGroup/SPIR-V_1.5
f766faba GLSL: Only require constant for subgroupBroadcast when SPV < 1.5.
8317e6c6 SPV: Support SPIR-V 1.5; five extensions no longer need OpExtension.
8b8adf79 Merge pull request #1894 from ShchchowAMD/master
352e668a Add flags for local size values ( compute shader )
aaff6cdd SPV 1.5: Switch to the 1.5 header, for SPIR-V 1.5.
fe0b2bd6 Merge pull request #1897 from dj2/unused
fdd13ca1 Merge pull request #1895 from amdrexu/bugfix
23e9f5ca Comment out params instead of removing
24a5d23d Remove unused params
3b1b9e29 Fix incorrect function prototypes of 64-bit findLSB/findMSB
35dabea7 Fix code style issue and remove setXfbBufferStride new paramte
b69e8f3a Adjusting code interface
d2b24ae5 Add support for GL_ARB_explicit_uniform_location
c6f7294c Handle install vs build include directories
ab6d1499 Export glslang targets on installation

Change-Id: I88c0a68c022f83120a5ca4ce5cc4352939185e75
Testing: checkbuild.py on Linux; unit tests on Windows
(cherry picked from commit c263ce53d9b3918067c92ed97f1930159e34c3f9)
diff --git a/.appveyor.yml b/.appveyor.yml
index e7c4282..32e8f2b 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -66,7 +66,6 @@
     bin\glslangValidator.exe
     bin\spirv-remap.exe
     include\glslang\*
-    include\SPIRV\*
     lib\glslang%SUFFIX%.lib
     lib\HLSL%SUFFIX%.lib
     lib\OGLCompiler%SUFFIX%.lib
diff --git a/.travis.yml b/.travis.yml
index 2478912..1fa3fc0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -99,7 +99,6 @@
       zip ${TARBALL}
         bin/glslangValidator
         include/glslang/*
-        include/SPIRV/*
         lib/libglslang${SUFFIX}.a
         lib/libHLSL${SUFFIX}.a
         lib/libOGLCompiler${SUFFIX}.a
diff --git a/BUILD.bazel b/BUILD.bazel
new file mode 100644
index 0000000..b1a1967
--- /dev/null
+++ b/BUILD.bazel
@@ -0,0 +1,245 @@
+package(
+    default_visibility = ["//visibility:public"],
+)
+
+# Description:
+#
+# Khronos reference front-end for GLSL and ESSL, and sample SPIR-V generator.
+
+licenses(["notice"])  # Mixed: BSD, MIT, Khronos, Apache 2.0
+
+exports_files(["LICENSE"])
+
+COMMON_COPTS = select({
+    "@bazel_tools//src/conditions:windows": [""],
+    "//conditions:default": [
+        "-Wall",
+        "-Wuninitialized",
+        "-Wunused",
+        "-Wunused-local-typedefs",
+        "-Wunused-parameter",
+        "-Wunused-value",
+        "-Wunused-variable",
+        "-Wno-reorder",
+        "-std=c++11",
+        "-fvisibility=hidden",
+        "-fvisibility-inlines-hidden",
+        "-fno-exceptions",
+        "-fno-rtti",
+    ],
+})
+
+cc_library(
+    name = "glslang",
+    srcs = glob(
+        [
+            "glslang/GenericCodeGen/*.cpp",
+            "glslang/MachineIndependent/*.cpp",
+            "glslang/MachineIndependent/preprocessor/*.cpp",
+            "hlsl/*.cpp",
+        ],
+        exclude = [
+            "glslang/MachineIndependent/pch.cpp",
+            "glslang/MachineIndependent/pch.h",
+            "hlsl/pch.cpp",
+            "hlsl/pch.h",
+        ],
+    ) + [
+        "OGLCompilersDLL/InitializeDll.cpp",
+    ] + select({
+        "@bazel_tools//src/conditions:windows":
+            ["glslang/OSDependent/Windows/ossource.cpp"],
+        "//conditions:default":
+            ["glslang/OSDependent/Unix/ossource.cpp"],
+    }),
+    hdrs = glob([
+        "glslang/Include/*.h",
+        "glslang/MachineIndependent/*.h",
+        "glslang/MachineIndependent/preprocessor/*.h",
+        "hlsl/*.h",
+    ]) + [
+        "OGLCompilersDLL/InitializeDll.h",
+        "StandAlone/DirStackFileIncluder.h",
+        "glslang/OSDependent/osinclude.h",
+        "glslang/Public/ShaderLang.h",
+    ],
+    copts = COMMON_COPTS,
+    defines = [
+        "AMD_EXTENSIONS",
+        "ENABLE_HLSL=0",
+        "ENABLE_OPT=0",
+        "NV_EXTENSIONS",
+    ],
+    linkopts = select({
+        "@bazel_tools//src/conditions:windows": [""],
+        "//conditions:default": ["-lm", "-lpthread"],
+    }),
+    linkstatic = 1,
+)
+
+genrule(
+    name = "export_spirv_headers",
+    srcs = [
+        "SPIRV/GLSL.ext.AMD.h",
+        "SPIRV/GLSL.ext.EXT.h",
+        "SPIRV/GLSL.ext.KHR.h",
+        "SPIRV/GLSL.ext.NV.h",
+        "SPIRV/GLSL.std.450.h",
+        "SPIRV/spirv.hpp",
+    ],
+    outs = [
+        "include/SPIRV/GLSL.ext.AMD.h",
+        "include/SPIRV/GLSL.ext.EXT.h",
+        "include/SPIRV/GLSL.ext.KHR.h",
+        "include/SPIRV/GLSL.ext.NV.h",
+        "include/SPIRV/GLSL.std.450.h",
+        "include/SPIRV/spirv.hpp",
+    ],
+    cmd = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/",
+)
+
+cc_library(
+    name = "SPIRV_headers",
+    hdrs = [":export_spirv_headers"],
+    copts = COMMON_COPTS,
+    includes = [
+        "include",
+        "include/SPIRV",
+    ],
+    linkstatic = 1,
+)
+
+cc_library(
+    name = "SPIRV",
+    srcs = glob(
+        ["SPIRV/*.cpp"],
+        exclude = [
+            "SPIRV/SpvTools.cpp",
+        ],
+    ),
+    hdrs = [
+        "SPIRV/GlslangToSpv.h",
+        "SPIRV/Logger.h",
+        "SPIRV/SPVRemapper.h",
+        "SPIRV/SpvBuilder.h",
+        "SPIRV/SpvTools.h",
+        "SPIRV/bitutils.h",
+        "SPIRV/disassemble.h",
+        "SPIRV/doc.h",
+        "SPIRV/hex_float.h",
+        "SPIRV/spvIR.h",
+    ],
+    copts = COMMON_COPTS,
+    includes = ["SPIRV"],
+    linkopts = select({
+        "@bazel_tools//src/conditions:windows": [""],
+        "//conditions:default": ["-lm"],
+    }),
+    linkstatic = 1,
+    deps = [
+        ":SPIRV_headers",
+        ":glslang",
+    ],
+)
+
+cc_library(
+    name = "glslang-default-resource-limits",
+    srcs = ["StandAlone/ResourceLimits.cpp"],
+    hdrs = ["StandAlone/ResourceLimits.h"],
+    copts = COMMON_COPTS,
+    linkstatic = 1,
+    deps = [":glslang"],
+)
+
+cc_binary(
+    name = "glslangValidator",
+    srcs = [
+        "StandAlone/StandAlone.cpp",
+        "StandAlone/Worklist.h",
+    ],
+    copts = COMMON_COPTS,
+    deps = [
+        ":SPIRV",
+        ":glslang",
+        ":glslang-default-resource-limits",
+    ],
+)
+
+cc_binary(
+    name = "spirv-remap",
+    srcs = ["StandAlone/spirv-remap.cpp"],
+    copts = COMMON_COPTS,
+    deps = [
+        ":SPIRV",
+        ":glslang",
+        ":glslang-default-resource-limits",
+    ],
+)
+
+filegroup(
+    name = "test_files",
+    srcs = glob(
+        ["Test/**"],
+        exclude = [
+            "Test/bump",
+            "Test/glslangValidator",
+            "Test/runtests",
+        ],
+    ),
+)
+
+cc_library(
+    name = "glslang_test_lib",
+    testonly = 1,
+    srcs = [
+        "gtests/HexFloat.cpp",
+        "gtests/Initializer.h",
+        "gtests/Settings.cpp",
+        "gtests/Settings.h",
+        "gtests/TestFixture.cpp",
+        "gtests/TestFixture.h",
+        "gtests/main.cpp",
+    ],
+    copts = COMMON_COPTS,
+    data = [":test_files"],
+    defines = select({
+        # Unfortunately we can't use $(location) in cc_library at the moment.
+        # See https://github.com/bazelbuild/bazel/issues/1023
+        # So we'll specify the path manually.
+        "@bazel_tools//src/conditions:windows":
+            ["GLSLANG_TEST_DIRECTORY='\"../../../../../Test\"'"],
+        "//conditions:default":
+            ["GLSLANG_TEST_DIRECTORY='\"Test\"'"],
+    }),
+    linkstatic = 1,
+    deps = [
+        ":SPIRV",
+        ":glslang",
+        ":glslang-default-resource-limits",
+        "@com_google_googletest//:gtest",
+    ],
+)
+
+GLSLANG_TESTS = glob(
+    ["gtests/*.FromFile.cpp"],
+    # Since we are not building the SPIRV-Tools dependency, the following tests
+    # cannot be performed.
+    exclude = [
+        "gtests/Hlsl.FromFile.cpp",
+        "gtests/Spv.FromFile.cpp",
+    ],
+)
+
+[cc_test(
+    name = test_file.replace("gtests/", "").replace(".FromFile.cpp", "") + "_test",
+    srcs = [test_file],
+    copts = COMMON_COPTS,
+    data = [
+        ":test_files",
+    ],
+    deps = [
+        ":SPIRV",
+        ":glslang",
+        ":glslang_test_lib",
+    ],
+) for test_file in GLSLANG_TESTS]
diff --git a/BUILD.gn b/BUILD.gn
index be9e1ab..77d596e 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -159,7 +159,7 @@
   }
 
   if (is_clang) {
-    cflags_cc = [
+    cflags = [
       "-Wno-extra-semi",
       "-Wno-ignored-qualifiers",
       "-Wno-implicit-fallthrough",
@@ -167,6 +167,7 @@
       "-Wno-sign-compare",
       "-Wno-unused-variable",
       "-Wno-missing-field-initializers",
+      "-Wno-newline-eof",
     ]
   }
   if (is_win && !is_clang) {
@@ -180,6 +181,9 @@
     "${spirv_tools_dir}:spvtools_opt",
     "${spirv_tools_dir}:spvtools_val",
   ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [ "//build/config/compiler:no_chromium_code" ]
 }
 
 source_set("glslang_default_resource_limits_sources") {
@@ -191,6 +195,9 @@
     ":glslang_sources",
   ]
   public_configs = [ ":glslang_public" ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [ "//build/config/compiler:no_chromium_code" ]
 }
 
 executable("glslang_validator") {
@@ -206,6 +213,9 @@
     ":glslang_default_resource_limits_sources",
     ":glslang_sources",
   ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [ "//build/config/compiler:no_chromium_code" ]
 }
 
 executable("spirv-remap") {
@@ -216,4 +226,7 @@
   deps = [
     ":glslang_sources",
   ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [ "//build/config/compiler:no_chromium_code" ]
 }
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 196194d..dcb2d0d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,6 +6,9 @@
 endif()
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 
+# Enable compile commands database
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+
 # Adhere to GNU filesystem layout conventions
 include(GNUInstallDirs)
 
@@ -13,6 +16,7 @@
 include(CMakeDependentOption)
 
 option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
+option(BUILD_EXTERNAL "Build external dependencies in /External" ON)
 
 set(LIB_TYPE STATIC)
 
@@ -28,13 +32,15 @@
 
 option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" ON)
 
-option(ENABLE_GLSLANG_WEB "Reduces glslang to minumum needed for web use" OFF)
-option(ENABLE_EMSCRIPTEN_SINGLE_FILE "If using emscripten, enables SINGLE_FILE build" OFF)
-option(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE "If using emscripten, builds to run on Node instead of Web" OFF)
+option(ENABLE_GLSLANG_WEB "Reduces glslang to minimum needed for web use" OFF)
+option(ENABLE_GLSLANG_WEB_DEVEL "For ENABLE_GLSLANG_WEB builds, enables compilation error messages" OFF)
+option(ENABLE_EMSCRIPTEN_SINGLE_FILE "If using Emscripten, enables SINGLE_FILE build" OFF)
+option(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE "If using Emscripten, builds to run on Node instead of Web" OFF)
 
 CMAKE_DEPENDENT_OPTION(ENABLE_HLSL "Enables HLSL input support" ON "NOT ENABLE_GLSLANG_WEB" OFF)
 
 option(ENABLE_OPT "Enables spirv-opt capability if present" ON)
+option(ENABLE_PCH "Enables Precompiled header" ON)
 
 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
     set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
@@ -50,7 +56,7 @@
 
 # Precompiled header macro. Parameters are source file list and filename for pch cpp file.
 macro(glslang_pch SRCS PCHCPP)
-  if(MSVC AND CMAKE_GENERATOR MATCHES "^Visual Studio")
+  if(MSVC AND CMAKE_GENERATOR MATCHES "^Visual Studio" AND 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}")
@@ -70,6 +76,9 @@
 
 if(ENABLE_GLSLANG_WEB)
     add_definitions(-DGLSLANG_WEB)
+    if(ENABLE_GLSLANG_WEB_DEVEL)
+        add_definitions(-DGLSLANG_WEB_DEVEL)
+    endif(ENABLE_GLSLANG_WEB_DEVEL)
 endif(ENABLE_GLSLANG_WEB)
 
 if(WIN32)
@@ -98,38 +107,29 @@
     add_compile_options(/GR-) # Disable RTTI
 endif()
 
-if(ENABLE_GLSLANG_WEB)
-    if(EMSCRIPTEN)
-        add_compile_options(-Os -fno-exceptions)
-        add_compile_options("SHELL: -s WASM=1")
-        add_compile_options("SHELL: -s WASM_OBJECT_FILES=0")
-        add_link_options(-Os)
-        add_link_options("SHELL: -s FILESYSTEM=0")
-        add_link_options("SHELL: --llvm-lto 1")
-        add_link_options("SHELL: --closure 1")
-        add_link_options("SHELL: -s ALLOW_MEMORY_GROWTH=1")
+if(EMSCRIPTEN)
+    add_compile_options(-Os -fno-exceptions)
+    add_compile_options("SHELL: -s WASM=1")
+    add_compile_options("SHELL: -s WASM_OBJECT_FILES=0")
+    add_link_options(-Os)
+    add_link_options("SHELL: -s FILESYSTEM=0")
+    add_link_options("SHELL: --llvm-lto 1")
+    add_link_options("SHELL: --closure 1")
+    add_link_options("SHELL: -s ALLOW_MEMORY_GROWTH=1")
 
-        add_link_options("SHELL: -s MODULARIZE=1")
-        if(ENABLE_EMSCRIPTEN_SINGLE_FILE)
-            add_link_options("SHELL: -s SINGLE_FILE=1")
-        endif(ENABLE_EMSCRIPTEN_SINGLE_FILE)
-
-        if(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
-            add_link_options("SHELL: -s ENVIRONMENT=node")
-            add_link_options("SHELL: -s BINARYEN_ASYNC_COMPILATION=0")
+    if(ENABLE_EMSCRIPTEN_SINGLE_FILE)
+        add_link_options("SHELL: -s SINGLE_FILE=1")
+    endif(ENABLE_EMSCRIPTEN_SINGLE_FILE)
+else()
+    if(ENABLE_GLSLANG_WEB)
+        if(MSVC)
+            add_compile_options(/Os /GR-)
         else()
-            add_link_options("SHELL: -s ENVIRONMENT=web,worker")
-            add_link_options("SHELL: -s EXPORT_ES6=1")
+            add_compile_options(-Os -fno-exceptions)
+            add_link_options(-Os)
         endif()
-    else()
-      if(MSVC)
-        add_compile_options(/Os /GR-)
-      else()
-        add_compile_options(-Os -fno-exceptions)
-        add_link_options(-Os)
-      endif()
-    endif(EMSCRIPTEN)
-endif(ENABLE_GLSLANG_WEB)
+    endif(ENABLE_GLSLANG_WEB)
+endif(EMSCRIPTEN)
 
 # Request C++11
 if(${CMAKE_VERSION} VERSION_LESS 3.1)
@@ -153,12 +153,12 @@
 
 # CMake needs to find the right version of python, right from the beginning,
 # otherwise, it will find the wrong version and fail later
-if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
+if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
     find_package(PythonInterp 3 REQUIRED)
-endif()
 
-# We depend on these for later projects, so they should come first.
-add_subdirectory(External)
+	# We depend on these for later projects, so they should come first.
+	add_subdirectory(External)
+endif()
 
 if(NOT TARGET SPIRV-Tools-opt)
     set(ENABLE_OPT OFF)
@@ -184,3 +184,26 @@
     add_subdirectory(hlsl)
 endif(ENABLE_HLSL)
 add_subdirectory(gtests)
+
+if(BUILD_TESTING)
+    # glslang-testsuite runs a bash script on Windows.
+    # Make sure to use '-o igncr' flag to ignore carriage returns (\r).
+    set(IGNORE_CR_FLAG "")
+    if(WIN32)
+        set(IGNORE_CR_FLAG -o igncr)
+    endif()
+
+    if (CMAKE_CONFIGURATION_TYPES)
+        set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/localResults)
+        set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIGURATION>/glslangValidator)
+        set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIGURATION>/spirv-remap)
+    else(CMAKE_CONFIGURATION_TYPES)
+        set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/localResults)
+        set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslangValidator)
+        set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/spirv-remap)
+    endif(CMAKE_CONFIGURATION_TYPES)
+
+    add_test(NAME glslang-testsuite
+        COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH}
+        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/)
+endif(BUILD_TESTING)
diff --git a/OGLCompilersDLL/CMakeLists.txt b/OGLCompilersDLL/CMakeLists.txt
index 5bb3f0e..af4ab58 100644
--- a/OGLCompilersDLL/CMakeLists.txt
+++ b/OGLCompilersDLL/CMakeLists.txt
@@ -9,6 +9,7 @@
 endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OGLCompiler
+    install(TARGETS OGLCompiler EXPORT OGLCompilerTargets
             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	install(EXPORT OGLCompilerTargets DESTINATION lib/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/README.md b/README.md
index 427cf5a..f5651e1 100755
--- a/README.md
+++ b/README.md
@@ -166,26 +166,30 @@
 With no arguments it builds the full grammar, and with a "web" argument,
 the web grammar subset (see more about the web subset in the next section).
 
-### WASM for the the Web
+### Building to WASM for the Web and Node
 
-Use the steps in [Build Steps](#build-steps), which following notes/exceptions:
+Use the steps in [Build Steps](#build-steps), with the following notes/exceptions:
 * For building the web subset of core glslang:
-  + `m4` also needs a `-DGLSLANG_WEB` argument, or simply execute `updateGrammar web` from the glslang subdirectory
-  + turn off the CMAKE options for `BUILD_TESTING`, `ENABLE_OPT`, and `INSTALL_GTEST`,
-    while turning on `ENABLE_GLSLANG_WEB`
+  + execute `updateGrammar web` from the glslang subdirectory
+    (or if using your own scripts, `m4` needs a `-DGLSLANG_WEB` argument)
+  + set `-DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF`
+  + turn on `-DENABLE_GLSLANG_WEB=ON`
+  + optionally, for GLSL compilation error messages, turn on `-DENABLE_GLSLANG_WEB_DEVEL=ON`
 * `emsdk` needs to be present in your executable search path, *PATH* for
   Bash-like enivironments
-  + Instructions located
-    [here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install)
-* Do not checkout SPIRV-Tools into `External`
-  + Does not work correctly with emscripten out of the box and we don't want it
-    in the build anyway. *TBD* Have build ignore SPIRV-Tools for web build
-* Wrap call to `cmake` using `emconfigure` with ENABLE_GLSLANG_WEB=ON:
-  + e.g. For Linux, `emconfigure cmake -DCMAKE_BUILD_TYPE=Release
-    -DENABLE_GLSLANG_WEB=ON -DCMAKE_INSTALL_PREFIX="$(pwd)/install" ..`
-* To get a 'true' minimized build, make sure to use `brotli` to compress the .js
+  + [Instructions located
+    here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install)
+* Wrap cmake call: `emcmake cmake`
+* To get a fully minimized build, make sure to use `brotli` to compress the .js
   and .wasm files
 
+Example:
+
+```sh
+emcmake cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_WEB=ON \
+    -DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF ..
+```
+
 Testing
 -------
 
@@ -303,7 +307,7 @@
 details. There is a block comment giving more detail above the calls for
 `setEnvInput, setEnvClient, and setEnvTarget`.
 
-### C Functional Interface (orignal)
+### C Functional Interface (original)
 
 This interface is in roughly the first 2/3 of `ShaderLang.h`, and referred to
 as the `Sh*()` interface, as all the entry points start `Sh`.
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
index 94d2ebe..e25ec0a 100644
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -36,7 +36,9 @@
 add_library(SPIRV ${LIB_TYPE} ${SOURCES} ${HEADERS})
 set_property(TARGET SPIRV PROPERTY FOLDER glslang)
 set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON)
-target_include_directories(SPIRV PUBLIC ..)
+target_include_directories(SPIRV PUBLIC 
+	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
+	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 
 if (ENABLE_SPVREMAPPER)
     add_library(SPVRemapper ${LIB_TYPE} ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
@@ -57,7 +59,9 @@
         PRIVATE ${spirv-tools_SOURCE_DIR}/source
     )
     target_link_libraries(SPIRV glslang SPIRV-Tools-opt)
-    target_include_directories(SPIRV PUBLIC ../External)
+    target_include_directories(SPIRV PUBLIC
+		$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
+		$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
 else()
     target_link_libraries(SPIRV glslang)
 endif(ENABLE_OPT)
@@ -70,22 +74,25 @@
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
         if (ENABLE_SPVREMAPPER)
-            install(TARGETS SPVRemapper
+            install(TARGETS SPVRemapper EXPORT SPVRemapperTargets
                     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
         endif()
-        install(TARGETS SPIRV
+        install(TARGETS SPIRV EXPORT SPIRVTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     else()
         if (ENABLE_SPVREMAPPER)
-            install(TARGETS SPVRemapper
+            install(TARGETS SPVRemapper EXPORT SPVRemapperTargets
                     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
         endif()
-        install(TARGETS SPIRV
+        install(TARGETS SPIRV EXPORT SPIRVTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
+	
+	install(EXPORT SPVRemapperTargets DESTINATION lib/cmake)
+	install(EXPORT SPIRVTargets DESTINATION lib/cmake)
 
-    install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/SPIRV/)
+    install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/SPIRV/)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h
index 1140bef..e58e836 100644
--- a/SPIRV/GLSL.ext.KHR.h
+++ b/SPIRV/GLSL.ext.KHR.h
@@ -41,6 +41,7 @@
 static const char* const E_SPV_KHR_post_depth_coverage          = "SPV_KHR_post_depth_coverage";
 static const char* const E_SPV_KHR_vulkan_memory_model          = "SPV_KHR_vulkan_memory_model";
 static const char* const E_SPV_EXT_physical_storage_buffer      = "SPV_EXT_physical_storage_buffer";
+static const char* const E_SPV_KHR_physical_storage_buffer      = "SPV_KHR_physical_storage_buffer";
 static const char* const E_SPV_EXT_fragment_shader_interlock    = "SPV_EXT_fragment_shader_interlock";
 static const char* const E_SPV_KHR_shader_clock                 = "SPV_KHR_shader_clock";
 
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 2c9fcd8..ae5f24d 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -100,11 +100,11 @@
     spv::Decoration precision;
 
 #ifdef GLSLANG_WEB
-        void addNoContraction(spv::Builder&, spv::Id) const { };
-        void addNonUniform(spv::Builder&, spv::Id) const { };
+        void addNoContraction(spv::Builder&, spv::Id) const { }
+        void addNonUniform(spv::Builder&, spv::Id) const { }
 #else
-        void addNoContraction(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, noContraction); };
-        void addNonUniform(spv::Builder& builder, spv::Id t)  { builder.addDecoration(t, nonUniform); };
+        void addNoContraction(spv::Builder& builder, spv::Id t) { builder.addDecoration(t, noContraction); }
+        void addNonUniform(spv::Builder& builder, spv::Id t)  { builder.addDecoration(t, nonUniform); }
     protected:
         spv::Decoration noContraction;
         spv::Decoration nonUniform;
@@ -217,11 +217,6 @@
     bool isTrivial(const glslang::TIntermTyped* node);
     spv::Id createShortCircuit(glslang::TOperator, glslang::TIntermTyped& left, glslang::TIntermTyped& right);
     spv::Id getExtBuiltins(const char* name);
-    void addPre13Extension(const char* ext)
-    {
-        if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3)
-            builder.addExtension(ext);
-    }
     std::pair<spv::Id, spv::Id> getForcedType(spv::BuiltIn, const glslang::TType&);
     spv::Id translateForcedType(spv::Id object);
     spv::Id createCompositeConstruct(spv::Id typeId, std::vector<spv::Id> constituents);
@@ -517,7 +512,7 @@
 {
 #ifndef GLSLANG_WEB
     if (qualifier.isNonUniform()) {
-        builder.addExtension("SPV_EXT_descriptor_indexing");
+        builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
         builder.addCapability(spv::CapabilityShaderNonUniformEXT);
         return spv::DecorationNonUniformEXT;
     } else
@@ -701,7 +696,7 @@
             glslangIntermediate->getStage() == EShLangTessControl ||
             glslangIntermediate->getStage() == EShLangTessEvaluation) {
 
-            builder.addExtension(spv::E_SPV_EXT_shader_viewport_index_layer);
+            builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
             builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
         }
         return spv::BuiltInViewportIndex;
@@ -726,23 +721,23 @@
             glslangIntermediate->getStage() == EShLangTessControl ||
             glslangIntermediate->getStage() == EShLangTessEvaluation) {
 
-            builder.addExtension(spv::E_SPV_EXT_shader_viewport_index_layer);
+            builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5);
             builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT);
         }
         return spv::BuiltInLayer;
 
     case glslang::EbvBaseVertex:
-        addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
+        builder.addIncorporatedExtension(spv::E_SPV_KHR_shader_draw_parameters, spv::Spv_1_3);
         builder.addCapability(spv::CapabilityDrawParameters);
         return spv::BuiltInBaseVertex;
 
     case glslang::EbvBaseInstance:
-        addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
+        builder.addIncorporatedExtension(spv::E_SPV_KHR_shader_draw_parameters, spv::Spv_1_3);
         builder.addCapability(spv::CapabilityDrawParameters);
         return spv::BuiltInBaseInstance;
 
     case glslang::EbvDrawId:
-        addPre13Extension(spv::E_SPV_KHR_shader_draw_parameters);
+        builder.addIncorporatedExtension(spv::E_SPV_KHR_shader_draw_parameters, spv::Spv_1_3);
         builder.addCapability(spv::CapabilityDrawParameters);
         return spv::BuiltInDrawIndex;
 
@@ -874,12 +869,12 @@
         return spv::BuiltInBaryCoordPullModelAMD;
 
     case glslang::EbvDeviceIndex:
-        addPre13Extension(spv::E_SPV_KHR_device_group);
+        builder.addIncorporatedExtension(spv::E_SPV_KHR_device_group, spv::Spv_1_3);
         builder.addCapability(spv::CapabilityDeviceGroup);
         return spv::BuiltInDeviceIndex;
 
     case glslang::EbvViewIndex:
-        addPre13Extension(spv::E_SPV_KHR_multiview);
+        builder.addIncorporatedExtension(spv::E_SPV_KHR_multiview, spv::Spv_1_3);
         builder.addCapability(spv::CapabilityMultiView);
         return spv::BuiltInViewIndex;
 
@@ -1192,7 +1187,7 @@
     }
 
     if (glslangIntermediate->usingStorageBuffer() && type.getQualifier().storage == glslang::EvqBuffer) {
-        addPre13Extension(spv::E_SPV_KHR_storage_buffer_storage_class);
+        builder.addIncorporatedExtension(spv::E_SPV_KHR_storage_buffer_storage_class, spv::Spv_1_3);
         return spv::StorageClassStorageBuffer;
     }
 
@@ -1253,13 +1248,13 @@
         // assume a dynamically uniform index
         if (baseType.getBasicType() == glslang::EbtSampler) {
             if (baseType.getQualifier().hasAttachment()) {
-                builder.addExtension("SPV_EXT_descriptor_indexing");
+                builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
                 builder.addCapability(spv::CapabilityInputAttachmentArrayDynamicIndexingEXT);
             } else if (baseType.isImage() && baseType.getSampler().isBuffer()) {
-                builder.addExtension("SPV_EXT_descriptor_indexing");
+                builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
                 builder.addCapability(spv::CapabilityStorageTexelBufferArrayDynamicIndexingEXT);
             } else if (baseType.isTexture() && baseType.getSampler().isBuffer()) {
-                builder.addExtension("SPV_EXT_descriptor_indexing");
+                builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
                 builder.addCapability(spv::CapabilityUniformTexelBufferArrayDynamicIndexingEXT);
             }
         }
@@ -1404,13 +1399,13 @@
 
     if (glslangIntermediate->usingPhysicalStorageBuffer()) {
         addressingModel = spv::AddressingModelPhysicalStorageBuffer64EXT;
-        builder.addExtension(spv::E_SPV_EXT_physical_storage_buffer);
+        builder.addIncorporatedExtension(spv::E_SPV_EXT_physical_storage_buffer, spv::Spv_1_5);
         builder.addCapability(spv::CapabilityPhysicalStorageBufferAddressesEXT);
     };
     if (glslangIntermediate->usingVulkanMemoryModel()) {
         memoryModel = spv::MemoryModelVulkanKHR;
         builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
-        builder.addExtension(spv::E_SPV_KHR_vulkan_memory_model);
+        builder.addIncorporatedExtension(spv::E_SPV_KHR_vulkan_memory_model, spv::Spv_1_5);
     }
     builder.setMemoryModel(addressingModel, memoryModel);
 
@@ -3242,11 +3237,11 @@
         switch (storageClass) {
         case spv::StorageClassInput:
         case spv::StorageClassOutput:
-            addPre13Extension(spv::E_SPV_KHR_16bit_storage);
+            builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
             builder.addCapability(spv::CapabilityStorageInputOutput16);
             break;
         case spv::StorageClassUniform:
-            addPre13Extension(spv::E_SPV_KHR_16bit_storage);
+            builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
             if (node->getType().getQualifier().storage == glslang::EvqBuffer)
                 builder.addCapability(spv::CapabilityStorageUniformBufferBlock16);
             else
@@ -3254,12 +3249,12 @@
             break;
 #ifndef GLSLANG_WEB
         case spv::StorageClassPushConstant:
-            addPre13Extension(spv::E_SPV_KHR_16bit_storage);
+            builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
             builder.addCapability(spv::CapabilityStoragePushConstant16);
             break;
         case spv::StorageClassStorageBuffer:
         case spv::StorageClassPhysicalStorageBufferEXT:
-            addPre13Extension(spv::E_SPV_KHR_16bit_storage);
+            builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
             builder.addCapability(spv::CapabilityStorageUniformBufferBlock16);
             break;
 #endif
@@ -3274,13 +3269,13 @@
 
     if (node->getType().contains8BitInt()) {
         if (storageClass == spv::StorageClassPushConstant) {
-            builder.addExtension(spv::E_SPV_KHR_8bit_storage);
+            builder.addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5);
             builder.addCapability(spv::CapabilityStoragePushConstant8);
         } else if (storageClass == spv::StorageClassUniform) {
-            builder.addExtension(spv::E_SPV_KHR_8bit_storage);
+            builder.addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5);
             builder.addCapability(spv::CapabilityUniformAndStorageBuffer8BitAccess);
         } else if (storageClass == spv::StorageClassStorageBuffer) {
-            builder.addExtension(spv::E_SPV_KHR_8bit_storage);
+            builder.addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5);
             builder.addCapability(spv::CapabilityStorageBuffer8BitAccess);
         } else {
             builder.addCapability(spv::CapabilityInt8);
@@ -3537,7 +3532,7 @@
         else {
 #ifndef GLSLANG_WEB
             if (!lastBufferBlockMember) {
-                builder.addExtension("SPV_EXT_descriptor_indexing");
+                builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5);
                 builder.addCapability(spv::CapabilityRuntimeDescriptorArrayEXT);
             }
             spvType = builder.makeRuntimeArray(spvType);
@@ -6278,6 +6273,13 @@
     case glslang::EOpConvPtrToUint64:
         convOp = spv::OpConvertPtrToU;
         break;
+    case glslang::EOpConvPtrToUvec2:
+    case glslang::EOpConvUvec2ToPtr:
+        if (builder.isVector(operand))
+            builder.promoteIncorporatedExtension(spv::E_SPV_EXT_physical_storage_buffer,
+                                                 spv::E_SPV_KHR_physical_storage_buffer, spv::Spv_1_5);
+        convOp = spv::OpBitcast;
+        break;
 #endif
 
     default:
@@ -6399,7 +6401,7 @@
         scopeId = builder.makeUintConstant(spv::ScopeDevice);
     }
     // semantics default to relaxed 
-    spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() ? 
+    spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() && glslangIntermediate->usingVulkanMemoryModel() ?
                                                     spv::MemorySemanticsVolatileMask :
                                                     spv::MemorySemanticsMaskNone);
     spv::Id semanticsId2 = semanticsId;
@@ -6837,8 +6839,9 @@
     default: assert(0 && "Unhandled subgroup operation!");
     }
 
-    const bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
-    const bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
+
+    const bool isUnsigned = isTypeUnsignedInt(typeProxy);
+    const bool isFloat = isTypeFloat(typeProxy);
     const bool isBool = typeProxy == glslang::EbtBool;
 
     spv::Op opCode = spv::OpNop;
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index a99a0c3..55754f6 100644
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -67,6 +67,7 @@
     Spv_1_2 = (1 << 16) | (2 << 8),
     Spv_1_3 = (1 << 16) | (3 << 8),
     Spv_1_4 = (1 << 16) | (4 << 8),
+    Spv_1_5 = (1 << 16) | (5 << 8),
 } SpvVersion;
 
 class Builder {
@@ -105,6 +106,20 @@
     void addModuleProcessed(const std::string& p) { moduleProcesses.push_back(p.c_str()); }
     void setEmitOpLines() { emitOpLines = true; }
     void addExtension(const char* ext) { extensions.insert(ext); }
+    void removeExtension(const char* ext)
+    {
+        extensions.erase(ext);
+    }
+    void addIncorporatedExtension(const char* ext, SpvVersion incorporatedVersion)
+    {
+        if (getSpvVersion() < static_cast<unsigned>(incorporatedVersion))
+            addExtension(ext);
+    }
+    void promoteIncorporatedExtension(const char* baseExt, const char* promoExt, SpvVersion incorporatedVersion)
+    {
+        removeExtension(baseExt);
+        addIncorporatedExtension(promoExt, incorporatedVersion);
+    }
     void addInclude(const std::string& name, const std::string& text)
     {
         spv::Id incId = getStringId(name);
diff --git a/SPIRV/SpvPostProcess.cpp b/SPIRV/SpvPostProcess.cpp
index 18765a3..832ee3e 100644
--- a/SPIRV/SpvPostProcess.cpp
+++ b/SPIRV/SpvPostProcess.cpp
@@ -363,12 +363,12 @@
         Instruction* type = groupedTypes[OpTypePointer][t];
         if (type->getImmediateOperand(0) == (unsigned)StorageClassPhysicalStorageBufferEXT) {
             if (containsType(type->getIdOperand(1), OpTypeInt, 8)) {
-                addExtension(spv::E_SPV_KHR_8bit_storage);
+                addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5);
                 addCapability(spv::CapabilityStorageBuffer8BitAccess);
             }
             if (containsType(type->getIdOperand(1), OpTypeInt, 16) ||
                 containsType(type->getIdOperand(1), OpTypeFloat, 16)) {
-                addExtension(spv::E_SPV_KHR_16bit_storage);
+                addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3);
                 addCapability(spv::CapabilityStorageBuffer16BitAccess);
             }
         }
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index 59fdece..1e96f7b 100644
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -91,6 +91,7 @@
     AddressingModelLogical = 0,
     AddressingModelPhysical32 = 1,
     AddressingModelPhysical64 = 2,
+    AddressingModelPhysicalStorageBuffer64 = 5348,
     AddressingModelPhysicalStorageBuffer64EXT = 5348,
     AddressingModelMax = 0x7fffffff,
 };
@@ -99,6 +100,7 @@
     MemoryModelSimple = 0,
     MemoryModelGLSL450 = 1,
     MemoryModelOpenCL = 2,
+    MemoryModelVulkan = 3,
     MemoryModelVulkanKHR = 3,
     MemoryModelMax = 0x7fffffff,
 };
@@ -183,6 +185,7 @@
     StorageClassHitAttributeNV = 5339,
     StorageClassIncomingRayPayloadNV = 5342,
     StorageClassShaderRecordBufferNV = 5343,
+    StorageClassPhysicalStorageBuffer = 5349,
     StorageClassPhysicalStorageBufferEXT = 5349,
     StorageClassMax = 0x7fffffff,
 };
@@ -311,9 +314,13 @@
     ImageOperandsConstOffsetsShift = 5,
     ImageOperandsSampleShift = 6,
     ImageOperandsMinLodShift = 7,
+    ImageOperandsMakeTexelAvailableShift = 8,
     ImageOperandsMakeTexelAvailableKHRShift = 8,
+    ImageOperandsMakeTexelVisibleShift = 9,
     ImageOperandsMakeTexelVisibleKHRShift = 9,
+    ImageOperandsNonPrivateTexelShift = 10,
     ImageOperandsNonPrivateTexelKHRShift = 10,
+    ImageOperandsVolatileTexelShift = 11,
     ImageOperandsVolatileTexelKHRShift = 11,
     ImageOperandsSignExtendShift = 12,
     ImageOperandsZeroExtendShift = 13,
@@ -330,9 +337,13 @@
     ImageOperandsConstOffsetsMask = 0x00000020,
     ImageOperandsSampleMask = 0x00000040,
     ImageOperandsMinLodMask = 0x00000080,
+    ImageOperandsMakeTexelAvailableMask = 0x00000100,
     ImageOperandsMakeTexelAvailableKHRMask = 0x00000100,
+    ImageOperandsMakeTexelVisibleMask = 0x00000200,
     ImageOperandsMakeTexelVisibleKHRMask = 0x00000200,
+    ImageOperandsNonPrivateTexelMask = 0x00000400,
     ImageOperandsNonPrivateTexelKHRMask = 0x00000400,
+    ImageOperandsVolatileTexelMask = 0x00000800,
     ImageOperandsVolatileTexelKHRMask = 0x00000800,
     ImageOperandsSignExtendMask = 0x00001000,
     ImageOperandsZeroExtendMask = 0x00002000,
@@ -448,8 +459,11 @@
     DecorationPerViewNV = 5272,
     DecorationPerTaskNV = 5273,
     DecorationPerVertexNV = 5285,
+    DecorationNonUniform = 5300,
     DecorationNonUniformEXT = 5300,
+    DecorationRestrictPointer = 5355,
     DecorationRestrictPointerEXT = 5355,
+    DecorationAliasedPointer = 5356,
     DecorationAliasedPointerEXT = 5356,
     DecorationCounterBuffer = 5634,
     DecorationHlslCounterBufferGOOGLE = 5634,
@@ -630,8 +644,11 @@
     MemorySemanticsCrossWorkgroupMemoryShift = 9,
     MemorySemanticsAtomicCounterMemoryShift = 10,
     MemorySemanticsImageMemoryShift = 11,
+    MemorySemanticsOutputMemoryShift = 12,
     MemorySemanticsOutputMemoryKHRShift = 12,
+    MemorySemanticsMakeAvailableShift = 13,
     MemorySemanticsMakeAvailableKHRShift = 13,
+    MemorySemanticsMakeVisibleShift = 14,
     MemorySemanticsMakeVisibleKHRShift = 14,
     MemorySemanticsVolatileShift = 15,
     MemorySemanticsMax = 0x7fffffff,
@@ -649,8 +666,11 @@
     MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
     MemorySemanticsAtomicCounterMemoryMask = 0x00000400,
     MemorySemanticsImageMemoryMask = 0x00000800,
+    MemorySemanticsOutputMemoryMask = 0x00001000,
     MemorySemanticsOutputMemoryKHRMask = 0x00001000,
+    MemorySemanticsMakeAvailableMask = 0x00002000,
     MemorySemanticsMakeAvailableKHRMask = 0x00002000,
+    MemorySemanticsMakeVisibleMask = 0x00004000,
     MemorySemanticsMakeVisibleKHRMask = 0x00004000,
     MemorySemanticsVolatileMask = 0x00008000,
 };
@@ -659,8 +679,11 @@
     MemoryAccessVolatileShift = 0,
     MemoryAccessAlignedShift = 1,
     MemoryAccessNontemporalShift = 2,
+    MemoryAccessMakePointerAvailableShift = 3,
     MemoryAccessMakePointerAvailableKHRShift = 3,
+    MemoryAccessMakePointerVisibleShift = 4,
     MemoryAccessMakePointerVisibleKHRShift = 4,
+    MemoryAccessNonPrivatePointerShift = 5,
     MemoryAccessNonPrivatePointerKHRShift = 5,
     MemoryAccessMax = 0x7fffffff,
 };
@@ -670,8 +693,11 @@
     MemoryAccessVolatileMask = 0x00000001,
     MemoryAccessAlignedMask = 0x00000002,
     MemoryAccessNontemporalMask = 0x00000004,
+    MemoryAccessMakePointerAvailableMask = 0x00000008,
     MemoryAccessMakePointerAvailableKHRMask = 0x00000008,
+    MemoryAccessMakePointerVisibleMask = 0x00000010,
     MemoryAccessMakePointerVisibleKHRMask = 0x00000010,
+    MemoryAccessNonPrivatePointerMask = 0x00000020,
     MemoryAccessNonPrivatePointerKHRMask = 0x00000020,
 };
 
@@ -681,6 +707,7 @@
     ScopeWorkgroup = 2,
     ScopeSubgroup = 3,
     ScopeInvocation = 4,
+    ScopeQueueFamily = 5,
     ScopeQueueFamilyKHR = 5,
     ScopeMax = 0x7fffffff,
 };
@@ -781,6 +808,8 @@
     CapabilityGroupNonUniformShuffleRelative = 66,
     CapabilityGroupNonUniformClustered = 67,
     CapabilityGroupNonUniformQuad = 68,
+    CapabilityShaderLayer = 69,
+    CapabilityShaderViewportIndex = 70,
     CapabilitySubgroupBallotKHR = 4423,
     CapabilityDrawParameters = 4427,
     CapabilitySubgroupVoteKHR = 4431,
@@ -825,21 +854,36 @@
     CapabilityFragmentDensityEXT = 5291,
     CapabilityShadingRateNV = 5291,
     CapabilityGroupNonUniformPartitionedNV = 5297,
+    CapabilityShaderNonUniform = 5301,
     CapabilityShaderNonUniformEXT = 5301,
+    CapabilityRuntimeDescriptorArray = 5302,
     CapabilityRuntimeDescriptorArrayEXT = 5302,
+    CapabilityInputAttachmentArrayDynamicIndexing = 5303,
     CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303,
+    CapabilityUniformTexelBufferArrayDynamicIndexing = 5304,
     CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304,
+    CapabilityStorageTexelBufferArrayDynamicIndexing = 5305,
     CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305,
+    CapabilityUniformBufferArrayNonUniformIndexing = 5306,
     CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306,
+    CapabilitySampledImageArrayNonUniformIndexing = 5307,
     CapabilitySampledImageArrayNonUniformIndexingEXT = 5307,
+    CapabilityStorageBufferArrayNonUniformIndexing = 5308,
     CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308,
+    CapabilityStorageImageArrayNonUniformIndexing = 5309,
     CapabilityStorageImageArrayNonUniformIndexingEXT = 5309,
+    CapabilityInputAttachmentArrayNonUniformIndexing = 5310,
     CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310,
+    CapabilityUniformTexelBufferArrayNonUniformIndexing = 5311,
     CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
+    CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
     CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
     CapabilityRayTracingNV = 5340,
+    CapabilityVulkanMemoryModel = 5345,
     CapabilityVulkanMemoryModelKHR = 5345,
+    CapabilityVulkanMemoryModelDeviceScope = 5346,
     CapabilityVulkanMemoryModelDeviceScopeKHR = 5346,
+    CapabilityPhysicalStorageBufferAddresses = 5347,
     CapabilityPhysicalStorageBufferAddressesEXT = 5347,
     CapabilityComputeDerivativeGroupLinearNV = 5350,
     CapabilityCooperativeMatrixNV = 5357,
diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt
index 5cea53d..0878965 100644
--- a/StandAlone/CMakeLists.txt
+++ b/StandAlone/CMakeLists.txt
@@ -4,8 +4,9 @@
 set_property(TARGET glslang-default-resource-limits PROPERTY POSITION_INDEPENDENT_CODE ON)
 
 target_include_directories(glslang-default-resource-limits
-                           PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
-                           PUBLIC ${PROJECT_SOURCE_DIR})
+                           PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+                           PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
+
 
 set(SOURCES StandAlone.cpp DirStackFileIncluder.h)
 set(REMAPPER_SOURCES spirv-remap.cpp)
@@ -33,21 +34,27 @@
 
 target_link_libraries(glslangValidator ${LIBRARIES})
 target_link_libraries(spirv-remap ${LIBRARIES})
-target_include_directories(glslangValidator PUBLIC ../External)
+target_include_directories(glslangValidator PUBLIC 
+	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
+	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
 
 if(WIN32)
     source_group("Source" FILES ${SOURCES})
 endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS glslangValidator
+    install(TARGETS glslangValidator EXPORT glslangValidatorTargets
             RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
 
-    install(TARGETS spirv-remap
+    install(TARGETS spirv-remap EXPORT spirv-remapTargets
             RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+	
+	install(EXPORT glslangValidatorTargets DESTINATION lib/cmake)
+	install(EXPORT spirv-remapTargets DESTINATION lib/cmake)
             
     if(BUILD_SHARED_LIBS)
-        install(TARGETS glslang-default-resource-limits
+        install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+		install(EXPORT glslang-default-resource-limitsTargets DESTINATION lib/cmake)
     endif()
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 9fa311b..4be3a4f 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -615,8 +615,12 @@
                             } else if (strcmp(argv[1], "spirv1.4") == 0) {
                                 TargetLanguage = glslang::EShTargetSpv;
                                 TargetVersion = glslang::EShTargetSpv_1_4;
+                            } else if (strcmp(argv[1], "spirv1.5") == 0) {
+                                TargetLanguage = glslang::EShTargetSpv;
+                                TargetVersion = glslang::EShTargetSpv_1_5;
                             } else
-                                Error("--target-env expected one of: vulkan1.0, vulkan1.1, opengl, spirv1.0, spirv1.1, spirv1.2, or spirv1.3");
+                                Error("--target-env expected one of: vulkan1.0, vulkan1.1, opengl,\n"
+                                      "spirv1.0, spirv1.1, spirv1.2, spirv1.3, spirv1.4, or spirv1.5");
                         }
                         bumpArg();
                     } else if (lowerword == "variable-name" || // synonyms
@@ -1618,7 +1622,7 @@
            "  --stdin                           read from stdin instead of from a file;\n"
            "                                    requires providing the shader stage using -S\n"
            "  --target-env {vulkan1.0 | vulkan1.1 | opengl | \n"
-           "                spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3}\n"
+           "                spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3 | spirv1.4 | spirv1.5}\n"
            "                                    set execution environment that emitted code\n"
            "                                    will execute in (versus source language\n"
            "                                    semantics selected by --client) defaults:\n"
diff --git a/Test/130.frag b/Test/130.frag
index 3e39411..8a5bfd5 100644
--- a/Test/130.frag
+++ b/Test/130.frag
@@ -167,3 +167,12 @@
 }
 
 layout(early_fragment_tests) out;         // ERROR
+
+#extension GL_ARB_explicit_uniform_location : enable
+
+layout(location = 3) uniform vec4 ucolor0; // ERROR: explicit attrib location is also required for version < 330
+
+#extension GL_ARB_explicit_attrib_location : enable
+
+layout(location = 4) uniform vec4 ucolor1;
+
diff --git a/Test/330.frag b/Test/330.frag
index 9afa8f8..b37d8de 100644
--- a/Test/330.frag
+++ b/Test/330.frag
@@ -149,4 +149,17 @@
     KeyMem.precise;

 }

 

-layout(location=28, index=2) out vec4 outIndex2; // ERROR index out of range
\ No newline at end of file
+layout(location=28, index=2) out vec4 outIndex2; // ERROR index out of range
+
+layout(location=4) uniform vec4 ucolor0; // ERROR: extension is not enabled
+
+#extension GL_ARB_explicit_uniform_location : enable
+
+layout(location=5) uniform vec4 ucolor1;
+
+layout(location=6) uniform ColorsBuffer // ERROR: location cannot be applied in uniform buffer block
+{
+    vec4 colors[128];
+} colorsBuffer;
+
+
diff --git a/Test/430.comp b/Test/430.comp
index 0929432..178b994 100644
--- a/Test/430.comp
+++ b/Test/430.comp
@@ -48,6 +48,9 @@
 layout(location = 2) shared vec4 sl;  // ERROR

 shared float fs = 4.2;                // ERROR

 

+layout(local_size_y = 1) in;

+layout(local_size_y = 2) in;     // ERROR, changing

+layout(local_size_y = 1) in;

 layout(local_size_x = 2, local_size_y = 3, local_size_z = 4) out;  // ERROR

 

 int arrX[gl_WorkGroupSize.x];

diff --git a/Test/baseResults/130.frag.out b/Test/baseResults/130.frag.out
index 81d055b..0af9ab9 100644
--- a/Test/baseResults/130.frag.out
+++ b/Test/baseResults/130.frag.out
@@ -29,10 +29,13 @@
 ERROR: 0:154: 'image load store' : not supported for this version or the enabled extensions 
 ERROR: 0:154: 'iimage2D' : Reserved word. 
 ERROR: 0:169: 'early_fragment_tests' : can only apply to 'in' 
-ERROR: 28 compilation errors.  No code generated.
+ERROR: 0:173: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
+ERROR: 29 compilation errors.  No code generated.
 
 
 Shader version: 130
+Requested GL_ARB_explicit_attrib_location
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_gpu_shader5
 Requested GL_ARB_separate_shader_objects
 Requested GL_ARB_shader_image_load_store
@@ -402,12 +405,16 @@
 0:?     'gl_FogFragCoord' ( smooth in float)
 0:?     'iimg2Dbad' (layout( r32i) uniform iimage2D)
 0:?     'iimg2D' (layout( r32i) uniform iimage2D)
+0:?     'ucolor0' (layout( location=3) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=4) uniform 4-component vector of float)
 
 
 Linked fragment stage:
 
 
 Shader version: 130
+Requested GL_ARB_explicit_attrib_location
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_gpu_shader5
 Requested GL_ARB_separate_shader_objects
 Requested GL_ARB_shader_image_load_store
@@ -457,4 +464,6 @@
 0:?     'gl_FogFragCoord' ( smooth in float)
 0:?     'iimg2Dbad' (layout( r32i) uniform iimage2D)
 0:?     'iimg2D' (layout( r32i) uniform iimage2D)
+0:?     'ucolor0' (layout( location=3) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=4) uniform 4-component vector of float)
 
diff --git a/Test/baseResults/330.frag.out b/Test/baseResults/330.frag.out
index 36ba7a2..bb2770f 100644
--- a/Test/baseResults/330.frag.out
+++ b/Test/baseResults/330.frag.out
@@ -40,11 +40,14 @@
 ERROR: 0:141: 'textureQueryLod' : no matching overloaded function found 
 ERROR: 0:141: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
 ERROR: 0:152: 'index' : value must be 0 or 1 
-ERROR: 41 compilation errors.  No code generated.
+ERROR: 0:154: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
+ERROR: 0:160: 'location' : cannot apply to uniform or buffer block 
+ERROR: 43 compilation errors.  No code generated.
 
 
 Shader version: 330
 Requested GL_ARB_enhanced_layouts
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_separate_shader_objects
 ERROR: node is still EOpNull!
 0:8  Function Definition: main( ( global void)
@@ -126,6 +129,9 @@
 0:?     'precise' ( global int)
 0:?     'KeyMem' ( global structure{ global int precise})
 0:?     'outIndex2' (layout( location=28 index=0) out 4-component vector of float)
+0:?     'ucolor0' (layout( location=4) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=5) uniform 4-component vector of float)
+0:?     'colorsBuffer' (layout( location=6 column_major shared) uniform block{layout( column_major shared) uniform 128-element array of 4-component vector of float colors})
 
 
 Linked fragment stage:
@@ -135,6 +141,7 @@
 
 Shader version: 330
 Requested GL_ARB_enhanced_layouts
+Requested GL_ARB_explicit_uniform_location
 Requested GL_ARB_separate_shader_objects
 ERROR: node is still EOpNull!
 0:8  Function Definition: main( ( global void)
@@ -191,4 +198,7 @@
 0:?     'precise' ( global int)
 0:?     'KeyMem' ( global structure{ global int precise})
 0:?     'outIndex2' (layout( location=28 index=0) out 4-component vector of float)
+0:?     'ucolor0' (layout( location=4) uniform 4-component vector of float)
+0:?     'ucolor1' (layout( location=5) uniform 4-component vector of float)
+0:?     'colorsBuffer' (layout( location=6 column_major shared) uniform block{layout( column_major shared) uniform 128-element array of 4-component vector of float colors})
 
diff --git a/Test/baseResults/430.comp.out b/Test/baseResults/430.comp.out
index ef8d19e..55c8238 100644
--- a/Test/baseResults/430.comp.out
+++ b/Test/baseResults/430.comp.out
@@ -8,14 +8,15 @@
 ERROR: 0:48: 'shared' : cannot apply layout qualifiers to a shared variable 
 ERROR: 0:48: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers 
 ERROR: 0:49: 'shared' :  cannot initialize this type of qualifier  
-ERROR: 0:51: 'local_size' : can only apply to 'in' 
-ERROR: 0:51: 'local_size' : can only apply to 'in' 
-ERROR: 0:51: 'local_size' : can only apply to 'in' 
-ERROR: 0:65: 'assign' :  l-value required "ro" (can't modify a readonly buffer)
-ERROR: 0:77: '=' :  cannot convert from ' temp double' to ' temp int'
-ERROR: 0:81: 'input block' : not supported in this stage: compute
-ERROR: 0:85: 'output block' : not supported in this stage: compute
-ERROR: 16 compilation errors.  No code generated.
+ERROR: 0:52: 'local_size' : cannot change previously set size 
+ERROR: 0:54: 'local_size' : can only apply to 'in' 
+ERROR: 0:54: 'local_size' : can only apply to 'in' 
+ERROR: 0:54: 'local_size' : can only apply to 'in' 
+ERROR: 0:68: 'assign' :  l-value required "ro" (can't modify a readonly buffer)
+ERROR: 0:80: '=' :  cannot convert from ' temp double' to ' temp int'
+ERROR: 0:84: 'input block' : not supported in this stage: compute
+ERROR: 0:88: 'output block' : not supported in this stage: compute
+ERROR: 17 compilation errors.  No code generated.
 
 
 Shader version: 430
@@ -51,77 +52,77 @@
 0:39            10 (const int)
 0:39        true case
 0:40        Barrier ( global void)
-0:63  Function Definition: foo( ( global void)
-0:63    Function Parameters: 
-0:65    Sequence
-0:65      move second child to first child ( temp float)
-0:65        direct index (layout( column_major shared) readonly temp float)
-0:65          values: direct index for structure (layout( column_major shared) readonly buffer unsized 3-element array of float)
-0:65            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer int value, layout( column_major shared) readonly buffer unsized 3-element array of float values})
-0:65            Constant:
-0:65              1 (const int)
-0:65          Constant:
-0:65            2 (const int)
-0:65        Constant:
-0:65          4.700000
-0:66      array length ( temp int)
-0:66        values: direct index for structure (layout( column_major shared) readonly buffer unsized 3-element array of float)
-0:66          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer int value, layout( column_major shared) readonly buffer unsized 3-element array of float values})
-0:66          Constant:
-0:66            1 (const int)
-0:67      Barrier ( global void)
-0:72  Function Definition: fooaoeu( ( global void)
-0:72    Function Parameters: 
-0:73    Sequence
-0:73      Sequence
-0:73        move second child to first child ( temp 2-component vector of int)
-0:73          'storePos' ( temp 2-component vector of int)
-0:73          Convert uint to int ( temp 2-component vector of int)
-0:73            vector swizzle ( temp 2-component vector of uint)
-0:73              'gl_GlobalInvocationID' ( in 3-component vector of uint GlobalInvocationID)
-0:73              Sequence
-0:73                Constant:
-0:73                  0 (const int)
-0:73                Constant:
-0:73                  1 (const int)
-0:74      Sequence
-0:74        move second child to first child ( temp double)
-0:74          'localCoef' ( temp double)
-0:74          Convert float to double ( temp double)
-0:74            length ( global float)
-0:74              divide ( temp 2-component vector of float)
-0:74                Convert int to float ( temp 2-component vector of float)
-0:74                  subtract ( temp 2-component vector of int)
-0:74                    Convert uint to int ( temp 2-component vector of int)
-0:74                      vector swizzle ( temp 2-component vector of uint)
-0:74                        'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
-0:74                        Sequence
-0:74                          Constant:
-0:74                            0 (const int)
-0:74                          Constant:
-0:74                            1 (const int)
-0:74                    Constant:
-0:74                      8 (const int)
-0:74                Constant:
-0:74                  8.000000
-0:75      Sequence
-0:75        move second child to first child ( temp 4-component vector of double)
-0:75          'aa' ( temp 4-component vector of double)
-0:75          Constant:
-0:75            0.400000
-0:75            0.200000
-0:75            0.300000
-0:75            0.400000
+0:66  Function Definition: foo( ( global void)
+0:66    Function Parameters: 
+0:68    Sequence
+0:68      move second child to first child ( temp float)
+0:68        direct index (layout( column_major shared) readonly temp float)
+0:68          values: direct index for structure (layout( column_major shared) readonly buffer unsized 3-element array of float)
+0:68            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer int value, layout( column_major shared) readonly buffer unsized 3-element array of float values})
+0:68            Constant:
+0:68              1 (const int)
+0:68          Constant:
+0:68            2 (const int)
+0:68        Constant:
+0:68          4.700000
+0:69      array length ( temp int)
+0:69        values: direct index for structure (layout( column_major shared) readonly buffer unsized 3-element array of float)
+0:69          'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer int value, layout( column_major shared) readonly buffer unsized 3-element array of float values})
+0:69          Constant:
+0:69            1 (const int)
+0:70      Barrier ( global void)
+0:75  Function Definition: fooaoeu( ( global void)
+0:75    Function Parameters: 
+0:76    Sequence
 0:76      Sequence
-0:76        move second child to first child ( temp double)
-0:76          'globalCoef' ( temp double)
-0:76          Constant:
-0:76            1.000000
+0:76        move second child to first child ( temp 2-component vector of int)
+0:76          'storePos' ( temp 2-component vector of int)
+0:76          Convert uint to int ( temp 2-component vector of int)
+0:76            vector swizzle ( temp 2-component vector of uint)
+0:76              'gl_GlobalInvocationID' ( in 3-component vector of uint GlobalInvocationID)
+0:76              Sequence
+0:76                Constant:
+0:76                  0 (const int)
+0:76                Constant:
+0:76                  1 (const int)
+0:77      Sequence
+0:77        move second child to first child ( temp double)
+0:77          'localCoef' ( temp double)
+0:77          Convert float to double ( temp double)
+0:77            length ( global float)
+0:77              divide ( temp 2-component vector of float)
+0:77                Convert int to float ( temp 2-component vector of float)
+0:77                  subtract ( temp 2-component vector of int)
+0:77                    Convert uint to int ( temp 2-component vector of int)
+0:77                      vector swizzle ( temp 2-component vector of uint)
+0:77                        'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:77                        Sequence
+0:77                          Constant:
+0:77                            0 (const int)
+0:77                          Constant:
+0:77                            1 (const int)
+0:77                    Constant:
+0:77                      8 (const int)
+0:77                Constant:
+0:77                  8.000000
 0:78      Sequence
-0:78        move second child to first child ( temp double)
-0:78          'di' ( temp double)
-0:78          Convert int to double ( temp double)
-0:78            'i' ( temp int)
+0:78        move second child to first child ( temp 4-component vector of double)
+0:78          'aa' ( temp 4-component vector of double)
+0:78          Constant:
+0:78            0.400000
+0:78            0.200000
+0:78            0.300000
+0:78            0.400000
+0:79      Sequence
+0:79        move second child to first child ( temp double)
+0:79          'globalCoef' ( temp double)
+0:79          Constant:
+0:79            1.000000
+0:81      Sequence
+0:81        move second child to first child ( temp double)
+0:81          'di' ( temp double)
+0:81          Convert int to double ( temp double)
+0:81            'i' ( temp int)
 0:?   Linker Objects
 0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
 0:?       2 (const uint)
diff --git a/Test/baseResults/glsl.450.subgroup.frag.out b/Test/baseResults/glsl.450.subgroup.frag.out
index e61523e..817abb2 100644
--- a/Test/baseResults/glsl.450.subgroup.frag.out
+++ b/Test/baseResults/glsl.450.subgroup.frag.out
@@ -85,11 +85,13 @@
 ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
 ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
 ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned
-ERROR: 0:232: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
-ERROR: 0:233: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
-ERROR: 0:234: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
-ERROR: 0:235: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
-ERROR: 90 compilation errors.  No code generated.
+ERROR: 0:124: 'id' : argument must be compile-time constant 
+ERROR: 0:199: 'id' : argument must be compile-time constant 
+ERROR: 0:236: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:237: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:238: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 0:239: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins
+ERROR: 92 compilation errors.  No code generated.
 
 
 Shader version: 450
@@ -352,270 +354,278 @@
 0:116  Function Definition: ballot_works(vf4; ( global void)
 0:116    Function Parameters: 
 0:116      'f4' ( in 4-component vector of float)
-0:117    Sequence
-0:117      'gl_SubgroupEqMask' ( flat in 4-component vector of uint SubgroupEqMask)
-0:118      'gl_SubgroupGeMask' ( flat in 4-component vector of uint SubgroupGeMask)
-0:119      'gl_SubgroupGtMask' ( flat in 4-component vector of uint SubgroupGtMask)
-0:120      'gl_SubgroupLeMask' ( flat in 4-component vector of uint SubgroupLeMask)
-0:121      'gl_SubgroupLtMask' ( flat in 4-component vector of uint SubgroupLtMask)
-0:122      subgroupBroadcast ( global 4-component vector of float)
-0:122        'f4' ( in 4-component vector of float)
-0:122        Constant:
-0:122          0 (const uint)
-0:123      subgroupBroadcastFirst ( global 4-component vector of float)
+0:?     Sequence
+0:118      'gl_SubgroupEqMask' ( flat in 4-component vector of uint SubgroupEqMask)
+0:119      'gl_SubgroupGeMask' ( flat in 4-component vector of uint SubgroupGeMask)
+0:120      'gl_SubgroupGtMask' ( flat in 4-component vector of uint SubgroupGtMask)
+0:121      'gl_SubgroupLeMask' ( flat in 4-component vector of uint SubgroupLeMask)
+0:122      'gl_SubgroupLtMask' ( flat in 4-component vector of uint SubgroupLtMask)
+0:123      subgroupBroadcast ( global 4-component vector of float)
 0:123        'f4' ( in 4-component vector of float)
-0:124      Sequence
-0:124        move second child to first child ( temp 4-component vector of uint)
-0:124          'ballot' ( temp 4-component vector of uint)
-0:124          subgroupBallot ( global 4-component vector of uint)
-0:124            Constant:
-0:124              false (const bool)
-0:125      subgroupInverseBallot ( global bool)
-0:125        Constant:
-0:125          1 (const uint)
-0:125          1 (const uint)
-0:125          1 (const uint)
-0:125          1 (const uint)
-0:126      subgroupBallotBitExtract ( global bool)
-0:126        'ballot' ( temp 4-component vector of uint)
-0:126        Constant:
-0:126          0 (const uint)
-0:127      subgroupBallotBitCount ( global uint)
-0:127        'ballot' ( temp 4-component vector of uint)
-0:128      subgroupBallotInclusiveBitCount ( global uint)
+0:123        Constant:
+0:123          0 (const uint)
+0:124      subgroupBroadcast ( global 4-component vector of float)
+0:124        'f4' ( in 4-component vector of float)
+0:124        Convert int to uint ( temp uint)
+0:124          'i' ( temp int)
+0:125      subgroupBroadcastFirst ( global 4-component vector of float)
+0:125        'f4' ( in 4-component vector of float)
+0:126      Sequence
+0:126        move second child to first child ( temp 4-component vector of uint)
+0:126          'ballot' ( temp 4-component vector of uint)
+0:126          subgroupBallot ( global 4-component vector of uint)
+0:126            Constant:
+0:126              false (const bool)
+0:127      subgroupInverseBallot ( global bool)
+0:127        Constant:
+0:127          1 (const uint)
+0:127          1 (const uint)
+0:127          1 (const uint)
+0:127          1 (const uint)
+0:128      subgroupBallotBitExtract ( global bool)
 0:128        'ballot' ( temp 4-component vector of uint)
-0:129      subgroupBallotExclusiveBitCount ( global uint)
+0:128        Constant:
+0:128          0 (const uint)
+0:129      subgroupBallotBitCount ( global uint)
 0:129        'ballot' ( temp 4-component vector of uint)
-0:130      subgroupBallotFindLSB ( global uint)
+0:130      subgroupBallotInclusiveBitCount ( global uint)
 0:130        'ballot' ( temp 4-component vector of uint)
-0:131      subgroupBallotFindMSB ( global uint)
+0:131      subgroupBallotExclusiveBitCount ( global uint)
 0:131        'ballot' ( temp 4-component vector of uint)
-0:135  Function Definition: vote_works(vf4; ( global void)
-0:135    Function Parameters: 
-0:135      'f4' ( in 4-component vector of float)
-0:137    Sequence
-0:137      subgroupAll ( global bool)
-0:137        Constant:
-0:137          true (const bool)
-0:138      subgroupAny ( global bool)
-0:138        Constant:
-0:138          false (const bool)
-0:139      subgroupAllEqual ( global bool)
-0:139        'f4' ( in 4-component vector of float)
-0:144  Function Definition: shuffle_works(vf4; ( global void)
-0:144    Function Parameters: 
-0:144      'f4' ( in 4-component vector of float)
-0:146    Sequence
-0:146      subgroupShuffle ( global 4-component vector of float)
-0:146        'f4' ( in 4-component vector of float)
-0:146        Constant:
-0:146          0 (const uint)
-0:147      subgroupShuffleXor ( global 4-component vector of float)
-0:147        'f4' ( in 4-component vector of float)
-0:147        Constant:
-0:147          1 (const uint)
-0:148      subgroupShuffleUp ( global 4-component vector of float)
+0:132      subgroupBallotFindLSB ( global uint)
+0:132        'ballot' ( temp 4-component vector of uint)
+0:133      subgroupBallotFindMSB ( global uint)
+0:133        'ballot' ( temp 4-component vector of uint)
+0:137  Function Definition: vote_works(vf4; ( global void)
+0:137    Function Parameters: 
+0:137      'f4' ( in 4-component vector of float)
+0:139    Sequence
+0:139      subgroupAll ( global bool)
+0:139        Constant:
+0:139          true (const bool)
+0:140      subgroupAny ( global bool)
+0:140        Constant:
+0:140          false (const bool)
+0:141      subgroupAllEqual ( global bool)
+0:141        'f4' ( in 4-component vector of float)
+0:146  Function Definition: shuffle_works(vf4; ( global void)
+0:146    Function Parameters: 
+0:146      'f4' ( in 4-component vector of float)
+0:148    Sequence
+0:148      subgroupShuffle ( global 4-component vector of float)
 0:148        'f4' ( in 4-component vector of float)
 0:148        Constant:
-0:148          1 (const uint)
-0:149      subgroupShuffleDown ( global 4-component vector of float)
+0:148          0 (const uint)
+0:149      subgroupShuffleXor ( global 4-component vector of float)
 0:149        'f4' ( in 4-component vector of float)
 0:149        Constant:
 0:149          1 (const uint)
-0:153  Function Definition: arith_works(vf4; ( global void)
-0:153    Function Parameters: 
-0:153      'f4' ( in 4-component vector of float)
+0:150      subgroupShuffleUp ( global 4-component vector of float)
+0:150        'f4' ( in 4-component vector of float)
+0:150        Constant:
+0:150          1 (const uint)
+0:151      subgroupShuffleDown ( global 4-component vector of float)
+0:151        'f4' ( in 4-component vector of float)
+0:151        Constant:
+0:151          1 (const uint)
+0:155  Function Definition: arith_works(vf4; ( global void)
+0:155    Function Parameters: 
+0:155      'f4' ( in 4-component vector of float)
 0:?     Sequence
-0:156      subgroupAdd ( global 4-component vector of float)
-0:156        'f4' ( in 4-component vector of float)
-0:157      subgroupMul ( global 4-component vector of float)
-0:157        'f4' ( in 4-component vector of float)
-0:158      subgroupMin ( global 4-component vector of float)
+0:158      subgroupAdd ( global 4-component vector of float)
 0:158        'f4' ( in 4-component vector of float)
-0:159      subgroupMax ( global 4-component vector of float)
+0:159      subgroupMul ( global 4-component vector of float)
 0:159        'f4' ( in 4-component vector of float)
-0:160      subgroupAnd ( global 4-component vector of uint)
-0:160        'ballot' ( temp 4-component vector of uint)
-0:161      subgroupOr ( global 4-component vector of uint)
-0:161        'ballot' ( temp 4-component vector of uint)
-0:162      subgroupXor ( global 4-component vector of uint)
+0:160      subgroupMin ( global 4-component vector of float)
+0:160        'f4' ( in 4-component vector of float)
+0:161      subgroupMax ( global 4-component vector of float)
+0:161        'f4' ( in 4-component vector of float)
+0:162      subgroupAnd ( global 4-component vector of uint)
 0:162        'ballot' ( temp 4-component vector of uint)
-0:163      subgroupInclusiveAdd ( global 4-component vector of float)
-0:163        'f4' ( in 4-component vector of float)
-0:164      subgroupInclusiveMul ( global 4-component vector of float)
-0:164        'f4' ( in 4-component vector of float)
-0:165      subgroupInclusiveMin ( global 4-component vector of float)
+0:163      subgroupOr ( global 4-component vector of uint)
+0:163        'ballot' ( temp 4-component vector of uint)
+0:164      subgroupXor ( global 4-component vector of uint)
+0:164        'ballot' ( temp 4-component vector of uint)
+0:165      subgroupInclusiveAdd ( global 4-component vector of float)
 0:165        'f4' ( in 4-component vector of float)
-0:166      subgroupInclusiveMax ( global 4-component vector of float)
+0:166      subgroupInclusiveMul ( global 4-component vector of float)
 0:166        'f4' ( in 4-component vector of float)
-0:167      subgroupInclusiveAnd ( global 4-component vector of uint)
-0:167        'ballot' ( temp 4-component vector of uint)
-0:168      subgroupInclusiveOr ( global 4-component vector of uint)
-0:168        'ballot' ( temp 4-component vector of uint)
-0:169      subgroupInclusiveXor ( global 4-component vector of uint)
+0:167      subgroupInclusiveMin ( global 4-component vector of float)
+0:167        'f4' ( in 4-component vector of float)
+0:168      subgroupInclusiveMax ( global 4-component vector of float)
+0:168        'f4' ( in 4-component vector of float)
+0:169      subgroupInclusiveAnd ( global 4-component vector of uint)
 0:169        'ballot' ( temp 4-component vector of uint)
-0:170      subgroupExclusiveAdd ( global 4-component vector of float)
-0:170        'f4' ( in 4-component vector of float)
-0:171      subgroupExclusiveMul ( global 4-component vector of float)
-0:171        'f4' ( in 4-component vector of float)
-0:172      subgroupExclusiveMin ( global 4-component vector of float)
+0:170      subgroupInclusiveOr ( global 4-component vector of uint)
+0:170        'ballot' ( temp 4-component vector of uint)
+0:171      subgroupInclusiveXor ( global 4-component vector of uint)
+0:171        'ballot' ( temp 4-component vector of uint)
+0:172      subgroupExclusiveAdd ( global 4-component vector of float)
 0:172        'f4' ( in 4-component vector of float)
-0:173      subgroupExclusiveMax ( global 4-component vector of float)
+0:173      subgroupExclusiveMul ( global 4-component vector of float)
 0:173        'f4' ( in 4-component vector of float)
-0:174      subgroupExclusiveAnd ( global 4-component vector of uint)
-0:174        'ballot' ( temp 4-component vector of uint)
-0:175      subgroupExclusiveOr ( global 4-component vector of uint)
-0:175        'ballot' ( temp 4-component vector of uint)
-0:176      subgroupExclusiveXor ( global 4-component vector of uint)
+0:174      subgroupExclusiveMin ( global 4-component vector of float)
+0:174        'f4' ( in 4-component vector of float)
+0:175      subgroupExclusiveMax ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:176      subgroupExclusiveAnd ( global 4-component vector of uint)
 0:176        'ballot' ( temp 4-component vector of uint)
-0:180  Function Definition: clustered_works(vf4; ( global void)
-0:180    Function Parameters: 
-0:180      'f4' ( in 4-component vector of float)
-0:182    Sequence
-0:182      Sequence
-0:182        move second child to first child ( temp 4-component vector of uint)
-0:182          'ballot' ( temp 4-component vector of uint)
-0:182          Constant:
-0:182            85 (const uint)
-0:182            0 (const uint)
-0:182            0 (const uint)
-0:182            0 (const uint)
-0:183      subgroupClusteredAdd ( global 4-component vector of float)
-0:183        'f4' ( in 4-component vector of float)
-0:183        Constant:
-0:183          2 (const uint)
-0:184      subgroupClusteredMul ( global 4-component vector of float)
-0:184        'f4' ( in 4-component vector of float)
-0:184        Constant:
-0:184          2 (const uint)
-0:185      subgroupClusteredMin ( global 4-component vector of float)
+0:177      subgroupExclusiveOr ( global 4-component vector of uint)
+0:177        'ballot' ( temp 4-component vector of uint)
+0:178      subgroupExclusiveXor ( global 4-component vector of uint)
+0:178        'ballot' ( temp 4-component vector of uint)
+0:182  Function Definition: clustered_works(vf4; ( global void)
+0:182    Function Parameters: 
+0:182      'f4' ( in 4-component vector of float)
+0:184    Sequence
+0:184      Sequence
+0:184        move second child to first child ( temp 4-component vector of uint)
+0:184          'ballot' ( temp 4-component vector of uint)
+0:184          Constant:
+0:184            85 (const uint)
+0:184            0 (const uint)
+0:184            0 (const uint)
+0:184            0 (const uint)
+0:185      subgroupClusteredAdd ( global 4-component vector of float)
 0:185        'f4' ( in 4-component vector of float)
 0:185        Constant:
 0:185          2 (const uint)
-0:186      subgroupClusteredMax ( global 4-component vector of float)
+0:186      subgroupClusteredMul ( global 4-component vector of float)
 0:186        'f4' ( in 4-component vector of float)
 0:186        Constant:
 0:186          2 (const uint)
-0:187      subgroupClusteredAnd ( global 4-component vector of uint)
-0:187        'ballot' ( temp 4-component vector of uint)
+0:187      subgroupClusteredMin ( global 4-component vector of float)
+0:187        'f4' ( in 4-component vector of float)
 0:187        Constant:
 0:187          2 (const uint)
-0:188      subgroupClusteredOr ( global 4-component vector of uint)
-0:188        'ballot' ( temp 4-component vector of uint)
+0:188      subgroupClusteredMax ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
 0:188        Constant:
 0:188          2 (const uint)
-0:189      subgroupClusteredXor ( global 4-component vector of uint)
+0:189      subgroupClusteredAnd ( global 4-component vector of uint)
 0:189        'ballot' ( temp 4-component vector of uint)
 0:189        Constant:
 0:189          2 (const uint)
-0:193  Function Definition: quad_works(vf4; ( global void)
-0:193    Function Parameters: 
-0:193      'f4' ( in 4-component vector of float)
-0:195    Sequence
-0:195      subgroupQuadBroadcast ( global 4-component vector of float)
-0:195        'f4' ( in 4-component vector of float)
-0:195        Constant:
-0:195          0 (const uint)
-0:196      subgroupQuadSwapHorizontal ( global 4-component vector of float)
-0:196        'f4' ( in 4-component vector of float)
-0:197      subgroupQuadSwapVertical ( global 4-component vector of float)
-0:197        'f4' ( in 4-component vector of float)
-0:198      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:190      subgroupClusteredOr ( global 4-component vector of uint)
+0:190        'ballot' ( temp 4-component vector of uint)
+0:190        Constant:
+0:190          2 (const uint)
+0:191      subgroupClusteredXor ( global 4-component vector of uint)
+0:191        'ballot' ( temp 4-component vector of uint)
+0:191        Constant:
+0:191          2 (const uint)
+0:195  Function Definition: quad_works(vf4; ( global void)
+0:195    Function Parameters: 
+0:195      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:198      subgroupQuadBroadcast ( global 4-component vector of float)
 0:198        'f4' ( in 4-component vector of float)
-0:202  Function Definition: partitioned_works(vf4; ( global void)
-0:202    Function Parameters: 
-0:202      'f4' ( in 4-component vector of float)
-0:204    Sequence
-0:204      Sequence
-0:204        move second child to first child ( temp 4-component vector of uint)
-0:204          'parti' ( temp 4-component vector of uint)
-0:204          subgroupPartitionNV ( global 4-component vector of uint)
-0:204            'f4' ( in 4-component vector of float)
-0:205      Sequence
-0:205        move second child to first child ( temp 4-component vector of uint)
-0:205          'ballot' ( temp 4-component vector of uint)
-0:205          Constant:
-0:205            85 (const uint)
-0:205            0 (const uint)
-0:205            0 (const uint)
-0:205            0 (const uint)
-0:206      subgroupPartitionedAddNV ( global 4-component vector of float)
-0:206        'f4' ( in 4-component vector of float)
-0:206        'parti' ( temp 4-component vector of uint)
-0:207      subgroupPartitionedMulNV ( global 4-component vector of float)
-0:207        'f4' ( in 4-component vector of float)
-0:207        'parti' ( temp 4-component vector of uint)
-0:208      subgroupPartitionedMinNV ( global 4-component vector of float)
-0:208        'f4' ( in 4-component vector of float)
-0:208        'parti' ( temp 4-component vector of uint)
-0:209      subgroupPartitionedMaxNV ( global 4-component vector of float)
-0:209        'f4' ( in 4-component vector of float)
-0:209        'parti' ( temp 4-component vector of uint)
-0:210      subgroupPartitionedAndNV ( global 4-component vector of uint)
-0:210        'ballot' ( temp 4-component vector of uint)
+0:198        Constant:
+0:198          0 (const uint)
+0:199      subgroupQuadBroadcast ( global 4-component vector of float)
+0:199        'f4' ( in 4-component vector of float)
+0:199        Convert int to uint ( temp uint)
+0:199          'i' ( temp int)
+0:200      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:201      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:201        'f4' ( in 4-component vector of float)
+0:202      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:206  Function Definition: partitioned_works(vf4; ( global void)
+0:206    Function Parameters: 
+0:206      'f4' ( in 4-component vector of float)
+0:208    Sequence
+0:208      Sequence
+0:208        move second child to first child ( temp 4-component vector of uint)
+0:208          'parti' ( temp 4-component vector of uint)
+0:208          subgroupPartitionNV ( global 4-component vector of uint)
+0:208            'f4' ( in 4-component vector of float)
+0:209      Sequence
+0:209        move second child to first child ( temp 4-component vector of uint)
+0:209          'ballot' ( temp 4-component vector of uint)
+0:209          Constant:
+0:209            85 (const uint)
+0:209            0 (const uint)
+0:209            0 (const uint)
+0:209            0 (const uint)
+0:210      subgroupPartitionedAddNV ( global 4-component vector of float)
+0:210        'f4' ( in 4-component vector of float)
 0:210        'parti' ( temp 4-component vector of uint)
-0:211      subgroupPartitionedOrNV ( global 4-component vector of uint)
-0:211        'ballot' ( temp 4-component vector of uint)
+0:211      subgroupPartitionedMulNV ( global 4-component vector of float)
+0:211        'f4' ( in 4-component vector of float)
 0:211        'parti' ( temp 4-component vector of uint)
-0:212      subgroupPartitionedXorNV ( global 4-component vector of uint)
-0:212        'ballot' ( temp 4-component vector of uint)
+0:212      subgroupPartitionedMinNV ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
 0:212        'parti' ( temp 4-component vector of uint)
-0:213      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:213      subgroupPartitionedMaxNV ( global 4-component vector of float)
 0:213        'f4' ( in 4-component vector of float)
 0:213        'parti' ( temp 4-component vector of uint)
-0:214      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
-0:214        'f4' ( in 4-component vector of float)
+0:214      subgroupPartitionedAndNV ( global 4-component vector of uint)
+0:214        'ballot' ( temp 4-component vector of uint)
 0:214        'parti' ( temp 4-component vector of uint)
-0:215      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
-0:215        'f4' ( in 4-component vector of float)
+0:215      subgroupPartitionedOrNV ( global 4-component vector of uint)
+0:215        'ballot' ( temp 4-component vector of uint)
 0:215        'parti' ( temp 4-component vector of uint)
-0:216      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
-0:216        'f4' ( in 4-component vector of float)
+0:216      subgroupPartitionedXorNV ( global 4-component vector of uint)
+0:216        'ballot' ( temp 4-component vector of uint)
 0:216        'parti' ( temp 4-component vector of uint)
-0:217      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
-0:217        'ballot' ( temp 4-component vector of uint)
+0:217      subgroupPartitionedInclusiveAddNV ( global 4-component vector of float)
+0:217        'f4' ( in 4-component vector of float)
 0:217        'parti' ( temp 4-component vector of uint)
-0:218      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
-0:218        'ballot' ( temp 4-component vector of uint)
+0:218      subgroupPartitionedInclusiveMulNV ( global 4-component vector of float)
+0:218        'f4' ( in 4-component vector of float)
 0:218        'parti' ( temp 4-component vector of uint)
-0:219      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
-0:219        'ballot' ( temp 4-component vector of uint)
+0:219      subgroupPartitionedInclusiveMinNV ( global 4-component vector of float)
+0:219        'f4' ( in 4-component vector of float)
 0:219        'parti' ( temp 4-component vector of uint)
-0:220      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:220      subgroupPartitionedInclusiveMaxNV ( global 4-component vector of float)
 0:220        'f4' ( in 4-component vector of float)
 0:220        'parti' ( temp 4-component vector of uint)
-0:221      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
-0:221        'f4' ( in 4-component vector of float)
+0:221      subgroupPartitionedInclusiveAndNV ( global 4-component vector of uint)
+0:221        'ballot' ( temp 4-component vector of uint)
 0:221        'parti' ( temp 4-component vector of uint)
-0:222      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
-0:222        'f4' ( in 4-component vector of float)
+0:222      subgroupPartitionedInclusiveOrNV ( global 4-component vector of uint)
+0:222        'ballot' ( temp 4-component vector of uint)
 0:222        'parti' ( temp 4-component vector of uint)
-0:223      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
-0:223        'f4' ( in 4-component vector of float)
+0:223      subgroupPartitionedInclusiveXorNV ( global 4-component vector of uint)
+0:223        'ballot' ( temp 4-component vector of uint)
 0:223        'parti' ( temp 4-component vector of uint)
-0:224      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
-0:224        'ballot' ( temp 4-component vector of uint)
+0:224      subgroupPartitionedExclusiveAddNV ( global 4-component vector of float)
+0:224        'f4' ( in 4-component vector of float)
 0:224        'parti' ( temp 4-component vector of uint)
-0:225      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
-0:225        'ballot' ( temp 4-component vector of uint)
+0:225      subgroupPartitionedExclusiveMulNV ( global 4-component vector of float)
+0:225        'f4' ( in 4-component vector of float)
 0:225        'parti' ( temp 4-component vector of uint)
-0:226      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
-0:226        'ballot' ( temp 4-component vector of uint)
+0:226      subgroupPartitionedExclusiveMinNV ( global 4-component vector of float)
+0:226        'f4' ( in 4-component vector of float)
 0:226        'parti' ( temp 4-component vector of uint)
-0:230  Function Definition: sm_builtins_err( ( global void)
-0:230    Function Parameters: 
-0:232    Sequence
-0:232      'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
-0:233      'gl_SMCountNV' ( flat in uint SMCountNV)
-0:234      'gl_WarpIDNV' ( flat in uint WarpIDNV)
-0:235      'gl_SMIDNV' ( flat in uint SMIDNV)
-0:242  Function Definition: sm_builtins( ( global void)
-0:242    Function Parameters: 
-0:244    Sequence
-0:244      'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
-0:245      'gl_SMCountNV' ( flat in uint SMCountNV)
-0:246      'gl_WarpIDNV' ( flat in uint WarpIDNV)
-0:247      'gl_SMIDNV' ( flat in uint SMIDNV)
+0:227      subgroupPartitionedExclusiveMaxNV ( global 4-component vector of float)
+0:227        'f4' ( in 4-component vector of float)
+0:227        'parti' ( temp 4-component vector of uint)
+0:228      subgroupPartitionedExclusiveAndNV ( global 4-component vector of uint)
+0:228        'ballot' ( temp 4-component vector of uint)
+0:228        'parti' ( temp 4-component vector of uint)
+0:229      subgroupPartitionedExclusiveOrNV ( global 4-component vector of uint)
+0:229        'ballot' ( temp 4-component vector of uint)
+0:229        'parti' ( temp 4-component vector of uint)
+0:230      subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint)
+0:230        'ballot' ( temp 4-component vector of uint)
+0:230        'parti' ( temp 4-component vector of uint)
+0:234  Function Definition: sm_builtins_err( ( global void)
+0:234    Function Parameters: 
+0:236    Sequence
+0:236      'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
+0:237      'gl_SMCountNV' ( flat in uint SMCountNV)
+0:238      'gl_WarpIDNV' ( flat in uint WarpIDNV)
+0:239      'gl_SMIDNV' ( flat in uint SMIDNV)
+0:246  Function Definition: sm_builtins( ( global void)
+0:246    Function Parameters: 
+0:248    Sequence
+0:248      'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV)
+0:249      'gl_SMCountNV' ( flat in uint SMCountNV)
+0:250      'gl_WarpIDNV' ( flat in uint WarpIDNV)
+0:251      'gl_SMIDNV' ( flat in uint SMIDNV)
 0:?   Linker Objects
 0:?     'data' (layout( location=0) out 4-component vector of uint)
 
diff --git a/Test/baseResults/hlsl.format.rwtexture.frag.out b/Test/baseResults/hlsl.format.rwtexture.frag.out
new file mode 100644
index 0000000..7ab5329
--- /dev/null
+++ b/Test/baseResults/hlsl.format.rwtexture.frag.out
@@ -0,0 +1,501 @@
+hlsl.format.rwtexture.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+using depth_any
+0:? Sequence
+0:56  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56    Function Parameters: 
+0:?     Sequence
+0:59      move second child to first child ( temp 4-component vector of float)
+0:59        Color: direct index for structure ( temp 4-component vector of float)
+0:59          'psout' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:59          Constant:
+0:59            0 (const int)
+0:59        Constant:
+0:59          1.000000
+0:59          1.000000
+0:59          1.000000
+0:59          1.000000
+0:60      move second child to first child ( temp float)
+0:60        Depth: direct index for structure ( temp float)
+0:60          'psout' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:60          Constant:
+0:60            1 (const int)
+0:60        Constant:
+0:60          1.000000
+0:62      Branch: Return with expression
+0:62        'psout' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56  Function Definition: main( ( temp void)
+0:56    Function Parameters: 
+0:?     Sequence
+0:56      Sequence
+0:56        move second child to first child ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56          'flattenTemp' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56          Function Call: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+0:56          Color: direct index for structure ( temp 4-component vector of float)
+0:56            'flattenTemp' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56            Constant:
+0:56              0 (const int)
+0:56        move second child to first child ( temp float)
+0:?           '@entryPointOutput.Depth' ( out float FragDepth)
+0:56          Depth: direct index for structure ( temp float)
+0:56            'flattenTemp' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56            Constant:
+0:56              1 (const int)
+0:?   Linker Objects
+0:?     'g_sSamp' (layout( binding=0) uniform sampler)
+0:?     'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D)
+0:?     'g_tTex1di4' (layout( rg32f) uniform iimage1D)
+0:?     'g_tTex1du4' (layout( rgba8_snorm) uniform uimage1D)
+0:?     'g_tTex2df4' (layout( rgba8i) uniform image2D)
+0:?     'g_tTex2di4' (layout( r11f_g11f_b10f) uniform iimage2D)
+0:?     'g_tTex2du4' (layout( r8_snorm) uniform uimage2D)
+0:?     'g_tTex3df4' (layout( rg8) readonly uniform image3D)
+0:?     'g_tTex3di4' (layout( rgba16i) writeonly uniform iimage3D)
+0:?     'g_tTex3du4' (layout( r8i) readonly writeonly uniform uimage3D)
+0:?     'g_tTex1df4a' (layout( rgba8ui) uniform image1DArray)
+0:?     'g_tTex1di4a' (layout( rg32ui) uniform iimage1DArray)
+0:?     'g_tTex1du4a' (layout( r16ui) uniform uimage1DArray)
+0:?     'g_tTex2df4a' (layout( rgb10_a2ui) uniform image2DArray)
+0:?     'g_tTex2di4a' (layout( r8ui) uniform iimage2DArray)
+0:?     'g_tTex2du4a' (layout( rgba16f) uniform uimage2DArray)
+0:?     'g_tTex01' (layout( rgba8) uniform iimage2DArray)
+0:?     'g_tTex02' (layout( rg16f) uniform iimage2DArray)
+0:?     'g_tTex03' (layout( r16f) uniform iimage2DArray)
+0:?     'g_tTex04' (layout( rgb10_a2) uniform iimage2DArray)
+0:?     'g_tTex05' (layout( rg16) uniform iimage2DArray)
+0:?     'g_tTex06' (layout( r32f) uniform iimage2DArray)
+0:?     'g_tTex07' (layout( rgba16) uniform iimage2DArray)
+0:?     'g_tTex08' (layout( r16) uniform iimage2DArray)
+0:?     'g_tTex09' (layout( r8) uniform iimage2DArray)
+0:?     'g_tTex10' (layout( rgba16_snorm) uniform iimage2DArray)
+0:?     'g_tTex11' (layout( rg16_snorm) uniform iimage2DArray)
+0:?     'g_tTex12' (layout( r16_snorm) uniform iimage2DArray)
+0:?     'g_tTex13' (layout( r8_snorm) uniform iimage2DArray)
+0:?     'g_tTex14' (layout( rgba32i) uniform iimage2DArray)
+0:?     'g_tTex15' (layout( r32i) uniform iimage2DArray)
+0:?     'g_tTex16' (layout( r32ui) uniform iimage2DArray)
+0:?     'g_tTex17' (layout( rg16i) uniform iimage2DArray)
+0:?     'g_tTex18' (layout( r16i) uniform iimage2DArray)
+0:?     'g_tTex19' (layout( rg32i) uniform iimage2DArray)
+0:?     'g_tTex20' (layout( rg8i) uniform iimage2DArray)
+0:?     'g_tTex21' (layout( rg8ui) uniform iimage2DArray)
+0:?     'g_tTex22' (layout( rgba32ui) uniform iimage2DArray)
+0:?     'g_tTex23' (layout( rgba16ui) uniform iimage2DArray)
+0:?     'g_tTex24' (layout( rg32ui) uniform iimage2DArray)
+0:?     'g_tTex25' (layout( rg16ui) uniform iimage2DArray)
+0:?     '@entryPointOutput.Depth' ( out float FragDepth)
+0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+using depth_any
+0:? Sequence
+0:56  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56    Function Parameters: 
+0:?     Sequence
+0:59      move second child to first child ( temp 4-component vector of float)
+0:59        Color: direct index for structure ( temp 4-component vector of float)
+0:59          'psout' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:59          Constant:
+0:59            0 (const int)
+0:59        Constant:
+0:59          1.000000
+0:59          1.000000
+0:59          1.000000
+0:59          1.000000
+0:60      move second child to first child ( temp float)
+0:60        Depth: direct index for structure ( temp float)
+0:60          'psout' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:60          Constant:
+0:60            1 (const int)
+0:60        Constant:
+0:60          1.000000
+0:62      Branch: Return with expression
+0:62        'psout' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56  Function Definition: main( ( temp void)
+0:56    Function Parameters: 
+0:?     Sequence
+0:56      Sequence
+0:56        move second child to first child ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56          'flattenTemp' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56          Function Call: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+0:56          Color: direct index for structure ( temp 4-component vector of float)
+0:56            'flattenTemp' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56            Constant:
+0:56              0 (const int)
+0:56        move second child to first child ( temp float)
+0:?           '@entryPointOutput.Depth' ( out float FragDepth)
+0:56          Depth: direct index for structure ( temp float)
+0:56            'flattenTemp' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
+0:56            Constant:
+0:56              1 (const int)
+0:?   Linker Objects
+0:?     'g_sSamp' (layout( binding=0) uniform sampler)
+0:?     'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D)
+0:?     'g_tTex1di4' (layout( rg32f) uniform iimage1D)
+0:?     'g_tTex1du4' (layout( rgba8_snorm) uniform uimage1D)
+0:?     'g_tTex2df4' (layout( rgba8i) uniform image2D)
+0:?     'g_tTex2di4' (layout( r11f_g11f_b10f) uniform iimage2D)
+0:?     'g_tTex2du4' (layout( r8_snorm) uniform uimage2D)
+0:?     'g_tTex3df4' (layout( rg8) readonly uniform image3D)
+0:?     'g_tTex3di4' (layout( rgba16i) writeonly uniform iimage3D)
+0:?     'g_tTex3du4' (layout( r8i) readonly writeonly uniform uimage3D)
+0:?     'g_tTex1df4a' (layout( rgba8ui) uniform image1DArray)
+0:?     'g_tTex1di4a' (layout( rg32ui) uniform iimage1DArray)
+0:?     'g_tTex1du4a' (layout( r16ui) uniform uimage1DArray)
+0:?     'g_tTex2df4a' (layout( rgb10_a2ui) uniform image2DArray)
+0:?     'g_tTex2di4a' (layout( r8ui) uniform iimage2DArray)
+0:?     'g_tTex2du4a' (layout( rgba16f) uniform uimage2DArray)
+0:?     'g_tTex01' (layout( rgba8) uniform iimage2DArray)
+0:?     'g_tTex02' (layout( rg16f) uniform iimage2DArray)
+0:?     'g_tTex03' (layout( r16f) uniform iimage2DArray)
+0:?     'g_tTex04' (layout( rgb10_a2) uniform iimage2DArray)
+0:?     'g_tTex05' (layout( rg16) uniform iimage2DArray)
+0:?     'g_tTex06' (layout( r32f) uniform iimage2DArray)
+0:?     'g_tTex07' (layout( rgba16) uniform iimage2DArray)
+0:?     'g_tTex08' (layout( r16) uniform iimage2DArray)
+0:?     'g_tTex09' (layout( r8) uniform iimage2DArray)
+0:?     'g_tTex10' (layout( rgba16_snorm) uniform iimage2DArray)
+0:?     'g_tTex11' (layout( rg16_snorm) uniform iimage2DArray)
+0:?     'g_tTex12' (layout( r16_snorm) uniform iimage2DArray)
+0:?     'g_tTex13' (layout( r8_snorm) uniform iimage2DArray)
+0:?     'g_tTex14' (layout( rgba32i) uniform iimage2DArray)
+0:?     'g_tTex15' (layout( r32i) uniform iimage2DArray)
+0:?     'g_tTex16' (layout( r32ui) uniform iimage2DArray)
+0:?     'g_tTex17' (layout( rg16i) uniform iimage2DArray)
+0:?     'g_tTex18' (layout( r16i) uniform iimage2DArray)
+0:?     'g_tTex19' (layout( rg32i) uniform iimage2DArray)
+0:?     'g_tTex20' (layout( rg8i) uniform iimage2DArray)
+0:?     'g_tTex21' (layout( rg8ui) uniform iimage2DArray)
+0:?     'g_tTex22' (layout( rgba32ui) uniform iimage2DArray)
+0:?     'g_tTex23' (layout( rgba16ui) uniform iimage2DArray)
+0:?     'g_tTex24' (layout( rg32ui) uniform iimage2DArray)
+0:?     'g_tTex25' (layout( rg16ui) uniform iimage2DArray)
+0:?     '@entryPointOutput.Depth' ( out float FragDepth)
+0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 160
+
+                              Capability Shader
+                              Capability Image1D
+                              Capability StorageImageExtendedFormats
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 29 33
+                              ExecutionMode 4 OriginUpperLeft
+                              ExecutionMode 4 DepthReplacing
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 8  "PS_OUTPUT"
+                              MemberName 8(PS_OUTPUT) 0  "Color"
+                              MemberName 8(PS_OUTPUT) 1  "Depth"
+                              Name 10  "@main("
+                              Name 13  "psout"
+                              Name 26  "flattenTemp"
+                              Name 29  "@entryPointOutput.Color"
+                              Name 33  "@entryPointOutput.Depth"
+                              Name 38  "g_sSamp"
+                              Name 41  "g_tTex1df4"
+                              Name 44  "g_tTex1di4"
+                              Name 48  "g_tTex1du4"
+                              Name 51  "g_tTex2df4"
+                              Name 54  "g_tTex2di4"
+                              Name 57  "g_tTex2du4"
+                              Name 60  "g_tTex3df4"
+                              Name 63  "g_tTex3di4"
+                              Name 66  "g_tTex3du4"
+                              Name 69  "g_tTex1df4a"
+                              Name 72  "g_tTex1di4a"
+                              Name 75  "g_tTex1du4a"
+                              Name 78  "g_tTex2df4a"
+                              Name 81  "g_tTex2di4a"
+                              Name 84  "g_tTex2du4a"
+                              Name 87  "g_tTex01"
+                              Name 90  "g_tTex02"
+                              Name 93  "g_tTex03"
+                              Name 96  "g_tTex04"
+                              Name 99  "g_tTex05"
+                              Name 102  "g_tTex06"
+                              Name 105  "g_tTex07"
+                              Name 108  "g_tTex08"
+                              Name 111  "g_tTex09"
+                              Name 114  "g_tTex10"
+                              Name 117  "g_tTex11"
+                              Name 120  "g_tTex12"
+                              Name 123  "g_tTex13"
+                              Name 126  "g_tTex14"
+                              Name 129  "g_tTex15"
+                              Name 132  "g_tTex16"
+                              Name 135  "g_tTex17"
+                              Name 138  "g_tTex18"
+                              Name 141  "g_tTex19"
+                              Name 144  "g_tTex20"
+                              Name 147  "g_tTex21"
+                              Name 150  "g_tTex22"
+                              Name 153  "g_tTex23"
+                              Name 156  "g_tTex24"
+                              Name 159  "g_tTex25"
+                              Decorate 29(@entryPointOutput.Color) Location 0
+                              Decorate 33(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 38(g_sSamp) DescriptorSet 0
+                              Decorate 38(g_sSamp) Binding 0
+                              Decorate 41(g_tTex1df4) DescriptorSet 0
+                              Decorate 41(g_tTex1df4) Binding 0
+                              Decorate 44(g_tTex1di4) DescriptorSet 0
+                              Decorate 44(g_tTex1di4) Binding 0
+                              Decorate 48(g_tTex1du4) DescriptorSet 0
+                              Decorate 48(g_tTex1du4) Binding 0
+                              Decorate 51(g_tTex2df4) DescriptorSet 0
+                              Decorate 51(g_tTex2df4) Binding 0
+                              Decorate 54(g_tTex2di4) DescriptorSet 0
+                              Decorate 54(g_tTex2di4) Binding 0
+                              Decorate 57(g_tTex2du4) DescriptorSet 0
+                              Decorate 57(g_tTex2du4) Binding 0
+                              Decorate 60(g_tTex3df4) DescriptorSet 0
+                              Decorate 60(g_tTex3df4) Binding 0
+                              Decorate 60(g_tTex3df4) NonWritable
+                              Decorate 63(g_tTex3di4) DescriptorSet 0
+                              Decorate 63(g_tTex3di4) Binding 0
+                              Decorate 63(g_tTex3di4) NonReadable
+                              Decorate 66(g_tTex3du4) DescriptorSet 0
+                              Decorate 66(g_tTex3du4) Binding 0
+                              Decorate 66(g_tTex3du4) NonWritable
+                              Decorate 66(g_tTex3du4) NonReadable
+                              Decorate 69(g_tTex1df4a) DescriptorSet 0
+                              Decorate 69(g_tTex1df4a) Binding 0
+                              Decorate 72(g_tTex1di4a) DescriptorSet 0
+                              Decorate 72(g_tTex1di4a) Binding 0
+                              Decorate 75(g_tTex1du4a) DescriptorSet 0
+                              Decorate 75(g_tTex1du4a) Binding 0
+                              Decorate 78(g_tTex2df4a) DescriptorSet 0
+                              Decorate 78(g_tTex2df4a) Binding 0
+                              Decorate 81(g_tTex2di4a) DescriptorSet 0
+                              Decorate 81(g_tTex2di4a) Binding 0
+                              Decorate 84(g_tTex2du4a) DescriptorSet 0
+                              Decorate 84(g_tTex2du4a) Binding 0
+                              Decorate 87(g_tTex01) DescriptorSet 0
+                              Decorate 87(g_tTex01) Binding 0
+                              Decorate 90(g_tTex02) DescriptorSet 0
+                              Decorate 90(g_tTex02) Binding 0
+                              Decorate 93(g_tTex03) DescriptorSet 0
+                              Decorate 93(g_tTex03) Binding 0
+                              Decorate 96(g_tTex04) DescriptorSet 0
+                              Decorate 96(g_tTex04) Binding 0
+                              Decorate 99(g_tTex05) DescriptorSet 0
+                              Decorate 99(g_tTex05) Binding 0
+                              Decorate 102(g_tTex06) DescriptorSet 0
+                              Decorate 102(g_tTex06) Binding 0
+                              Decorate 105(g_tTex07) DescriptorSet 0
+                              Decorate 105(g_tTex07) Binding 0
+                              Decorate 108(g_tTex08) DescriptorSet 0
+                              Decorate 108(g_tTex08) Binding 0
+                              Decorate 111(g_tTex09) DescriptorSet 0
+                              Decorate 111(g_tTex09) Binding 0
+                              Decorate 114(g_tTex10) DescriptorSet 0
+                              Decorate 114(g_tTex10) Binding 0
+                              Decorate 117(g_tTex11) DescriptorSet 0
+                              Decorate 117(g_tTex11) Binding 0
+                              Decorate 120(g_tTex12) DescriptorSet 0
+                              Decorate 120(g_tTex12) Binding 0
+                              Decorate 123(g_tTex13) DescriptorSet 0
+                              Decorate 123(g_tTex13) Binding 0
+                              Decorate 126(g_tTex14) DescriptorSet 0
+                              Decorate 126(g_tTex14) Binding 0
+                              Decorate 129(g_tTex15) DescriptorSet 0
+                              Decorate 129(g_tTex15) Binding 0
+                              Decorate 132(g_tTex16) DescriptorSet 0
+                              Decorate 132(g_tTex16) Binding 0
+                              Decorate 135(g_tTex17) DescriptorSet 0
+                              Decorate 135(g_tTex17) Binding 0
+                              Decorate 138(g_tTex18) DescriptorSet 0
+                              Decorate 138(g_tTex18) Binding 0
+                              Decorate 141(g_tTex19) DescriptorSet 0
+                              Decorate 141(g_tTex19) Binding 0
+                              Decorate 144(g_tTex20) DescriptorSet 0
+                              Decorate 144(g_tTex20) Binding 0
+                              Decorate 147(g_tTex21) DescriptorSet 0
+                              Decorate 147(g_tTex21) Binding 0
+                              Decorate 150(g_tTex22) DescriptorSet 0
+                              Decorate 150(g_tTex22) Binding 0
+                              Decorate 153(g_tTex23) DescriptorSet 0
+                              Decorate 153(g_tTex23) Binding 0
+                              Decorate 156(g_tTex24) DescriptorSet 0
+                              Decorate 156(g_tTex24) Binding 0
+                              Decorate 159(g_tTex25) DescriptorSet 0
+                              Decorate 159(g_tTex25) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+    8(PS_OUTPUT):             TypeStruct 7(fvec4) 6(float)
+               9:             TypeFunction 8(PS_OUTPUT)
+              12:             TypePointer Function 8(PS_OUTPUT)
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:    6(float) Constant 1065353216
+              17:    7(fvec4) ConstantComposite 16 16 16 16
+              18:             TypePointer Function 7(fvec4)
+              20:     14(int) Constant 1
+              21:             TypePointer Function 6(float)
+              28:             TypePointer Output 7(fvec4)
+29(@entryPointOutput.Color):     28(ptr) Variable Output
+              32:             TypePointer Output 6(float)
+33(@entryPointOutput.Depth):     32(ptr) Variable Output
+              36:             TypeSampler
+              37:             TypePointer UniformConstant 36
+     38(g_sSamp):     37(ptr) Variable UniformConstant
+              39:             TypeImage 6(float) 1D nonsampled format:Rgba32f
+              40:             TypePointer UniformConstant 39
+  41(g_tTex1df4):     40(ptr) Variable UniformConstant
+              42:             TypeImage 14(int) 1D nonsampled format:Rg32f
+              43:             TypePointer UniformConstant 42
+  44(g_tTex1di4):     43(ptr) Variable UniformConstant
+              45:             TypeInt 32 0
+              46:             TypeImage 45(int) 1D nonsampled format:Rgba8Snorm
+              47:             TypePointer UniformConstant 46
+  48(g_tTex1du4):     47(ptr) Variable UniformConstant
+              49:             TypeImage 6(float) 2D nonsampled format:Rgba8i
+              50:             TypePointer UniformConstant 49
+  51(g_tTex2df4):     50(ptr) Variable UniformConstant
+              52:             TypeImage 14(int) 2D nonsampled format:R11fG11fB10f
+              53:             TypePointer UniformConstant 52
+  54(g_tTex2di4):     53(ptr) Variable UniformConstant
+              55:             TypeImage 45(int) 2D nonsampled format:R8Snorm
+              56:             TypePointer UniformConstant 55
+  57(g_tTex2du4):     56(ptr) Variable UniformConstant
+              58:             TypeImage 6(float) 3D nonsampled format:Rg8
+              59:             TypePointer UniformConstant 58
+  60(g_tTex3df4):     59(ptr) Variable UniformConstant
+              61:             TypeImage 14(int) 3D nonsampled format:Rgba16i
+              62:             TypePointer UniformConstant 61
+  63(g_tTex3di4):     62(ptr) Variable UniformConstant
+              64:             TypeImage 45(int) 3D nonsampled format:R8i
+              65:             TypePointer UniformConstant 64
+  66(g_tTex3du4):     65(ptr) Variable UniformConstant
+              67:             TypeImage 6(float) 1D array nonsampled format:Rgba8ui
+              68:             TypePointer UniformConstant 67
+ 69(g_tTex1df4a):     68(ptr) Variable UniformConstant
+              70:             TypeImage 14(int) 1D array nonsampled format:Rg32ui
+              71:             TypePointer UniformConstant 70
+ 72(g_tTex1di4a):     71(ptr) Variable UniformConstant
+              73:             TypeImage 45(int) 1D array nonsampled format:R16ui
+              74:             TypePointer UniformConstant 73
+ 75(g_tTex1du4a):     74(ptr) Variable UniformConstant
+              76:             TypeImage 6(float) 2D array nonsampled format:Rgb10a2ui
+              77:             TypePointer UniformConstant 76
+ 78(g_tTex2df4a):     77(ptr) Variable UniformConstant
+              79:             TypeImage 14(int) 2D array nonsampled format:R8ui
+              80:             TypePointer UniformConstant 79
+ 81(g_tTex2di4a):     80(ptr) Variable UniformConstant
+              82:             TypeImage 45(int) 2D array nonsampled format:Rgba16f
+              83:             TypePointer UniformConstant 82
+ 84(g_tTex2du4a):     83(ptr) Variable UniformConstant
+              85:             TypeImage 14(int) 2D array nonsampled format:Rgba8
+              86:             TypePointer UniformConstant 85
+    87(g_tTex01):     86(ptr) Variable UniformConstant
+              88:             TypeImage 14(int) 2D array nonsampled format:Rg16f
+              89:             TypePointer UniformConstant 88
+    90(g_tTex02):     89(ptr) Variable UniformConstant
+              91:             TypeImage 14(int) 2D array nonsampled format:R16f
+              92:             TypePointer UniformConstant 91
+    93(g_tTex03):     92(ptr) Variable UniformConstant
+              94:             TypeImage 14(int) 2D array nonsampled format:Rgb10A2
+              95:             TypePointer UniformConstant 94
+    96(g_tTex04):     95(ptr) Variable UniformConstant
+              97:             TypeImage 14(int) 2D array nonsampled format:Rg16
+              98:             TypePointer UniformConstant 97
+    99(g_tTex05):     98(ptr) Variable UniformConstant
+             100:             TypeImage 14(int) 2D array nonsampled format:R32f
+             101:             TypePointer UniformConstant 100
+   102(g_tTex06):    101(ptr) Variable UniformConstant
+             103:             TypeImage 14(int) 2D array nonsampled format:Rgba16
+             104:             TypePointer UniformConstant 103
+   105(g_tTex07):    104(ptr) Variable UniformConstant
+             106:             TypeImage 14(int) 2D array nonsampled format:R16
+             107:             TypePointer UniformConstant 106
+   108(g_tTex08):    107(ptr) Variable UniformConstant
+             109:             TypeImage 14(int) 2D array nonsampled format:R8
+             110:             TypePointer UniformConstant 109
+   111(g_tTex09):    110(ptr) Variable UniformConstant
+             112:             TypeImage 14(int) 2D array nonsampled format:Rgba16Snorm
+             113:             TypePointer UniformConstant 112
+   114(g_tTex10):    113(ptr) Variable UniformConstant
+             115:             TypeImage 14(int) 2D array nonsampled format:Rg16Snorm
+             116:             TypePointer UniformConstant 115
+   117(g_tTex11):    116(ptr) Variable UniformConstant
+             118:             TypeImage 14(int) 2D array nonsampled format:R16Snorm
+             119:             TypePointer UniformConstant 118
+   120(g_tTex12):    119(ptr) Variable UniformConstant
+             121:             TypeImage 14(int) 2D array nonsampled format:R8Snorm
+             122:             TypePointer UniformConstant 121
+   123(g_tTex13):    122(ptr) Variable UniformConstant
+             124:             TypeImage 14(int) 2D array nonsampled format:Rgba32i
+             125:             TypePointer UniformConstant 124
+   126(g_tTex14):    125(ptr) Variable UniformConstant
+             127:             TypeImage 14(int) 2D array nonsampled format:R32i
+             128:             TypePointer UniformConstant 127
+   129(g_tTex15):    128(ptr) Variable UniformConstant
+             130:             TypeImage 14(int) 2D array nonsampled format:R32ui
+             131:             TypePointer UniformConstant 130
+   132(g_tTex16):    131(ptr) Variable UniformConstant
+             133:             TypeImage 14(int) 2D array nonsampled format:Rg16i
+             134:             TypePointer UniformConstant 133
+   135(g_tTex17):    134(ptr) Variable UniformConstant
+             136:             TypeImage 14(int) 2D array nonsampled format:R16i
+             137:             TypePointer UniformConstant 136
+   138(g_tTex18):    137(ptr) Variable UniformConstant
+             139:             TypeImage 14(int) 2D array nonsampled format:Rg32i
+             140:             TypePointer UniformConstant 139
+   141(g_tTex19):    140(ptr) Variable UniformConstant
+             142:             TypeImage 14(int) 2D array nonsampled format:Rg8i
+             143:             TypePointer UniformConstant 142
+   144(g_tTex20):    143(ptr) Variable UniformConstant
+             145:             TypeImage 14(int) 2D array nonsampled format:Rg8ui
+             146:             TypePointer UniformConstant 145
+   147(g_tTex21):    146(ptr) Variable UniformConstant
+             148:             TypeImage 14(int) 2D array nonsampled format:Rgba32ui
+             149:             TypePointer UniformConstant 148
+   150(g_tTex22):    149(ptr) Variable UniformConstant
+             151:             TypeImage 14(int) 2D array nonsampled format:Rgba16ui
+             152:             TypePointer UniformConstant 151
+   153(g_tTex23):    152(ptr) Variable UniformConstant
+             154:             TypeImage 14(int) 2D array nonsampled format:Rg32ui
+             155:             TypePointer UniformConstant 154
+   156(g_tTex24):    155(ptr) Variable UniformConstant
+             157:             TypeImage 14(int) 2D array nonsampled format:Rg16ui
+             158:             TypePointer UniformConstant 157
+   159(g_tTex25):    158(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+ 26(flattenTemp):     12(ptr) Variable Function
+              27:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 26(flattenTemp) 27
+              30:     18(ptr) AccessChain 26(flattenTemp) 15
+              31:    7(fvec4) Load 30
+                              Store 29(@entryPointOutput.Color) 31
+              34:     21(ptr) AccessChain 26(flattenTemp) 20
+              35:    6(float) Load 34
+                              Store 33(@entryPointOutput.Depth) 35
+                              Return
+                              FunctionEnd
+      10(@main():8(PS_OUTPUT) Function None 9
+              11:             Label
+       13(psout):     12(ptr) Variable Function
+              19:     18(ptr) AccessChain 13(psout) 15
+                              Store 19 17
+              22:     21(ptr) AccessChain 13(psout) 20
+                              Store 22 16
+              23:8(PS_OUTPUT) Load 13(psout)
+                              ReturnValue 23
+                              FunctionEnd
diff --git a/Test/baseResults/nonuniform.frag.out b/Test/baseResults/nonuniform.frag.out
index 0df8cfc..9054c2c 100644
--- a/Test/baseResults/nonuniform.frag.out
+++ b/Test/baseResults/nonuniform.frag.out
@@ -40,6 +40,13 @@
 0:27                2 (const int)
 0:28      'nu_li' ( nonuniform temp int)
 0:29      'nu_li' ( nonuniform temp int)
+0:30      move second child to first child ( temp int)
+0:30        'nu_li' ( nonuniform temp int)
+0:30        indirect index ( nonuniform temp int)
+0:30          'table' ( temp 5-element array of int)
+0:30          copy object ( nonuniform temp int)
+0:30            Constant:
+0:30              3 (const int)
 0:?   Linker Objects
 0:?     'nonuniformEXT' ( global int)
 0:?     'nu_inv4' ( smooth nonuniform in 4-component vector of float)
@@ -83,6 +90,13 @@
 0:27                2 (const int)
 0:28      'nu_li' ( nonuniform temp int)
 0:29      'nu_li' ( nonuniform temp int)
+0:30      move second child to first child ( temp int)
+0:30        'nu_li' ( nonuniform temp int)
+0:30        indirect index ( nonuniform temp int)
+0:30          'table' ( temp 5-element array of int)
+0:30          copy object ( nonuniform temp int)
+0:30            Constant:
+0:30              3 (const int)
 0:?   Linker Objects
 0:?     'nonuniformEXT' ( global int)
 0:?     'nu_inv4' ( smooth nonuniform in 4-component vector of float)
diff --git a/Test/baseResults/spv.bufferhandleUvec2.frag.out b/Test/baseResults/spv.bufferhandleUvec2.frag.out
new file mode 100755
index 0000000..1e0cbcd
--- /dev/null
+++ b/Test/baseResults/spv.bufferhandleUvec2.frag.out
@@ -0,0 +1,133 @@
+spv.bufferhandleUvec2.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 71
+
+                              Capability Shader
+                              Capability PhysicalStorageBufferAddressesEXT
+                              Extension  "SPV_KHR_physical_storage_buffer"
+                              Extension  "SPV_KHR_storage_buffer_storage_class"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel PhysicalStorageBuffer64EXT GLSL450
+                              EntryPoint Fragment 4  "main" 16 19
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_buffer_reference"
+                              SourceExtension  "GL_EXT_buffer_reference_uvec2"
+                              Name 4  "main"
+                              Name 8  "blockType"
+                              MemberName 8(blockType) 0  "a"
+                              MemberName 8(blockType) 1  "b"
+                              MemberName 8(blockType) 2  "c"
+                              MemberName 8(blockType) 3  "d"
+                              MemberName 8(blockType) 4  "e"
+                              Name 13  "b1"
+                              Name 16  "h"
+                              Name 19  "i"
+                              Name 34  "b2"
+                              Name 37  "b3"
+                              Name 46  "j"
+                              Name 54  "carry"
+                              Name 55  "ResType"
+                              Name 68  "t2"
+                              MemberName 68(t2) 0  "f"
+                              MemberName 68(t2) 1  "g"
+                              Name 70  "t"
+                              MemberDecorate 8(blockType) 0 Offset 0
+                              MemberDecorate 8(blockType) 1 Offset 4
+                              MemberDecorate 8(blockType) 2 Offset 8
+                              MemberDecorate 8(blockType) 3 Offset 12
+                              MemberDecorate 8(blockType) 4 Offset 16
+                              Decorate 8(blockType) Block
+                              Decorate 13(b1) DecorationAliasedPointerEXT
+                              Decorate 16(h) Flat
+                              Decorate 19(i) Flat
+                              Decorate 34(b2) DecorationAliasedPointerEXT
+                              Decorate 37(b3) DecorationAliasedPointerEXT
+                              MemberDecorate 68(t2) 0 Offset 0
+                              MemberDecorate 68(t2) 1 Offset 8
+                              Decorate 68(t2) Block
+                              Decorate 70(t) DescriptorSet 0
+                              Decorate 70(t) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+                              TypeForwardPointer 6 PhysicalStorageBufferEXT
+               7:             TypeInt 32 1
+    8(blockType):             TypeStruct 7(int) 7(int) 7(int) 7(int) 7(int)
+               6:             TypePointer PhysicalStorageBufferEXT 8(blockType)
+               9:             TypeInt 32 0
+              10:      9(int) Constant 2
+              11:             TypeArray 6(ptr) 10
+              12:             TypePointer Function 11
+              14:             TypeVector 9(int) 2
+              15:             TypePointer Input 14(ivec2)
+           16(h):     15(ptr) Variable Input
+           19(i):     15(ptr) Variable Input
+              23:      7(int) Constant 0
+              24:             TypePointer Function 6(ptr)
+              27:      7(int) Constant 1
+              30:             TypePointer PhysicalStorageBufferEXT 7(int)
+              45:             TypePointer Function 14(ivec2)
+              49:      9(int) Constant 0
+              50:             TypePointer Function 9(int)
+              53:      9(int) Constant 256
+     55(ResType):             TypeStruct 9(int) 9(int)
+              61:      9(int) Constant 1
+          68(t2):             TypeStruct 6(ptr) 6(ptr)
+              69:             TypePointer StorageBuffer 68(t2)
+           70(t):     69(ptr) Variable StorageBuffer
+         4(main):           2 Function None 3
+               5:             Label
+          13(b1):     12(ptr) Variable Function
+          34(b2):     24(ptr) Variable Function
+          37(b3):     24(ptr) Variable Function
+           46(j):     45(ptr) Variable Function
+       54(carry):     50(ptr) Variable Function
+              17:   14(ivec2) Load 16(h)
+              18:      6(ptr) Bitcast 17
+              20:   14(ivec2) Load 19(i)
+              21:      6(ptr) Bitcast 20
+              22:          11 CompositeConstruct 18 21
+                              Store 13(b1) 22
+              25:     24(ptr) AccessChain 13(b1) 23
+              26:      6(ptr) Load 25
+              28:     24(ptr) AccessChain 13(b1) 27
+              29:      6(ptr) Load 28
+              31:     30(ptr) AccessChain 29 27
+              32:      7(int) Load 31 Aligned 4
+              33:     30(ptr) AccessChain 26 23
+                              Store 33 32 Aligned 16
+              35:   14(ivec2) Load 16(h)
+              36:      6(ptr) Bitcast 35
+                              Store 34(b2) 36
+              38:   14(ivec2) Load 19(i)
+              39:      6(ptr) Bitcast 38
+                              Store 37(b3) 39
+              40:      6(ptr) Load 34(b2)
+              41:      6(ptr) Load 37(b3)
+              42:     30(ptr) AccessChain 41 27
+              43:      7(int) Load 42 Aligned 4
+              44:     30(ptr) AccessChain 40 23
+                              Store 44 43 Aligned 16
+              47:      6(ptr) Load 34(b2)
+              48:   14(ivec2) Bitcast 47
+                              Store 46(j) 48
+              51:     50(ptr) AccessChain 46(j) 49
+              52:      9(int) Load 51
+              56: 55(ResType) IAddCarry 52 53
+              57:      9(int) CompositeExtract 56 1
+                              Store 54(carry) 57
+              58:      9(int) CompositeExtract 56 0
+              59:     50(ptr) AccessChain 46(j) 49
+                              Store 59 58
+              60:      9(int) Load 54(carry)
+              62:     50(ptr) AccessChain 46(j) 61
+              63:      9(int) Load 62
+              64:      9(int) IAdd 63 60
+              65:     50(ptr) AccessChain 46(j) 61
+                              Store 65 64
+              66:   14(ivec2) Load 46(j)
+              67:      6(ptr) Bitcast 66
+                              Store 34(b2) 67
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out
index 931ba8d..49bcca6 100644
--- a/Test/baseResults/spv.specConstant.vert.out
+++ b/Test/baseResults/spv.specConstant.vert.out
@@ -11,7 +11,7 @@
                               Source GLSL 400
                               Name 4  "main"
                               Name 9  "arraySize"
-                              Name 14  "foo(vf4[s2769];"
+                              Name 14  "foo(vf4[s4393];"
                               Name 13  "p"
                               Name 17  "builtin_spec_constant("
                               Name 20  "color"
@@ -102,10 +102,10 @@
                               Store 20(color) 46
               48:          10 Load 22(ucol)
                               Store 47(param) 48
-              49:           2 FunctionCall 14(foo(vf4[s2769];) 47(param)
+              49:           2 FunctionCall 14(foo(vf4[s4393];) 47(param)
                               Return
                               FunctionEnd
-14(foo(vf4[s2769];):           2 Function None 12
+14(foo(vf4[s4393];):           2 Function None 12
            13(p):     11(ptr) FunctionParameter
               15:             Label
               54:     24(ptr) AccessChain 53(dupUcol) 23
diff --git a/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
new file mode 100644
index 0000000..453d6fc
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
@@ -0,0 +1,4280 @@
+spv.subgroupExtendedTypesArithmetic.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 3665
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformArithmetic
+                              Capability StorageUniformBufferBlock16
+                              Capability StorageBuffer8BitAccess
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_float16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int64"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int8"
+                              SourceExtension  "GL_KHR_shader_subgroup_arithmetic"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 31  "Buffers"
+                              MemberName 31(Buffers) 0  "i8"
+                              MemberName 31(Buffers) 1  "u8"
+                              MemberName 31(Buffers) 2  "i16"
+                              MemberName 31(Buffers) 3  "u16"
+                              MemberName 31(Buffers) 4  "i64"
+                              MemberName 31(Buffers) 5  "u64"
+                              MemberName 31(Buffers) 6  "f16"
+                              Name 34  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 31(Buffers) 0 Offset 0
+                              MemberDecorate 31(Buffers) 1 Offset 4
+                              MemberDecorate 31(Buffers) 2 Offset 8
+                              MemberDecorate 31(Buffers) 3 Offset 16
+                              MemberDecorate 31(Buffers) 4 Offset 32
+                              MemberDecorate 31(Buffers) 5 Offset 64
+                              MemberDecorate 31(Buffers) 6 Offset 96
+                              Decorate 31(Buffers) Block
+                              Decorate 34(data) DescriptorSet 0
+                              Decorate 34(data) Binding 0
+                              Decorate 3664 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeInt 8 1
+              18:             TypeVector 17(int8_t) 4
+              19:             TypeInt 8 0
+              20:             TypeVector 19(int8_t) 4
+              21:             TypeInt 16 1
+              22:             TypeVector 21(int16_t) 4
+              23:             TypeInt 16 0
+              24:             TypeVector 23(int16_t) 4
+              25:             TypeInt 64 1
+              26:             TypeVector 25(int64_t) 4
+              27:             TypeInt 64 0
+              28:             TypeVector 27(int64_t) 4
+              29:             TypeFloat 16
+              30:             TypeVector 29(float16_t) 4
+     31(Buffers):             TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+              32:             TypeArray 31(Buffers) 15
+              33:             TypePointer StorageBuffer 32
+        34(data):     33(ptr) Variable StorageBuffer
+              36:             TypeInt 32 1
+              37:     36(int) Constant 0
+              38:      6(int) Constant 0
+              39:             TypePointer StorageBuffer 17(int8_t)
+              42:      6(int) Constant 3
+              46:     36(int) Constant 1
+              47:             TypeVector 17(int8_t) 2
+              48:             TypePointer StorageBuffer 18(i8vec4)
+              57:     36(int) Constant 2
+              58:             TypeVector 17(int8_t) 3
+              67:     36(int) Constant 3
+             593:             TypePointer StorageBuffer 19(int8_t)
+             599:             TypeVector 19(int8_t) 2
+             600:             TypePointer StorageBuffer 20(i8vec4)
+             609:             TypeVector 19(int8_t) 3
+            1143:             TypePointer StorageBuffer 21(int16_t)
+            1149:             TypeVector 21(int16_t) 2
+            1150:             TypePointer StorageBuffer 22(i16vec4)
+            1159:             TypeVector 21(int16_t) 3
+            1693:             TypePointer StorageBuffer 23(int16_t)
+            1699:             TypeVector 23(int16_t) 2
+            1700:             TypePointer StorageBuffer 24(i16vec4)
+            1709:             TypeVector 23(int16_t) 3
+            2243:     36(int) Constant 4
+            2244:             TypePointer StorageBuffer 25(int64_t)
+            2250:             TypeVector 25(int64_t) 2
+            2251:             TypePointer StorageBuffer 26(i64vec4)
+            2260:             TypeVector 25(int64_t) 3
+            2794:     36(int) Constant 5
+            2795:             TypePointer StorageBuffer 27(int64_t)
+            2801:             TypeVector 27(int64_t) 2
+            2802:             TypePointer StorageBuffer 28(i64vec4)
+            2811:             TypeVector 27(int64_t) 3
+            3345:     36(int) Constant 6
+            3346:             TypePointer StorageBuffer 29(float16_t)
+            3352:             TypeVector 29(float16_t) 2
+            3353:             TypePointer StorageBuffer 30(f16vec4)
+            3362:             TypeVector 29(float16_t) 3
+            3661:             TypeVector 6(int) 3
+            3662:      6(int) Constant 8
+            3663:      6(int) Constant 1
+            3664: 3661(ivec3) ConstantComposite 3662 3663 3663
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              35:      6(int) Load 8(invocation)
+              40:     39(ptr) AccessChain 34(data) 37 37 38
+              41:  17(int8_t) Load 40
+              43:  17(int8_t) GroupNonUniformIAdd 42 Reduce 41
+              44:     39(ptr) AccessChain 34(data) 35 37 38
+                              Store 44 43
+              45:      6(int) Load 8(invocation)
+              49:     48(ptr) AccessChain 34(data) 46 37
+              50:  18(i8vec4) Load 49
+              51:  47(i8vec2) VectorShuffle 50 50 0 1
+              52:  47(i8vec2) GroupNonUniformIAdd 42 Reduce 51
+              53:     48(ptr) AccessChain 34(data) 45 37
+              54:  18(i8vec4) Load 53
+              55:  18(i8vec4) VectorShuffle 54 52 4 5 2 3
+                              Store 53 55
+              56:      6(int) Load 8(invocation)
+              59:     48(ptr) AccessChain 34(data) 57 37
+              60:  18(i8vec4) Load 59
+              61:  58(i8vec3) VectorShuffle 60 60 0 1 2
+              62:  58(i8vec3) GroupNonUniformIAdd 42 Reduce 61
+              63:     48(ptr) AccessChain 34(data) 56 37
+              64:  18(i8vec4) Load 63
+              65:  18(i8vec4) VectorShuffle 64 62 4 5 6 3
+                              Store 63 65
+              66:      6(int) Load 8(invocation)
+              68:     48(ptr) AccessChain 34(data) 67 37
+              69:  18(i8vec4) Load 68
+              70:  18(i8vec4) GroupNonUniformIAdd 42 Reduce 69
+              71:     48(ptr) AccessChain 34(data) 66 37
+                              Store 71 70
+              72:      6(int) Load 8(invocation)
+              73:     39(ptr) AccessChain 34(data) 37 37 38
+              74:  17(int8_t) Load 73
+              75:  17(int8_t) GroupNonUniformIMul 42 Reduce 74
+              76:     39(ptr) AccessChain 34(data) 72 37 38
+                              Store 76 75
+              77:      6(int) Load 8(invocation)
+              78:     48(ptr) AccessChain 34(data) 46 37
+              79:  18(i8vec4) Load 78
+              80:  47(i8vec2) VectorShuffle 79 79 0 1
+              81:  47(i8vec2) GroupNonUniformIMul 42 Reduce 80
+              82:     48(ptr) AccessChain 34(data) 77 37
+              83:  18(i8vec4) Load 82
+              84:  18(i8vec4) VectorShuffle 83 81 4 5 2 3
+                              Store 82 84
+              85:      6(int) Load 8(invocation)
+              86:     48(ptr) AccessChain 34(data) 57 37
+              87:  18(i8vec4) Load 86
+              88:  58(i8vec3) VectorShuffle 87 87 0 1 2
+              89:  58(i8vec3) GroupNonUniformIMul 42 Reduce 88
+              90:     48(ptr) AccessChain 34(data) 85 37
+              91:  18(i8vec4) Load 90
+              92:  18(i8vec4) VectorShuffle 91 89 4 5 6 3
+                              Store 90 92
+              93:      6(int) Load 8(invocation)
+              94:     48(ptr) AccessChain 34(data) 67 37
+              95:  18(i8vec4) Load 94
+              96:  18(i8vec4) GroupNonUniformIMul 42 Reduce 95
+              97:     48(ptr) AccessChain 34(data) 93 37
+                              Store 97 96
+              98:      6(int) Load 8(invocation)
+              99:     39(ptr) AccessChain 34(data) 37 37 38
+             100:  17(int8_t) Load 99
+             101:  17(int8_t) GroupNonUniformSMin 42 Reduce 100
+             102:     39(ptr) AccessChain 34(data) 98 37 38
+                              Store 102 101
+             103:      6(int) Load 8(invocation)
+             104:     48(ptr) AccessChain 34(data) 46 37
+             105:  18(i8vec4) Load 104
+             106:  47(i8vec2) VectorShuffle 105 105 0 1
+             107:  47(i8vec2) GroupNonUniformSMin 42 Reduce 106
+             108:     48(ptr) AccessChain 34(data) 103 37
+             109:  18(i8vec4) Load 108
+             110:  18(i8vec4) VectorShuffle 109 107 4 5 2 3
+                              Store 108 110
+             111:      6(int) Load 8(invocation)
+             112:     48(ptr) AccessChain 34(data) 57 37
+             113:  18(i8vec4) Load 112
+             114:  58(i8vec3) VectorShuffle 113 113 0 1 2
+             115:  58(i8vec3) GroupNonUniformSMin 42 Reduce 114
+             116:     48(ptr) AccessChain 34(data) 111 37
+             117:  18(i8vec4) Load 116
+             118:  18(i8vec4) VectorShuffle 117 115 4 5 6 3
+                              Store 116 118
+             119:      6(int) Load 8(invocation)
+             120:     48(ptr) AccessChain 34(data) 67 37
+             121:  18(i8vec4) Load 120
+             122:  18(i8vec4) GroupNonUniformSMin 42 Reduce 121
+             123:     48(ptr) AccessChain 34(data) 119 37
+                              Store 123 122
+             124:      6(int) Load 8(invocation)
+             125:     39(ptr) AccessChain 34(data) 37 37 38
+             126:  17(int8_t) Load 125
+             127:  17(int8_t) GroupNonUniformSMax 42 Reduce 126
+             128:     39(ptr) AccessChain 34(data) 124 37 38
+                              Store 128 127
+             129:      6(int) Load 8(invocation)
+             130:     48(ptr) AccessChain 34(data) 46 37
+             131:  18(i8vec4) Load 130
+             132:  47(i8vec2) VectorShuffle 131 131 0 1
+             133:  47(i8vec2) GroupNonUniformSMax 42 Reduce 132
+             134:     48(ptr) AccessChain 34(data) 129 37
+             135:  18(i8vec4) Load 134
+             136:  18(i8vec4) VectorShuffle 135 133 4 5 2 3
+                              Store 134 136
+             137:      6(int) Load 8(invocation)
+             138:     48(ptr) AccessChain 34(data) 57 37
+             139:  18(i8vec4) Load 138
+             140:  58(i8vec3) VectorShuffle 139 139 0 1 2
+             141:  58(i8vec3) GroupNonUniformSMax 42 Reduce 140
+             142:     48(ptr) AccessChain 34(data) 137 37
+             143:  18(i8vec4) Load 142
+             144:  18(i8vec4) VectorShuffle 143 141 4 5 6 3
+                              Store 142 144
+             145:      6(int) Load 8(invocation)
+             146:     48(ptr) AccessChain 34(data) 67 37
+             147:  18(i8vec4) Load 146
+             148:  18(i8vec4) GroupNonUniformSMax 42 Reduce 147
+             149:     48(ptr) AccessChain 34(data) 145 37
+                              Store 149 148
+             150:      6(int) Load 8(invocation)
+             151:     39(ptr) AccessChain 34(data) 37 37 38
+             152:  17(int8_t) Load 151
+             153:  17(int8_t) GroupNonUniformBitwiseAnd 42 Reduce 152
+             154:     39(ptr) AccessChain 34(data) 150 37 38
+                              Store 154 153
+             155:      6(int) Load 8(invocation)
+             156:     48(ptr) AccessChain 34(data) 46 37
+             157:  18(i8vec4) Load 156
+             158:  47(i8vec2) VectorShuffle 157 157 0 1
+             159:  47(i8vec2) GroupNonUniformBitwiseAnd 42 Reduce 158
+             160:     48(ptr) AccessChain 34(data) 155 37
+             161:  18(i8vec4) Load 160
+             162:  18(i8vec4) VectorShuffle 161 159 4 5 2 3
+                              Store 160 162
+             163:      6(int) Load 8(invocation)
+             164:     48(ptr) AccessChain 34(data) 57 37
+             165:  18(i8vec4) Load 164
+             166:  58(i8vec3) VectorShuffle 165 165 0 1 2
+             167:  58(i8vec3) GroupNonUniformBitwiseAnd 42 Reduce 166
+             168:     48(ptr) AccessChain 34(data) 163 37
+             169:  18(i8vec4) Load 168
+             170:  18(i8vec4) VectorShuffle 169 167 4 5 6 3
+                              Store 168 170
+             171:      6(int) Load 8(invocation)
+             172:     48(ptr) AccessChain 34(data) 67 37
+             173:  18(i8vec4) Load 172
+             174:  18(i8vec4) GroupNonUniformBitwiseAnd 42 Reduce 173
+             175:     48(ptr) AccessChain 34(data) 171 37
+                              Store 175 174
+             176:      6(int) Load 8(invocation)
+             177:     39(ptr) AccessChain 34(data) 37 37 38
+             178:  17(int8_t) Load 177
+             179:  17(int8_t) GroupNonUniformBitwiseOr 42 Reduce 178
+             180:     39(ptr) AccessChain 34(data) 176 37 38
+                              Store 180 179
+             181:      6(int) Load 8(invocation)
+             182:     48(ptr) AccessChain 34(data) 46 37
+             183:  18(i8vec4) Load 182
+             184:  47(i8vec2) VectorShuffle 183 183 0 1
+             185:  47(i8vec2) GroupNonUniformBitwiseOr 42 Reduce 184
+             186:     48(ptr) AccessChain 34(data) 181 37
+             187:  18(i8vec4) Load 186
+             188:  18(i8vec4) VectorShuffle 187 185 4 5 2 3
+                              Store 186 188
+             189:      6(int) Load 8(invocation)
+             190:     48(ptr) AccessChain 34(data) 57 37
+             191:  18(i8vec4) Load 190
+             192:  58(i8vec3) VectorShuffle 191 191 0 1 2
+             193:  58(i8vec3) GroupNonUniformBitwiseOr 42 Reduce 192
+             194:     48(ptr) AccessChain 34(data) 189 37
+             195:  18(i8vec4) Load 194
+             196:  18(i8vec4) VectorShuffle 195 193 4 5 6 3
+                              Store 194 196
+             197:      6(int) Load 8(invocation)
+             198:     48(ptr) AccessChain 34(data) 67 37
+             199:  18(i8vec4) Load 198
+             200:  18(i8vec4) GroupNonUniformBitwiseOr 42 Reduce 199
+             201:     48(ptr) AccessChain 34(data) 197 37
+                              Store 201 200
+             202:      6(int) Load 8(invocation)
+             203:     39(ptr) AccessChain 34(data) 37 37 38
+             204:  17(int8_t) Load 203
+             205:  17(int8_t) GroupNonUniformBitwiseXor 42 Reduce 204
+             206:     39(ptr) AccessChain 34(data) 202 37 38
+                              Store 206 205
+             207:      6(int) Load 8(invocation)
+             208:     48(ptr) AccessChain 34(data) 46 37
+             209:  18(i8vec4) Load 208
+             210:  47(i8vec2) VectorShuffle 209 209 0 1
+             211:  47(i8vec2) GroupNonUniformBitwiseXor 42 Reduce 210
+             212:     48(ptr) AccessChain 34(data) 207 37
+             213:  18(i8vec4) Load 212
+             214:  18(i8vec4) VectorShuffle 213 211 4 5 2 3
+                              Store 212 214
+             215:      6(int) Load 8(invocation)
+             216:     48(ptr) AccessChain 34(data) 57 37
+             217:  18(i8vec4) Load 216
+             218:  58(i8vec3) VectorShuffle 217 217 0 1 2
+             219:  58(i8vec3) GroupNonUniformBitwiseXor 42 Reduce 218
+             220:     48(ptr) AccessChain 34(data) 215 37
+             221:  18(i8vec4) Load 220
+             222:  18(i8vec4) VectorShuffle 221 219 4 5 6 3
+                              Store 220 222
+             223:      6(int) Load 8(invocation)
+             224:     48(ptr) AccessChain 34(data) 67 37
+             225:  18(i8vec4) Load 224
+             226:  18(i8vec4) GroupNonUniformBitwiseXor 42 Reduce 225
+             227:     48(ptr) AccessChain 34(data) 223 37
+                              Store 227 226
+             228:      6(int) Load 8(invocation)
+             229:     39(ptr) AccessChain 34(data) 37 37 38
+             230:  17(int8_t) Load 229
+             231:  17(int8_t) GroupNonUniformIAdd 42 InclusiveScan 230
+             232:     39(ptr) AccessChain 34(data) 228 37 38
+                              Store 232 231
+             233:      6(int) Load 8(invocation)
+             234:     48(ptr) AccessChain 34(data) 46 37
+             235:  18(i8vec4) Load 234
+             236:  47(i8vec2) VectorShuffle 235 235 0 1
+             237:  47(i8vec2) GroupNonUniformIAdd 42 InclusiveScan 236
+             238:     48(ptr) AccessChain 34(data) 233 37
+             239:  18(i8vec4) Load 238
+             240:  18(i8vec4) VectorShuffle 239 237 4 5 2 3
+                              Store 238 240
+             241:      6(int) Load 8(invocation)
+             242:     48(ptr) AccessChain 34(data) 57 37
+             243:  18(i8vec4) Load 242
+             244:  58(i8vec3) VectorShuffle 243 243 0 1 2
+             245:  58(i8vec3) GroupNonUniformIAdd 42 InclusiveScan 244
+             246:     48(ptr) AccessChain 34(data) 241 37
+             247:  18(i8vec4) Load 246
+             248:  18(i8vec4) VectorShuffle 247 245 4 5 6 3
+                              Store 246 248
+             249:      6(int) Load 8(invocation)
+             250:     48(ptr) AccessChain 34(data) 67 37
+             251:  18(i8vec4) Load 250
+             252:  18(i8vec4) GroupNonUniformIAdd 42 InclusiveScan 251
+             253:     48(ptr) AccessChain 34(data) 249 37
+                              Store 253 252
+             254:      6(int) Load 8(invocation)
+             255:     39(ptr) AccessChain 34(data) 37 37 38
+             256:  17(int8_t) Load 255
+             257:  17(int8_t) GroupNonUniformIMul 42 InclusiveScan 256
+             258:     39(ptr) AccessChain 34(data) 254 37 38
+                              Store 258 257
+             259:      6(int) Load 8(invocation)
+             260:     48(ptr) AccessChain 34(data) 46 37
+             261:  18(i8vec4) Load 260
+             262:  47(i8vec2) VectorShuffle 261 261 0 1
+             263:  47(i8vec2) GroupNonUniformIMul 42 InclusiveScan 262
+             264:     48(ptr) AccessChain 34(data) 259 37
+             265:  18(i8vec4) Load 264
+             266:  18(i8vec4) VectorShuffle 265 263 4 5 2 3
+                              Store 264 266
+             267:      6(int) Load 8(invocation)
+             268:     48(ptr) AccessChain 34(data) 57 37
+             269:  18(i8vec4) Load 268
+             270:  58(i8vec3) VectorShuffle 269 269 0 1 2
+             271:  58(i8vec3) GroupNonUniformIMul 42 InclusiveScan 270
+             272:     48(ptr) AccessChain 34(data) 267 37
+             273:  18(i8vec4) Load 272
+             274:  18(i8vec4) VectorShuffle 273 271 4 5 6 3
+                              Store 272 274
+             275:      6(int) Load 8(invocation)
+             276:     48(ptr) AccessChain 34(data) 67 37
+             277:  18(i8vec4) Load 276
+             278:  18(i8vec4) GroupNonUniformIMul 42 InclusiveScan 277
+             279:     48(ptr) AccessChain 34(data) 275 37
+                              Store 279 278
+             280:      6(int) Load 8(invocation)
+             281:     39(ptr) AccessChain 34(data) 37 37 38
+             282:  17(int8_t) Load 281
+             283:  17(int8_t) GroupNonUniformSMin 42 InclusiveScan 282
+             284:     39(ptr) AccessChain 34(data) 280 37 38
+                              Store 284 283
+             285:      6(int) Load 8(invocation)
+             286:     48(ptr) AccessChain 34(data) 46 37
+             287:  18(i8vec4) Load 286
+             288:  47(i8vec2) VectorShuffle 287 287 0 1
+             289:  47(i8vec2) GroupNonUniformSMin 42 InclusiveScan 288
+             290:     48(ptr) AccessChain 34(data) 285 37
+             291:  18(i8vec4) Load 290
+             292:  18(i8vec4) VectorShuffle 291 289 4 5 2 3
+                              Store 290 292
+             293:      6(int) Load 8(invocation)
+             294:     48(ptr) AccessChain 34(data) 57 37
+             295:  18(i8vec4) Load 294
+             296:  58(i8vec3) VectorShuffle 295 295 0 1 2
+             297:  58(i8vec3) GroupNonUniformSMin 42 InclusiveScan 296
+             298:     48(ptr) AccessChain 34(data) 293 37
+             299:  18(i8vec4) Load 298
+             300:  18(i8vec4) VectorShuffle 299 297 4 5 6 3
+                              Store 298 300
+             301:      6(int) Load 8(invocation)
+             302:     48(ptr) AccessChain 34(data) 67 37
+             303:  18(i8vec4) Load 302
+             304:  18(i8vec4) GroupNonUniformSMin 42 InclusiveScan 303
+             305:     48(ptr) AccessChain 34(data) 301 37
+                              Store 305 304
+             306:      6(int) Load 8(invocation)
+             307:     39(ptr) AccessChain 34(data) 37 37 38
+             308:  17(int8_t) Load 307
+             309:  17(int8_t) GroupNonUniformSMax 42 InclusiveScan 308
+             310:     39(ptr) AccessChain 34(data) 306 37 38
+                              Store 310 309
+             311:      6(int) Load 8(invocation)
+             312:     48(ptr) AccessChain 34(data) 46 37
+             313:  18(i8vec4) Load 312
+             314:  47(i8vec2) VectorShuffle 313 313 0 1
+             315:  47(i8vec2) GroupNonUniformSMax 42 InclusiveScan 314
+             316:     48(ptr) AccessChain 34(data) 311 37
+             317:  18(i8vec4) Load 316
+             318:  18(i8vec4) VectorShuffle 317 315 4 5 2 3
+                              Store 316 318
+             319:      6(int) Load 8(invocation)
+             320:     48(ptr) AccessChain 34(data) 57 37
+             321:  18(i8vec4) Load 320
+             322:  58(i8vec3) VectorShuffle 321 321 0 1 2
+             323:  58(i8vec3) GroupNonUniformSMax 42 InclusiveScan 322
+             324:     48(ptr) AccessChain 34(data) 319 37
+             325:  18(i8vec4) Load 324
+             326:  18(i8vec4) VectorShuffle 325 323 4 5 6 3
+                              Store 324 326
+             327:      6(int) Load 8(invocation)
+             328:     48(ptr) AccessChain 34(data) 67 37
+             329:  18(i8vec4) Load 328
+             330:  18(i8vec4) GroupNonUniformSMax 42 InclusiveScan 329
+             331:     48(ptr) AccessChain 34(data) 327 37
+                              Store 331 330
+             332:      6(int) Load 8(invocation)
+             333:     39(ptr) AccessChain 34(data) 37 37 38
+             334:  17(int8_t) Load 333
+             335:  17(int8_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 334
+             336:     39(ptr) AccessChain 34(data) 332 37 38
+                              Store 336 335
+             337:      6(int) Load 8(invocation)
+             338:     48(ptr) AccessChain 34(data) 46 37
+             339:  18(i8vec4) Load 338
+             340:  47(i8vec2) VectorShuffle 339 339 0 1
+             341:  47(i8vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 340
+             342:     48(ptr) AccessChain 34(data) 337 37
+             343:  18(i8vec4) Load 342
+             344:  18(i8vec4) VectorShuffle 343 341 4 5 2 3
+                              Store 342 344
+             345:      6(int) Load 8(invocation)
+             346:     48(ptr) AccessChain 34(data) 57 37
+             347:  18(i8vec4) Load 346
+             348:  58(i8vec3) VectorShuffle 347 347 0 1 2
+             349:  58(i8vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 348
+             350:     48(ptr) AccessChain 34(data) 345 37
+             351:  18(i8vec4) Load 350
+             352:  18(i8vec4) VectorShuffle 351 349 4 5 6 3
+                              Store 350 352
+             353:      6(int) Load 8(invocation)
+             354:     48(ptr) AccessChain 34(data) 67 37
+             355:  18(i8vec4) Load 354
+             356:  18(i8vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 355
+             357:     48(ptr) AccessChain 34(data) 353 37
+                              Store 357 356
+             358:      6(int) Load 8(invocation)
+             359:     39(ptr) AccessChain 34(data) 37 37 38
+             360:  17(int8_t) Load 359
+             361:  17(int8_t) GroupNonUniformBitwiseOr 42 InclusiveScan 360
+             362:     39(ptr) AccessChain 34(data) 358 37 38
+                              Store 362 361
+             363:      6(int) Load 8(invocation)
+             364:     48(ptr) AccessChain 34(data) 46 37
+             365:  18(i8vec4) Load 364
+             366:  47(i8vec2) VectorShuffle 365 365 0 1
+             367:  47(i8vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 366
+             368:     48(ptr) AccessChain 34(data) 363 37
+             369:  18(i8vec4) Load 368
+             370:  18(i8vec4) VectorShuffle 369 367 4 5 2 3
+                              Store 368 370
+             371:      6(int) Load 8(invocation)
+             372:     48(ptr) AccessChain 34(data) 57 37
+             373:  18(i8vec4) Load 372
+             374:  58(i8vec3) VectorShuffle 373 373 0 1 2
+             375:  58(i8vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 374
+             376:     48(ptr) AccessChain 34(data) 371 37
+             377:  18(i8vec4) Load 376
+             378:  18(i8vec4) VectorShuffle 377 375 4 5 6 3
+                              Store 376 378
+             379:      6(int) Load 8(invocation)
+             380:     48(ptr) AccessChain 34(data) 67 37
+             381:  18(i8vec4) Load 380
+             382:  18(i8vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 381
+             383:     48(ptr) AccessChain 34(data) 379 37
+                              Store 383 382
+             384:      6(int) Load 8(invocation)
+             385:     39(ptr) AccessChain 34(data) 37 37 38
+             386:  17(int8_t) Load 385
+             387:  17(int8_t) GroupNonUniformBitwiseXor 42 InclusiveScan 386
+             388:     39(ptr) AccessChain 34(data) 384 37 38
+                              Store 388 387
+             389:      6(int) Load 8(invocation)
+             390:     48(ptr) AccessChain 34(data) 46 37
+             391:  18(i8vec4) Load 390
+             392:  47(i8vec2) VectorShuffle 391 391 0 1
+             393:  47(i8vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 392
+             394:     48(ptr) AccessChain 34(data) 389 37
+             395:  18(i8vec4) Load 394
+             396:  18(i8vec4) VectorShuffle 395 393 4 5 2 3
+                              Store 394 396
+             397:      6(int) Load 8(invocation)
+             398:     48(ptr) AccessChain 34(data) 57 37
+             399:  18(i8vec4) Load 398
+             400:  58(i8vec3) VectorShuffle 399 399 0 1 2
+             401:  58(i8vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 400
+             402:     48(ptr) AccessChain 34(data) 397 37
+             403:  18(i8vec4) Load 402
+             404:  18(i8vec4) VectorShuffle 403 401 4 5 6 3
+                              Store 402 404
+             405:      6(int) Load 8(invocation)
+             406:     48(ptr) AccessChain 34(data) 67 37
+             407:  18(i8vec4) Load 406
+             408:  18(i8vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 407
+             409:     48(ptr) AccessChain 34(data) 405 37
+                              Store 409 408
+             410:      6(int) Load 8(invocation)
+             411:     39(ptr) AccessChain 34(data) 37 37 38
+             412:  17(int8_t) Load 411
+             413:  17(int8_t) GroupNonUniformIAdd 42 ExclusiveScan 412
+             414:     39(ptr) AccessChain 34(data) 410 37 38
+                              Store 414 413
+             415:      6(int) Load 8(invocation)
+             416:     48(ptr) AccessChain 34(data) 46 37
+             417:  18(i8vec4) Load 416
+             418:  47(i8vec2) VectorShuffle 417 417 0 1
+             419:  47(i8vec2) GroupNonUniformIAdd 42 ExclusiveScan 418
+             420:     48(ptr) AccessChain 34(data) 415 37
+             421:  18(i8vec4) Load 420
+             422:  18(i8vec4) VectorShuffle 421 419 4 5 2 3
+                              Store 420 422
+             423:      6(int) Load 8(invocation)
+             424:     48(ptr) AccessChain 34(data) 57 37
+             425:  18(i8vec4) Load 424
+             426:  58(i8vec3) VectorShuffle 425 425 0 1 2
+             427:  58(i8vec3) GroupNonUniformIAdd 42 ExclusiveScan 426
+             428:     48(ptr) AccessChain 34(data) 423 37
+             429:  18(i8vec4) Load 428
+             430:  18(i8vec4) VectorShuffle 429 427 4 5 6 3
+                              Store 428 430
+             431:      6(int) Load 8(invocation)
+             432:     48(ptr) AccessChain 34(data) 67 37
+             433:  18(i8vec4) Load 432
+             434:  18(i8vec4) GroupNonUniformIAdd 42 ExclusiveScan 433
+             435:     48(ptr) AccessChain 34(data) 431 37
+                              Store 435 434
+             436:      6(int) Load 8(invocation)
+             437:     39(ptr) AccessChain 34(data) 37 37 38
+             438:  17(int8_t) Load 437
+             439:  17(int8_t) GroupNonUniformIMul 42 ExclusiveScan 438
+             440:     39(ptr) AccessChain 34(data) 436 37 38
+                              Store 440 439
+             441:      6(int) Load 8(invocation)
+             442:     48(ptr) AccessChain 34(data) 46 37
+             443:  18(i8vec4) Load 442
+             444:  47(i8vec2) VectorShuffle 443 443 0 1
+             445:  47(i8vec2) GroupNonUniformIMul 42 ExclusiveScan 444
+             446:     48(ptr) AccessChain 34(data) 441 37
+             447:  18(i8vec4) Load 446
+             448:  18(i8vec4) VectorShuffle 447 445 4 5 2 3
+                              Store 446 448
+             449:      6(int) Load 8(invocation)
+             450:     48(ptr) AccessChain 34(data) 57 37
+             451:  18(i8vec4) Load 450
+             452:  58(i8vec3) VectorShuffle 451 451 0 1 2
+             453:  58(i8vec3) GroupNonUniformIMul 42 ExclusiveScan 452
+             454:     48(ptr) AccessChain 34(data) 449 37
+             455:  18(i8vec4) Load 454
+             456:  18(i8vec4) VectorShuffle 455 453 4 5 6 3
+                              Store 454 456
+             457:      6(int) Load 8(invocation)
+             458:     48(ptr) AccessChain 34(data) 67 37
+             459:  18(i8vec4) Load 458
+             460:  18(i8vec4) GroupNonUniformIMul 42 ExclusiveScan 459
+             461:     48(ptr) AccessChain 34(data) 457 37
+                              Store 461 460
+             462:      6(int) Load 8(invocation)
+             463:     39(ptr) AccessChain 34(data) 37 37 38
+             464:  17(int8_t) Load 463
+             465:  17(int8_t) GroupNonUniformSMin 42 ExclusiveScan 464
+             466:     39(ptr) AccessChain 34(data) 462 37 38
+                              Store 466 465
+             467:      6(int) Load 8(invocation)
+             468:     48(ptr) AccessChain 34(data) 46 37
+             469:  18(i8vec4) Load 468
+             470:  47(i8vec2) VectorShuffle 469 469 0 1
+             471:  47(i8vec2) GroupNonUniformSMin 42 ExclusiveScan 470
+             472:     48(ptr) AccessChain 34(data) 467 37
+             473:  18(i8vec4) Load 472
+             474:  18(i8vec4) VectorShuffle 473 471 4 5 2 3
+                              Store 472 474
+             475:      6(int) Load 8(invocation)
+             476:     48(ptr) AccessChain 34(data) 57 37
+             477:  18(i8vec4) Load 476
+             478:  58(i8vec3) VectorShuffle 477 477 0 1 2
+             479:  58(i8vec3) GroupNonUniformSMin 42 ExclusiveScan 478
+             480:     48(ptr) AccessChain 34(data) 475 37
+             481:  18(i8vec4) Load 480
+             482:  18(i8vec4) VectorShuffle 481 479 4 5 6 3
+                              Store 480 482
+             483:      6(int) Load 8(invocation)
+             484:     48(ptr) AccessChain 34(data) 67 37
+             485:  18(i8vec4) Load 484
+             486:  18(i8vec4) GroupNonUniformSMin 42 ExclusiveScan 485
+             487:     48(ptr) AccessChain 34(data) 483 37
+                              Store 487 486
+             488:      6(int) Load 8(invocation)
+             489:     39(ptr) AccessChain 34(data) 37 37 38
+             490:  17(int8_t) Load 489
+             491:  17(int8_t) GroupNonUniformSMax 42 ExclusiveScan 490
+             492:     39(ptr) AccessChain 34(data) 488 37 38
+                              Store 492 491
+             493:      6(int) Load 8(invocation)
+             494:     48(ptr) AccessChain 34(data) 46 37
+             495:  18(i8vec4) Load 494
+             496:  47(i8vec2) VectorShuffle 495 495 0 1
+             497:  47(i8vec2) GroupNonUniformSMax 42 ExclusiveScan 496
+             498:     48(ptr) AccessChain 34(data) 493 37
+             499:  18(i8vec4) Load 498
+             500:  18(i8vec4) VectorShuffle 499 497 4 5 2 3
+                              Store 498 500
+             501:      6(int) Load 8(invocation)
+             502:     48(ptr) AccessChain 34(data) 57 37
+             503:  18(i8vec4) Load 502
+             504:  58(i8vec3) VectorShuffle 503 503 0 1 2
+             505:  58(i8vec3) GroupNonUniformSMax 42 ExclusiveScan 504
+             506:     48(ptr) AccessChain 34(data) 501 37
+             507:  18(i8vec4) Load 506
+             508:  18(i8vec4) VectorShuffle 507 505 4 5 6 3
+                              Store 506 508
+             509:      6(int) Load 8(invocation)
+             510:     48(ptr) AccessChain 34(data) 67 37
+             511:  18(i8vec4) Load 510
+             512:  18(i8vec4) GroupNonUniformSMax 42 ExclusiveScan 511
+             513:     48(ptr) AccessChain 34(data) 509 37
+                              Store 513 512
+             514:      6(int) Load 8(invocation)
+             515:     39(ptr) AccessChain 34(data) 37 37 38
+             516:  17(int8_t) Load 515
+             517:  17(int8_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 516
+             518:     39(ptr) AccessChain 34(data) 514 37 38
+                              Store 518 517
+             519:      6(int) Load 8(invocation)
+             520:     48(ptr) AccessChain 34(data) 46 37
+             521:  18(i8vec4) Load 520
+             522:  47(i8vec2) VectorShuffle 521 521 0 1
+             523:  47(i8vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 522
+             524:     48(ptr) AccessChain 34(data) 519 37
+             525:  18(i8vec4) Load 524
+             526:  18(i8vec4) VectorShuffle 525 523 4 5 2 3
+                              Store 524 526
+             527:      6(int) Load 8(invocation)
+             528:     48(ptr) AccessChain 34(data) 57 37
+             529:  18(i8vec4) Load 528
+             530:  58(i8vec3) VectorShuffle 529 529 0 1 2
+             531:  58(i8vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 530
+             532:     48(ptr) AccessChain 34(data) 527 37
+             533:  18(i8vec4) Load 532
+             534:  18(i8vec4) VectorShuffle 533 531 4 5 6 3
+                              Store 532 534
+             535:      6(int) Load 8(invocation)
+             536:     48(ptr) AccessChain 34(data) 67 37
+             537:  18(i8vec4) Load 536
+             538:  18(i8vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 537
+             539:     48(ptr) AccessChain 34(data) 535 37
+                              Store 539 538
+             540:      6(int) Load 8(invocation)
+             541:     39(ptr) AccessChain 34(data) 37 37 38
+             542:  17(int8_t) Load 541
+             543:  17(int8_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 542
+             544:     39(ptr) AccessChain 34(data) 540 37 38
+                              Store 544 543
+             545:      6(int) Load 8(invocation)
+             546:     48(ptr) AccessChain 34(data) 46 37
+             547:  18(i8vec4) Load 546
+             548:  47(i8vec2) VectorShuffle 547 547 0 1
+             549:  47(i8vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 548
+             550:     48(ptr) AccessChain 34(data) 545 37
+             551:  18(i8vec4) Load 550
+             552:  18(i8vec4) VectorShuffle 551 549 4 5 2 3
+                              Store 550 552
+             553:      6(int) Load 8(invocation)
+             554:     48(ptr) AccessChain 34(data) 57 37
+             555:  18(i8vec4) Load 554
+             556:  58(i8vec3) VectorShuffle 555 555 0 1 2
+             557:  58(i8vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 556
+             558:     48(ptr) AccessChain 34(data) 553 37
+             559:  18(i8vec4) Load 558
+             560:  18(i8vec4) VectorShuffle 559 557 4 5 6 3
+                              Store 558 560
+             561:      6(int) Load 8(invocation)
+             562:     48(ptr) AccessChain 34(data) 67 37
+             563:  18(i8vec4) Load 562
+             564:  18(i8vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 563
+             565:     48(ptr) AccessChain 34(data) 561 37
+                              Store 565 564
+             566:      6(int) Load 8(invocation)
+             567:     39(ptr) AccessChain 34(data) 37 37 38
+             568:  17(int8_t) Load 567
+             569:  17(int8_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 568
+             570:     39(ptr) AccessChain 34(data) 566 37 38
+                              Store 570 569
+             571:      6(int) Load 8(invocation)
+             572:     48(ptr) AccessChain 34(data) 46 37
+             573:  18(i8vec4) Load 572
+             574:  47(i8vec2) VectorShuffle 573 573 0 1
+             575:  47(i8vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 574
+             576:     48(ptr) AccessChain 34(data) 571 37
+             577:  18(i8vec4) Load 576
+             578:  18(i8vec4) VectorShuffle 577 575 4 5 2 3
+                              Store 576 578
+             579:      6(int) Load 8(invocation)
+             580:     48(ptr) AccessChain 34(data) 57 37
+             581:  18(i8vec4) Load 580
+             582:  58(i8vec3) VectorShuffle 581 581 0 1 2
+             583:  58(i8vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 582
+             584:     48(ptr) AccessChain 34(data) 579 37
+             585:  18(i8vec4) Load 584
+             586:  18(i8vec4) VectorShuffle 585 583 4 5 6 3
+                              Store 584 586
+             587:      6(int) Load 8(invocation)
+             588:     48(ptr) AccessChain 34(data) 67 37
+             589:  18(i8vec4) Load 588
+             590:  18(i8vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 589
+             591:     48(ptr) AccessChain 34(data) 587 37
+                              Store 591 590
+             592:      6(int) Load 8(invocation)
+             594:    593(ptr) AccessChain 34(data) 37 46 38
+             595:  19(int8_t) Load 594
+             596:  19(int8_t) GroupNonUniformIAdd 42 Reduce 595
+             597:    593(ptr) AccessChain 34(data) 592 46 38
+                              Store 597 596
+             598:      6(int) Load 8(invocation)
+             601:    600(ptr) AccessChain 34(data) 46 46
+             602:  20(i8vec4) Load 601
+             603: 599(i8vec2) VectorShuffle 602 602 0 1
+             604: 599(i8vec2) GroupNonUniformIAdd 42 Reduce 603
+             605:    600(ptr) AccessChain 34(data) 598 46
+             606:  20(i8vec4) Load 605
+             607:  20(i8vec4) VectorShuffle 606 604 4 5 2 3
+                              Store 605 607
+             608:      6(int) Load 8(invocation)
+             610:    600(ptr) AccessChain 34(data) 57 46
+             611:  20(i8vec4) Load 610
+             612: 609(i8vec3) VectorShuffle 611 611 0 1 2
+             613: 609(i8vec3) GroupNonUniformIAdd 42 Reduce 612
+             614:    600(ptr) AccessChain 34(data) 608 46
+             615:  20(i8vec4) Load 614
+             616:  20(i8vec4) VectorShuffle 615 613 4 5 6 3
+                              Store 614 616
+             617:      6(int) Load 8(invocation)
+             618:    600(ptr) AccessChain 34(data) 67 46
+             619:  20(i8vec4) Load 618
+             620:  20(i8vec4) GroupNonUniformIAdd 42 Reduce 619
+             621:    600(ptr) AccessChain 34(data) 617 46
+                              Store 621 620
+             622:      6(int) Load 8(invocation)
+             623:    593(ptr) AccessChain 34(data) 37 46 38
+             624:  19(int8_t) Load 623
+             625:  19(int8_t) GroupNonUniformIMul 42 Reduce 624
+             626:    593(ptr) AccessChain 34(data) 622 46 38
+                              Store 626 625
+             627:      6(int) Load 8(invocation)
+             628:    600(ptr) AccessChain 34(data) 46 46
+             629:  20(i8vec4) Load 628
+             630: 599(i8vec2) VectorShuffle 629 629 0 1
+             631: 599(i8vec2) GroupNonUniformIMul 42 Reduce 630
+             632:    600(ptr) AccessChain 34(data) 627 46
+             633:  20(i8vec4) Load 632
+             634:  20(i8vec4) VectorShuffle 633 631 4 5 2 3
+                              Store 632 634
+             635:      6(int) Load 8(invocation)
+             636:    600(ptr) AccessChain 34(data) 57 46
+             637:  20(i8vec4) Load 636
+             638: 609(i8vec3) VectorShuffle 637 637 0 1 2
+             639: 609(i8vec3) GroupNonUniformIMul 42 Reduce 638
+             640:    600(ptr) AccessChain 34(data) 635 46
+             641:  20(i8vec4) Load 640
+             642:  20(i8vec4) VectorShuffle 641 639 4 5 6 3
+                              Store 640 642
+             643:      6(int) Load 8(invocation)
+             644:    600(ptr) AccessChain 34(data) 67 46
+             645:  20(i8vec4) Load 644
+             646:  20(i8vec4) GroupNonUniformIMul 42 Reduce 645
+             647:    600(ptr) AccessChain 34(data) 643 46
+                              Store 647 646
+             648:      6(int) Load 8(invocation)
+             649:    593(ptr) AccessChain 34(data) 37 46 38
+             650:  19(int8_t) Load 649
+             651:  19(int8_t) GroupNonUniformUMin 42 Reduce 650
+             652:    593(ptr) AccessChain 34(data) 648 46 38
+                              Store 652 651
+             653:      6(int) Load 8(invocation)
+             654:    600(ptr) AccessChain 34(data) 46 46
+             655:  20(i8vec4) Load 654
+             656: 599(i8vec2) VectorShuffle 655 655 0 1
+             657: 599(i8vec2) GroupNonUniformUMin 42 Reduce 656
+             658:    600(ptr) AccessChain 34(data) 653 46
+             659:  20(i8vec4) Load 658
+             660:  20(i8vec4) VectorShuffle 659 657 4 5 2 3
+                              Store 658 660
+             661:      6(int) Load 8(invocation)
+             662:    600(ptr) AccessChain 34(data) 57 46
+             663:  20(i8vec4) Load 662
+             664: 609(i8vec3) VectorShuffle 663 663 0 1 2
+             665: 609(i8vec3) GroupNonUniformUMin 42 Reduce 664
+             666:    600(ptr) AccessChain 34(data) 661 46
+             667:  20(i8vec4) Load 666
+             668:  20(i8vec4) VectorShuffle 667 665 4 5 6 3
+                              Store 666 668
+             669:      6(int) Load 8(invocation)
+             670:    600(ptr) AccessChain 34(data) 67 46
+             671:  20(i8vec4) Load 670
+             672:  20(i8vec4) GroupNonUniformUMin 42 Reduce 671
+             673:    600(ptr) AccessChain 34(data) 669 46
+                              Store 673 672
+             674:      6(int) Load 8(invocation)
+             675:    593(ptr) AccessChain 34(data) 37 46 38
+             676:  19(int8_t) Load 675
+             677:  19(int8_t) GroupNonUniformUMax 42 Reduce 676
+             678:    593(ptr) AccessChain 34(data) 674 46 38
+                              Store 678 677
+             679:      6(int) Load 8(invocation)
+             680:    600(ptr) AccessChain 34(data) 46 46
+             681:  20(i8vec4) Load 680
+             682: 599(i8vec2) VectorShuffle 681 681 0 1
+             683: 599(i8vec2) GroupNonUniformUMax 42 Reduce 682
+             684:    600(ptr) AccessChain 34(data) 679 46
+             685:  20(i8vec4) Load 684
+             686:  20(i8vec4) VectorShuffle 685 683 4 5 2 3
+                              Store 684 686
+             687:      6(int) Load 8(invocation)
+             688:    600(ptr) AccessChain 34(data) 57 46
+             689:  20(i8vec4) Load 688
+             690: 609(i8vec3) VectorShuffle 689 689 0 1 2
+             691: 609(i8vec3) GroupNonUniformUMax 42 Reduce 690
+             692:    600(ptr) AccessChain 34(data) 687 46
+             693:  20(i8vec4) Load 692
+             694:  20(i8vec4) VectorShuffle 693 691 4 5 6 3
+                              Store 692 694
+             695:      6(int) Load 8(invocation)
+             696:    600(ptr) AccessChain 34(data) 67 46
+             697:  20(i8vec4) Load 696
+             698:  20(i8vec4) GroupNonUniformUMax 42 Reduce 697
+             699:    600(ptr) AccessChain 34(data) 695 46
+                              Store 699 698
+             700:      6(int) Load 8(invocation)
+             701:    593(ptr) AccessChain 34(data) 37 46 38
+             702:  19(int8_t) Load 701
+             703:  19(int8_t) GroupNonUniformBitwiseAnd 42 Reduce 702
+             704:    593(ptr) AccessChain 34(data) 700 46 38
+                              Store 704 703
+             705:      6(int) Load 8(invocation)
+             706:    600(ptr) AccessChain 34(data) 46 46
+             707:  20(i8vec4) Load 706
+             708: 599(i8vec2) VectorShuffle 707 707 0 1
+             709: 599(i8vec2) GroupNonUniformBitwiseAnd 42 Reduce 708
+             710:    600(ptr) AccessChain 34(data) 705 46
+             711:  20(i8vec4) Load 710
+             712:  20(i8vec4) VectorShuffle 711 709 4 5 2 3
+                              Store 710 712
+             713:      6(int) Load 8(invocation)
+             714:    600(ptr) AccessChain 34(data) 57 46
+             715:  20(i8vec4) Load 714
+             716: 609(i8vec3) VectorShuffle 715 715 0 1 2
+             717: 609(i8vec3) GroupNonUniformBitwiseAnd 42 Reduce 716
+             718:    600(ptr) AccessChain 34(data) 713 46
+             719:  20(i8vec4) Load 718
+             720:  20(i8vec4) VectorShuffle 719 717 4 5 6 3
+                              Store 718 720
+             721:      6(int) Load 8(invocation)
+             722:    600(ptr) AccessChain 34(data) 67 46
+             723:  20(i8vec4) Load 722
+             724:  20(i8vec4) GroupNonUniformBitwiseAnd 42 Reduce 723
+             725:    600(ptr) AccessChain 34(data) 721 46
+                              Store 725 724
+             726:      6(int) Load 8(invocation)
+             727:    593(ptr) AccessChain 34(data) 37 46 38
+             728:  19(int8_t) Load 727
+             729:  19(int8_t) GroupNonUniformBitwiseOr 42 Reduce 728
+             730:    593(ptr) AccessChain 34(data) 726 46 38
+                              Store 730 729
+             731:      6(int) Load 8(invocation)
+             732:    600(ptr) AccessChain 34(data) 46 46
+             733:  20(i8vec4) Load 732
+             734: 599(i8vec2) VectorShuffle 733 733 0 1
+             735: 599(i8vec2) GroupNonUniformBitwiseOr 42 Reduce 734
+             736:    600(ptr) AccessChain 34(data) 731 46
+             737:  20(i8vec4) Load 736
+             738:  20(i8vec4) VectorShuffle 737 735 4 5 2 3
+                              Store 736 738
+             739:      6(int) Load 8(invocation)
+             740:    600(ptr) AccessChain 34(data) 57 46
+             741:  20(i8vec4) Load 740
+             742: 609(i8vec3) VectorShuffle 741 741 0 1 2
+             743: 609(i8vec3) GroupNonUniformBitwiseOr 42 Reduce 742
+             744:    600(ptr) AccessChain 34(data) 739 46
+             745:  20(i8vec4) Load 744
+             746:  20(i8vec4) VectorShuffle 745 743 4 5 6 3
+                              Store 744 746
+             747:      6(int) Load 8(invocation)
+             748:    600(ptr) AccessChain 34(data) 67 46
+             749:  20(i8vec4) Load 748
+             750:  20(i8vec4) GroupNonUniformBitwiseOr 42 Reduce 749
+             751:    600(ptr) AccessChain 34(data) 747 46
+                              Store 751 750
+             752:      6(int) Load 8(invocation)
+             753:    593(ptr) AccessChain 34(data) 37 46 38
+             754:  19(int8_t) Load 753
+             755:  19(int8_t) GroupNonUniformBitwiseXor 42 Reduce 754
+             756:    593(ptr) AccessChain 34(data) 752 46 38
+                              Store 756 755
+             757:      6(int) Load 8(invocation)
+             758:    600(ptr) AccessChain 34(data) 46 46
+             759:  20(i8vec4) Load 758
+             760: 599(i8vec2) VectorShuffle 759 759 0 1
+             761: 599(i8vec2) GroupNonUniformBitwiseXor 42 Reduce 760
+             762:    600(ptr) AccessChain 34(data) 757 46
+             763:  20(i8vec4) Load 762
+             764:  20(i8vec4) VectorShuffle 763 761 4 5 2 3
+                              Store 762 764
+             765:      6(int) Load 8(invocation)
+             766:    600(ptr) AccessChain 34(data) 57 46
+             767:  20(i8vec4) Load 766
+             768: 609(i8vec3) VectorShuffle 767 767 0 1 2
+             769: 609(i8vec3) GroupNonUniformBitwiseXor 42 Reduce 768
+             770:    600(ptr) AccessChain 34(data) 765 46
+             771:  20(i8vec4) Load 770
+             772:  20(i8vec4) VectorShuffle 771 769 4 5 6 3
+                              Store 770 772
+             773:      6(int) Load 8(invocation)
+             774:    600(ptr) AccessChain 34(data) 67 46
+             775:  20(i8vec4) Load 774
+             776:  20(i8vec4) GroupNonUniformBitwiseXor 42 Reduce 775
+             777:    600(ptr) AccessChain 34(data) 773 46
+                              Store 777 776
+             778:      6(int) Load 8(invocation)
+             779:    593(ptr) AccessChain 34(data) 37 46 38
+             780:  19(int8_t) Load 779
+             781:  19(int8_t) GroupNonUniformIAdd 42 InclusiveScan 780
+             782:    593(ptr) AccessChain 34(data) 778 46 38
+                              Store 782 781
+             783:      6(int) Load 8(invocation)
+             784:    600(ptr) AccessChain 34(data) 46 46
+             785:  20(i8vec4) Load 784
+             786: 599(i8vec2) VectorShuffle 785 785 0 1
+             787: 599(i8vec2) GroupNonUniformIAdd 42 InclusiveScan 786
+             788:    600(ptr) AccessChain 34(data) 783 46
+             789:  20(i8vec4) Load 788
+             790:  20(i8vec4) VectorShuffle 789 787 4 5 2 3
+                              Store 788 790
+             791:      6(int) Load 8(invocation)
+             792:    600(ptr) AccessChain 34(data) 57 46
+             793:  20(i8vec4) Load 792
+             794: 609(i8vec3) VectorShuffle 793 793 0 1 2
+             795: 609(i8vec3) GroupNonUniformIAdd 42 InclusiveScan 794
+             796:    600(ptr) AccessChain 34(data) 791 46
+             797:  20(i8vec4) Load 796
+             798:  20(i8vec4) VectorShuffle 797 795 4 5 6 3
+                              Store 796 798
+             799:      6(int) Load 8(invocation)
+             800:    600(ptr) AccessChain 34(data) 67 46
+             801:  20(i8vec4) Load 800
+             802:  20(i8vec4) GroupNonUniformIAdd 42 InclusiveScan 801
+             803:    600(ptr) AccessChain 34(data) 799 46
+                              Store 803 802
+             804:      6(int) Load 8(invocation)
+             805:    593(ptr) AccessChain 34(data) 37 46 38
+             806:  19(int8_t) Load 805
+             807:  19(int8_t) GroupNonUniformIMul 42 InclusiveScan 806
+             808:    593(ptr) AccessChain 34(data) 804 46 38
+                              Store 808 807
+             809:      6(int) Load 8(invocation)
+             810:    600(ptr) AccessChain 34(data) 46 46
+             811:  20(i8vec4) Load 810
+             812: 599(i8vec2) VectorShuffle 811 811 0 1
+             813: 599(i8vec2) GroupNonUniformIMul 42 InclusiveScan 812
+             814:    600(ptr) AccessChain 34(data) 809 46
+             815:  20(i8vec4) Load 814
+             816:  20(i8vec4) VectorShuffle 815 813 4 5 2 3
+                              Store 814 816
+             817:      6(int) Load 8(invocation)
+             818:    600(ptr) AccessChain 34(data) 57 46
+             819:  20(i8vec4) Load 818
+             820: 609(i8vec3) VectorShuffle 819 819 0 1 2
+             821: 609(i8vec3) GroupNonUniformIMul 42 InclusiveScan 820
+             822:    600(ptr) AccessChain 34(data) 817 46
+             823:  20(i8vec4) Load 822
+             824:  20(i8vec4) VectorShuffle 823 821 4 5 6 3
+                              Store 822 824
+             825:      6(int) Load 8(invocation)
+             826:    600(ptr) AccessChain 34(data) 67 46
+             827:  20(i8vec4) Load 826
+             828:  20(i8vec4) GroupNonUniformIMul 42 InclusiveScan 827
+             829:    600(ptr) AccessChain 34(data) 825 46
+                              Store 829 828
+             830:      6(int) Load 8(invocation)
+             831:    593(ptr) AccessChain 34(data) 37 46 38
+             832:  19(int8_t) Load 831
+             833:  19(int8_t) GroupNonUniformUMin 42 InclusiveScan 832
+             834:    593(ptr) AccessChain 34(data) 830 46 38
+                              Store 834 833
+             835:      6(int) Load 8(invocation)
+             836:    600(ptr) AccessChain 34(data) 46 46
+             837:  20(i8vec4) Load 836
+             838: 599(i8vec2) VectorShuffle 837 837 0 1
+             839: 599(i8vec2) GroupNonUniformUMin 42 InclusiveScan 838
+             840:    600(ptr) AccessChain 34(data) 835 46
+             841:  20(i8vec4) Load 840
+             842:  20(i8vec4) VectorShuffle 841 839 4 5 2 3
+                              Store 840 842
+             843:      6(int) Load 8(invocation)
+             844:    600(ptr) AccessChain 34(data) 57 46
+             845:  20(i8vec4) Load 844
+             846: 609(i8vec3) VectorShuffle 845 845 0 1 2
+             847: 609(i8vec3) GroupNonUniformUMin 42 InclusiveScan 846
+             848:    600(ptr) AccessChain 34(data) 843 46
+             849:  20(i8vec4) Load 848
+             850:  20(i8vec4) VectorShuffle 849 847 4 5 6 3
+                              Store 848 850
+             851:      6(int) Load 8(invocation)
+             852:    600(ptr) AccessChain 34(data) 67 46
+             853:  20(i8vec4) Load 852
+             854:  20(i8vec4) GroupNonUniformUMin 42 InclusiveScan 853
+             855:    600(ptr) AccessChain 34(data) 851 46
+                              Store 855 854
+             856:      6(int) Load 8(invocation)
+             857:    593(ptr) AccessChain 34(data) 37 46 38
+             858:  19(int8_t) Load 857
+             859:  19(int8_t) GroupNonUniformUMax 42 InclusiveScan 858
+             860:    593(ptr) AccessChain 34(data) 856 46 38
+                              Store 860 859
+             861:      6(int) Load 8(invocation)
+             862:    600(ptr) AccessChain 34(data) 46 46
+             863:  20(i8vec4) Load 862
+             864: 599(i8vec2) VectorShuffle 863 863 0 1
+             865: 599(i8vec2) GroupNonUniformUMax 42 InclusiveScan 864
+             866:    600(ptr) AccessChain 34(data) 861 46
+             867:  20(i8vec4) Load 866
+             868:  20(i8vec4) VectorShuffle 867 865 4 5 2 3
+                              Store 866 868
+             869:      6(int) Load 8(invocation)
+             870:    600(ptr) AccessChain 34(data) 57 46
+             871:  20(i8vec4) Load 870
+             872: 609(i8vec3) VectorShuffle 871 871 0 1 2
+             873: 609(i8vec3) GroupNonUniformUMax 42 InclusiveScan 872
+             874:    600(ptr) AccessChain 34(data) 869 46
+             875:  20(i8vec4) Load 874
+             876:  20(i8vec4) VectorShuffle 875 873 4 5 6 3
+                              Store 874 876
+             877:      6(int) Load 8(invocation)
+             878:    600(ptr) AccessChain 34(data) 67 46
+             879:  20(i8vec4) Load 878
+             880:  20(i8vec4) GroupNonUniformUMax 42 InclusiveScan 879
+             881:    600(ptr) AccessChain 34(data) 877 46
+                              Store 881 880
+             882:      6(int) Load 8(invocation)
+             883:    593(ptr) AccessChain 34(data) 37 46 38
+             884:  19(int8_t) Load 883
+             885:  19(int8_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 884
+             886:    593(ptr) AccessChain 34(data) 882 46 38
+                              Store 886 885
+             887:      6(int) Load 8(invocation)
+             888:    600(ptr) AccessChain 34(data) 46 46
+             889:  20(i8vec4) Load 888
+             890: 599(i8vec2) VectorShuffle 889 889 0 1
+             891: 599(i8vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 890
+             892:    600(ptr) AccessChain 34(data) 887 46
+             893:  20(i8vec4) Load 892
+             894:  20(i8vec4) VectorShuffle 893 891 4 5 2 3
+                              Store 892 894
+             895:      6(int) Load 8(invocation)
+             896:    600(ptr) AccessChain 34(data) 57 46
+             897:  20(i8vec4) Load 896
+             898: 609(i8vec3) VectorShuffle 897 897 0 1 2
+             899: 609(i8vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 898
+             900:    600(ptr) AccessChain 34(data) 895 46
+             901:  20(i8vec4) Load 900
+             902:  20(i8vec4) VectorShuffle 901 899 4 5 6 3
+                              Store 900 902
+             903:      6(int) Load 8(invocation)
+             904:    600(ptr) AccessChain 34(data) 67 46
+             905:  20(i8vec4) Load 904
+             906:  20(i8vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 905
+             907:    600(ptr) AccessChain 34(data) 903 46
+                              Store 907 906
+             908:      6(int) Load 8(invocation)
+             909:    593(ptr) AccessChain 34(data) 37 46 38
+             910:  19(int8_t) Load 909
+             911:  19(int8_t) GroupNonUniformBitwiseOr 42 InclusiveScan 910
+             912:    593(ptr) AccessChain 34(data) 908 46 38
+                              Store 912 911
+             913:      6(int) Load 8(invocation)
+             914:    600(ptr) AccessChain 34(data) 46 46
+             915:  20(i8vec4) Load 914
+             916: 599(i8vec2) VectorShuffle 915 915 0 1
+             917: 599(i8vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 916
+             918:    600(ptr) AccessChain 34(data) 913 46
+             919:  20(i8vec4) Load 918
+             920:  20(i8vec4) VectorShuffle 919 917 4 5 2 3
+                              Store 918 920
+             921:      6(int) Load 8(invocation)
+             922:    600(ptr) AccessChain 34(data) 57 46
+             923:  20(i8vec4) Load 922
+             924: 609(i8vec3) VectorShuffle 923 923 0 1 2
+             925: 609(i8vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 924
+             926:    600(ptr) AccessChain 34(data) 921 46
+             927:  20(i8vec4) Load 926
+             928:  20(i8vec4) VectorShuffle 927 925 4 5 6 3
+                              Store 926 928
+             929:      6(int) Load 8(invocation)
+             930:    600(ptr) AccessChain 34(data) 67 46
+             931:  20(i8vec4) Load 930
+             932:  20(i8vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 931
+             933:    600(ptr) AccessChain 34(data) 929 46
+                              Store 933 932
+             934:      6(int) Load 8(invocation)
+             935:    593(ptr) AccessChain 34(data) 37 46 38
+             936:  19(int8_t) Load 935
+             937:  19(int8_t) GroupNonUniformBitwiseXor 42 InclusiveScan 936
+             938:    593(ptr) AccessChain 34(data) 934 46 38
+                              Store 938 937
+             939:      6(int) Load 8(invocation)
+             940:    600(ptr) AccessChain 34(data) 46 46
+             941:  20(i8vec4) Load 940
+             942: 599(i8vec2) VectorShuffle 941 941 0 1
+             943: 599(i8vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 942
+             944:    600(ptr) AccessChain 34(data) 939 46
+             945:  20(i8vec4) Load 944
+             946:  20(i8vec4) VectorShuffle 945 943 4 5 2 3
+                              Store 944 946
+             947:      6(int) Load 8(invocation)
+             948:    600(ptr) AccessChain 34(data) 57 46
+             949:  20(i8vec4) Load 948
+             950: 609(i8vec3) VectorShuffle 949 949 0 1 2
+             951: 609(i8vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 950
+             952:    600(ptr) AccessChain 34(data) 947 46
+             953:  20(i8vec4) Load 952
+             954:  20(i8vec4) VectorShuffle 953 951 4 5 6 3
+                              Store 952 954
+             955:      6(int) Load 8(invocation)
+             956:    600(ptr) AccessChain 34(data) 67 46
+             957:  20(i8vec4) Load 956
+             958:  20(i8vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 957
+             959:    600(ptr) AccessChain 34(data) 955 46
+                              Store 959 958
+             960:      6(int) Load 8(invocation)
+             961:    593(ptr) AccessChain 34(data) 37 46 38
+             962:  19(int8_t) Load 961
+             963:  19(int8_t) GroupNonUniformIAdd 42 ExclusiveScan 962
+             964:    593(ptr) AccessChain 34(data) 960 46 38
+                              Store 964 963
+             965:      6(int) Load 8(invocation)
+             966:    600(ptr) AccessChain 34(data) 46 46
+             967:  20(i8vec4) Load 966
+             968: 599(i8vec2) VectorShuffle 967 967 0 1
+             969: 599(i8vec2) GroupNonUniformIAdd 42 ExclusiveScan 968
+             970:    600(ptr) AccessChain 34(data) 965 46
+             971:  20(i8vec4) Load 970
+             972:  20(i8vec4) VectorShuffle 971 969 4 5 2 3
+                              Store 970 972
+             973:      6(int) Load 8(invocation)
+             974:    600(ptr) AccessChain 34(data) 57 46
+             975:  20(i8vec4) Load 974
+             976: 609(i8vec3) VectorShuffle 975 975 0 1 2
+             977: 609(i8vec3) GroupNonUniformIAdd 42 ExclusiveScan 976
+             978:    600(ptr) AccessChain 34(data) 973 46
+             979:  20(i8vec4) Load 978
+             980:  20(i8vec4) VectorShuffle 979 977 4 5 6 3
+                              Store 978 980
+             981:      6(int) Load 8(invocation)
+             982:    600(ptr) AccessChain 34(data) 67 46
+             983:  20(i8vec4) Load 982
+             984:  20(i8vec4) GroupNonUniformIAdd 42 ExclusiveScan 983
+             985:    600(ptr) AccessChain 34(data) 981 46
+                              Store 985 984
+             986:      6(int) Load 8(invocation)
+             987:    593(ptr) AccessChain 34(data) 37 46 38
+             988:  19(int8_t) Load 987
+             989:  19(int8_t) GroupNonUniformIMul 42 ExclusiveScan 988
+             990:    593(ptr) AccessChain 34(data) 986 46 38
+                              Store 990 989
+             991:      6(int) Load 8(invocation)
+             992:    600(ptr) AccessChain 34(data) 46 46
+             993:  20(i8vec4) Load 992
+             994: 599(i8vec2) VectorShuffle 993 993 0 1
+             995: 599(i8vec2) GroupNonUniformIMul 42 ExclusiveScan 994
+             996:    600(ptr) AccessChain 34(data) 991 46
+             997:  20(i8vec4) Load 996
+             998:  20(i8vec4) VectorShuffle 997 995 4 5 2 3
+                              Store 996 998
+             999:      6(int) Load 8(invocation)
+            1000:    600(ptr) AccessChain 34(data) 57 46
+            1001:  20(i8vec4) Load 1000
+            1002: 609(i8vec3) VectorShuffle 1001 1001 0 1 2
+            1003: 609(i8vec3) GroupNonUniformIMul 42 ExclusiveScan 1002
+            1004:    600(ptr) AccessChain 34(data) 999 46
+            1005:  20(i8vec4) Load 1004
+            1006:  20(i8vec4) VectorShuffle 1005 1003 4 5 6 3
+                              Store 1004 1006
+            1007:      6(int) Load 8(invocation)
+            1008:    600(ptr) AccessChain 34(data) 67 46
+            1009:  20(i8vec4) Load 1008
+            1010:  20(i8vec4) GroupNonUniformIMul 42 ExclusiveScan 1009
+            1011:    600(ptr) AccessChain 34(data) 1007 46
+                              Store 1011 1010
+            1012:      6(int) Load 8(invocation)
+            1013:    593(ptr) AccessChain 34(data) 37 46 38
+            1014:  19(int8_t) Load 1013
+            1015:  19(int8_t) GroupNonUniformUMin 42 ExclusiveScan 1014
+            1016:    593(ptr) AccessChain 34(data) 1012 46 38
+                              Store 1016 1015
+            1017:      6(int) Load 8(invocation)
+            1018:    600(ptr) AccessChain 34(data) 46 46
+            1019:  20(i8vec4) Load 1018
+            1020: 599(i8vec2) VectorShuffle 1019 1019 0 1
+            1021: 599(i8vec2) GroupNonUniformUMin 42 ExclusiveScan 1020
+            1022:    600(ptr) AccessChain 34(data) 1017 46
+            1023:  20(i8vec4) Load 1022
+            1024:  20(i8vec4) VectorShuffle 1023 1021 4 5 2 3
+                              Store 1022 1024
+            1025:      6(int) Load 8(invocation)
+            1026:    600(ptr) AccessChain 34(data) 57 46
+            1027:  20(i8vec4) Load 1026
+            1028: 609(i8vec3) VectorShuffle 1027 1027 0 1 2
+            1029: 609(i8vec3) GroupNonUniformUMin 42 ExclusiveScan 1028
+            1030:    600(ptr) AccessChain 34(data) 1025 46
+            1031:  20(i8vec4) Load 1030
+            1032:  20(i8vec4) VectorShuffle 1031 1029 4 5 6 3
+                              Store 1030 1032
+            1033:      6(int) Load 8(invocation)
+            1034:    600(ptr) AccessChain 34(data) 67 46
+            1035:  20(i8vec4) Load 1034
+            1036:  20(i8vec4) GroupNonUniformUMin 42 ExclusiveScan 1035
+            1037:    600(ptr) AccessChain 34(data) 1033 46
+                              Store 1037 1036
+            1038:      6(int) Load 8(invocation)
+            1039:    593(ptr) AccessChain 34(data) 37 46 38
+            1040:  19(int8_t) Load 1039
+            1041:  19(int8_t) GroupNonUniformUMax 42 ExclusiveScan 1040
+            1042:    593(ptr) AccessChain 34(data) 1038 46 38
+                              Store 1042 1041
+            1043:      6(int) Load 8(invocation)
+            1044:    600(ptr) AccessChain 34(data) 46 46
+            1045:  20(i8vec4) Load 1044
+            1046: 599(i8vec2) VectorShuffle 1045 1045 0 1
+            1047: 599(i8vec2) GroupNonUniformUMax 42 ExclusiveScan 1046
+            1048:    600(ptr) AccessChain 34(data) 1043 46
+            1049:  20(i8vec4) Load 1048
+            1050:  20(i8vec4) VectorShuffle 1049 1047 4 5 2 3
+                              Store 1048 1050
+            1051:      6(int) Load 8(invocation)
+            1052:    600(ptr) AccessChain 34(data) 57 46
+            1053:  20(i8vec4) Load 1052
+            1054: 609(i8vec3) VectorShuffle 1053 1053 0 1 2
+            1055: 609(i8vec3) GroupNonUniformUMax 42 ExclusiveScan 1054
+            1056:    600(ptr) AccessChain 34(data) 1051 46
+            1057:  20(i8vec4) Load 1056
+            1058:  20(i8vec4) VectorShuffle 1057 1055 4 5 6 3
+                              Store 1056 1058
+            1059:      6(int) Load 8(invocation)
+            1060:    600(ptr) AccessChain 34(data) 67 46
+            1061:  20(i8vec4) Load 1060
+            1062:  20(i8vec4) GroupNonUniformUMax 42 ExclusiveScan 1061
+            1063:    600(ptr) AccessChain 34(data) 1059 46
+                              Store 1063 1062
+            1064:      6(int) Load 8(invocation)
+            1065:    593(ptr) AccessChain 34(data) 37 46 38
+            1066:  19(int8_t) Load 1065
+            1067:  19(int8_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1066
+            1068:    593(ptr) AccessChain 34(data) 1064 46 38
+                              Store 1068 1067
+            1069:      6(int) Load 8(invocation)
+            1070:    600(ptr) AccessChain 34(data) 46 46
+            1071:  20(i8vec4) Load 1070
+            1072: 599(i8vec2) VectorShuffle 1071 1071 0 1
+            1073: 599(i8vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1072
+            1074:    600(ptr) AccessChain 34(data) 1069 46
+            1075:  20(i8vec4) Load 1074
+            1076:  20(i8vec4) VectorShuffle 1075 1073 4 5 2 3
+                              Store 1074 1076
+            1077:      6(int) Load 8(invocation)
+            1078:    600(ptr) AccessChain 34(data) 57 46
+            1079:  20(i8vec4) Load 1078
+            1080: 609(i8vec3) VectorShuffle 1079 1079 0 1 2
+            1081: 609(i8vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1080
+            1082:    600(ptr) AccessChain 34(data) 1077 46
+            1083:  20(i8vec4) Load 1082
+            1084:  20(i8vec4) VectorShuffle 1083 1081 4 5 6 3
+                              Store 1082 1084
+            1085:      6(int) Load 8(invocation)
+            1086:    600(ptr) AccessChain 34(data) 67 46
+            1087:  20(i8vec4) Load 1086
+            1088:  20(i8vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1087
+            1089:    600(ptr) AccessChain 34(data) 1085 46
+                              Store 1089 1088
+            1090:      6(int) Load 8(invocation)
+            1091:    593(ptr) AccessChain 34(data) 37 46 38
+            1092:  19(int8_t) Load 1091
+            1093:  19(int8_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 1092
+            1094:    593(ptr) AccessChain 34(data) 1090 46 38
+                              Store 1094 1093
+            1095:      6(int) Load 8(invocation)
+            1096:    600(ptr) AccessChain 34(data) 46 46
+            1097:  20(i8vec4) Load 1096
+            1098: 599(i8vec2) VectorShuffle 1097 1097 0 1
+            1099: 599(i8vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 1098
+            1100:    600(ptr) AccessChain 34(data) 1095 46
+            1101:  20(i8vec4) Load 1100
+            1102:  20(i8vec4) VectorShuffle 1101 1099 4 5 2 3
+                              Store 1100 1102
+            1103:      6(int) Load 8(invocation)
+            1104:    600(ptr) AccessChain 34(data) 57 46
+            1105:  20(i8vec4) Load 1104
+            1106: 609(i8vec3) VectorShuffle 1105 1105 0 1 2
+            1107: 609(i8vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 1106
+            1108:    600(ptr) AccessChain 34(data) 1103 46
+            1109:  20(i8vec4) Load 1108
+            1110:  20(i8vec4) VectorShuffle 1109 1107 4 5 6 3
+                              Store 1108 1110
+            1111:      6(int) Load 8(invocation)
+            1112:    600(ptr) AccessChain 34(data) 67 46
+            1113:  20(i8vec4) Load 1112
+            1114:  20(i8vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 1113
+            1115:    600(ptr) AccessChain 34(data) 1111 46
+                              Store 1115 1114
+            1116:      6(int) Load 8(invocation)
+            1117:    593(ptr) AccessChain 34(data) 37 46 38
+            1118:  19(int8_t) Load 1117
+            1119:  19(int8_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 1118
+            1120:    593(ptr) AccessChain 34(data) 1116 46 38
+                              Store 1120 1119
+            1121:      6(int) Load 8(invocation)
+            1122:    600(ptr) AccessChain 34(data) 46 46
+            1123:  20(i8vec4) Load 1122
+            1124: 599(i8vec2) VectorShuffle 1123 1123 0 1
+            1125: 599(i8vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 1124
+            1126:    600(ptr) AccessChain 34(data) 1121 46
+            1127:  20(i8vec4) Load 1126
+            1128:  20(i8vec4) VectorShuffle 1127 1125 4 5 2 3
+                              Store 1126 1128
+            1129:      6(int) Load 8(invocation)
+            1130:    600(ptr) AccessChain 34(data) 57 46
+            1131:  20(i8vec4) Load 1130
+            1132: 609(i8vec3) VectorShuffle 1131 1131 0 1 2
+            1133: 609(i8vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 1132
+            1134:    600(ptr) AccessChain 34(data) 1129 46
+            1135:  20(i8vec4) Load 1134
+            1136:  20(i8vec4) VectorShuffle 1135 1133 4 5 6 3
+                              Store 1134 1136
+            1137:      6(int) Load 8(invocation)
+            1138:    600(ptr) AccessChain 34(data) 67 46
+            1139:  20(i8vec4) Load 1138
+            1140:  20(i8vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 1139
+            1141:    600(ptr) AccessChain 34(data) 1137 46
+                              Store 1141 1140
+            1142:      6(int) Load 8(invocation)
+            1144:   1143(ptr) AccessChain 34(data) 37 57 38
+            1145: 21(int16_t) Load 1144
+            1146: 21(int16_t) GroupNonUniformIAdd 42 Reduce 1145
+            1147:   1143(ptr) AccessChain 34(data) 1142 57 38
+                              Store 1147 1146
+            1148:      6(int) Load 8(invocation)
+            1151:   1150(ptr) AccessChain 34(data) 46 57
+            1152: 22(i16vec4) Load 1151
+            1153:1149(i16vec2) VectorShuffle 1152 1152 0 1
+            1154:1149(i16vec2) GroupNonUniformIAdd 42 Reduce 1153
+            1155:   1150(ptr) AccessChain 34(data) 1148 57
+            1156: 22(i16vec4) Load 1155
+            1157: 22(i16vec4) VectorShuffle 1156 1154 4 5 2 3
+                              Store 1155 1157
+            1158:      6(int) Load 8(invocation)
+            1160:   1150(ptr) AccessChain 34(data) 57 57
+            1161: 22(i16vec4) Load 1160
+            1162:1159(i16vec3) VectorShuffle 1161 1161 0 1 2
+            1163:1159(i16vec3) GroupNonUniformIAdd 42 Reduce 1162
+            1164:   1150(ptr) AccessChain 34(data) 1158 57
+            1165: 22(i16vec4) Load 1164
+            1166: 22(i16vec4) VectorShuffle 1165 1163 4 5 6 3
+                              Store 1164 1166
+            1167:      6(int) Load 8(invocation)
+            1168:   1150(ptr) AccessChain 34(data) 67 57
+            1169: 22(i16vec4) Load 1168
+            1170: 22(i16vec4) GroupNonUniformIAdd 42 Reduce 1169
+            1171:   1150(ptr) AccessChain 34(data) 1167 57
+                              Store 1171 1170
+            1172:      6(int) Load 8(invocation)
+            1173:   1143(ptr) AccessChain 34(data) 37 57 38
+            1174: 21(int16_t) Load 1173
+            1175: 21(int16_t) GroupNonUniformIMul 42 Reduce 1174
+            1176:   1143(ptr) AccessChain 34(data) 1172 57 38
+                              Store 1176 1175
+            1177:      6(int) Load 8(invocation)
+            1178:   1150(ptr) AccessChain 34(data) 46 57
+            1179: 22(i16vec4) Load 1178
+            1180:1149(i16vec2) VectorShuffle 1179 1179 0 1
+            1181:1149(i16vec2) GroupNonUniformIMul 42 Reduce 1180
+            1182:   1150(ptr) AccessChain 34(data) 1177 57
+            1183: 22(i16vec4) Load 1182
+            1184: 22(i16vec4) VectorShuffle 1183 1181 4 5 2 3
+                              Store 1182 1184
+            1185:      6(int) Load 8(invocation)
+            1186:   1150(ptr) AccessChain 34(data) 57 57
+            1187: 22(i16vec4) Load 1186
+            1188:1159(i16vec3) VectorShuffle 1187 1187 0 1 2
+            1189:1159(i16vec3) GroupNonUniformIMul 42 Reduce 1188
+            1190:   1150(ptr) AccessChain 34(data) 1185 57
+            1191: 22(i16vec4) Load 1190
+            1192: 22(i16vec4) VectorShuffle 1191 1189 4 5 6 3
+                              Store 1190 1192
+            1193:      6(int) Load 8(invocation)
+            1194:   1150(ptr) AccessChain 34(data) 67 57
+            1195: 22(i16vec4) Load 1194
+            1196: 22(i16vec4) GroupNonUniformIMul 42 Reduce 1195
+            1197:   1150(ptr) AccessChain 34(data) 1193 57
+                              Store 1197 1196
+            1198:      6(int) Load 8(invocation)
+            1199:   1143(ptr) AccessChain 34(data) 37 57 38
+            1200: 21(int16_t) Load 1199
+            1201: 21(int16_t) GroupNonUniformSMin 42 Reduce 1200
+            1202:   1143(ptr) AccessChain 34(data) 1198 57 38
+                              Store 1202 1201
+            1203:      6(int) Load 8(invocation)
+            1204:   1150(ptr) AccessChain 34(data) 46 57
+            1205: 22(i16vec4) Load 1204
+            1206:1149(i16vec2) VectorShuffle 1205 1205 0 1
+            1207:1149(i16vec2) GroupNonUniformSMin 42 Reduce 1206
+            1208:   1150(ptr) AccessChain 34(data) 1203 57
+            1209: 22(i16vec4) Load 1208
+            1210: 22(i16vec4) VectorShuffle 1209 1207 4 5 2 3
+                              Store 1208 1210
+            1211:      6(int) Load 8(invocation)
+            1212:   1150(ptr) AccessChain 34(data) 57 57
+            1213: 22(i16vec4) Load 1212
+            1214:1159(i16vec3) VectorShuffle 1213 1213 0 1 2
+            1215:1159(i16vec3) GroupNonUniformSMin 42 Reduce 1214
+            1216:   1150(ptr) AccessChain 34(data) 1211 57
+            1217: 22(i16vec4) Load 1216
+            1218: 22(i16vec4) VectorShuffle 1217 1215 4 5 6 3
+                              Store 1216 1218
+            1219:      6(int) Load 8(invocation)
+            1220:   1150(ptr) AccessChain 34(data) 67 57
+            1221: 22(i16vec4) Load 1220
+            1222: 22(i16vec4) GroupNonUniformSMin 42 Reduce 1221
+            1223:   1150(ptr) AccessChain 34(data) 1219 57
+                              Store 1223 1222
+            1224:      6(int) Load 8(invocation)
+            1225:   1143(ptr) AccessChain 34(data) 37 57 38
+            1226: 21(int16_t) Load 1225
+            1227: 21(int16_t) GroupNonUniformSMax 42 Reduce 1226
+            1228:   1143(ptr) AccessChain 34(data) 1224 57 38
+                              Store 1228 1227
+            1229:      6(int) Load 8(invocation)
+            1230:   1150(ptr) AccessChain 34(data) 46 57
+            1231: 22(i16vec4) Load 1230
+            1232:1149(i16vec2) VectorShuffle 1231 1231 0 1
+            1233:1149(i16vec2) GroupNonUniformSMax 42 Reduce 1232
+            1234:   1150(ptr) AccessChain 34(data) 1229 57
+            1235: 22(i16vec4) Load 1234
+            1236: 22(i16vec4) VectorShuffle 1235 1233 4 5 2 3
+                              Store 1234 1236
+            1237:      6(int) Load 8(invocation)
+            1238:   1150(ptr) AccessChain 34(data) 57 57
+            1239: 22(i16vec4) Load 1238
+            1240:1159(i16vec3) VectorShuffle 1239 1239 0 1 2
+            1241:1159(i16vec3) GroupNonUniformSMax 42 Reduce 1240
+            1242:   1150(ptr) AccessChain 34(data) 1237 57
+            1243: 22(i16vec4) Load 1242
+            1244: 22(i16vec4) VectorShuffle 1243 1241 4 5 6 3
+                              Store 1242 1244
+            1245:      6(int) Load 8(invocation)
+            1246:   1150(ptr) AccessChain 34(data) 67 57
+            1247: 22(i16vec4) Load 1246
+            1248: 22(i16vec4) GroupNonUniformSMax 42 Reduce 1247
+            1249:   1150(ptr) AccessChain 34(data) 1245 57
+                              Store 1249 1248
+            1250:      6(int) Load 8(invocation)
+            1251:   1143(ptr) AccessChain 34(data) 37 57 38
+            1252: 21(int16_t) Load 1251
+            1253: 21(int16_t) GroupNonUniformBitwiseAnd 42 Reduce 1252
+            1254:   1143(ptr) AccessChain 34(data) 1250 57 38
+                              Store 1254 1253
+            1255:      6(int) Load 8(invocation)
+            1256:   1150(ptr) AccessChain 34(data) 46 57
+            1257: 22(i16vec4) Load 1256
+            1258:1149(i16vec2) VectorShuffle 1257 1257 0 1
+            1259:1149(i16vec2) GroupNonUniformBitwiseAnd 42 Reduce 1258
+            1260:   1150(ptr) AccessChain 34(data) 1255 57
+            1261: 22(i16vec4) Load 1260
+            1262: 22(i16vec4) VectorShuffle 1261 1259 4 5 2 3
+                              Store 1260 1262
+            1263:      6(int) Load 8(invocation)
+            1264:   1150(ptr) AccessChain 34(data) 57 57
+            1265: 22(i16vec4) Load 1264
+            1266:1159(i16vec3) VectorShuffle 1265 1265 0 1 2
+            1267:1159(i16vec3) GroupNonUniformBitwiseAnd 42 Reduce 1266
+            1268:   1150(ptr) AccessChain 34(data) 1263 57
+            1269: 22(i16vec4) Load 1268
+            1270: 22(i16vec4) VectorShuffle 1269 1267 4 5 6 3
+                              Store 1268 1270
+            1271:      6(int) Load 8(invocation)
+            1272:   1150(ptr) AccessChain 34(data) 67 57
+            1273: 22(i16vec4) Load 1272
+            1274: 22(i16vec4) GroupNonUniformBitwiseAnd 42 Reduce 1273
+            1275:   1150(ptr) AccessChain 34(data) 1271 57
+                              Store 1275 1274
+            1276:      6(int) Load 8(invocation)
+            1277:   1143(ptr) AccessChain 34(data) 37 57 38
+            1278: 21(int16_t) Load 1277
+            1279: 21(int16_t) GroupNonUniformBitwiseOr 42 Reduce 1278
+            1280:   1143(ptr) AccessChain 34(data) 1276 57 38
+                              Store 1280 1279
+            1281:      6(int) Load 8(invocation)
+            1282:   1150(ptr) AccessChain 34(data) 46 57
+            1283: 22(i16vec4) Load 1282
+            1284:1149(i16vec2) VectorShuffle 1283 1283 0 1
+            1285:1149(i16vec2) GroupNonUniformBitwiseOr 42 Reduce 1284
+            1286:   1150(ptr) AccessChain 34(data) 1281 57
+            1287: 22(i16vec4) Load 1286
+            1288: 22(i16vec4) VectorShuffle 1287 1285 4 5 2 3
+                              Store 1286 1288
+            1289:      6(int) Load 8(invocation)
+            1290:   1150(ptr) AccessChain 34(data) 57 57
+            1291: 22(i16vec4) Load 1290
+            1292:1159(i16vec3) VectorShuffle 1291 1291 0 1 2
+            1293:1159(i16vec3) GroupNonUniformBitwiseOr 42 Reduce 1292
+            1294:   1150(ptr) AccessChain 34(data) 1289 57
+            1295: 22(i16vec4) Load 1294
+            1296: 22(i16vec4) VectorShuffle 1295 1293 4 5 6 3
+                              Store 1294 1296
+            1297:      6(int) Load 8(invocation)
+            1298:   1150(ptr) AccessChain 34(data) 67 57
+            1299: 22(i16vec4) Load 1298
+            1300: 22(i16vec4) GroupNonUniformBitwiseOr 42 Reduce 1299
+            1301:   1150(ptr) AccessChain 34(data) 1297 57
+                              Store 1301 1300
+            1302:      6(int) Load 8(invocation)
+            1303:   1143(ptr) AccessChain 34(data) 37 57 38
+            1304: 21(int16_t) Load 1303
+            1305: 21(int16_t) GroupNonUniformBitwiseXor 42 Reduce 1304
+            1306:   1143(ptr) AccessChain 34(data) 1302 57 38
+                              Store 1306 1305
+            1307:      6(int) Load 8(invocation)
+            1308:   1150(ptr) AccessChain 34(data) 46 57
+            1309: 22(i16vec4) Load 1308
+            1310:1149(i16vec2) VectorShuffle 1309 1309 0 1
+            1311:1149(i16vec2) GroupNonUniformBitwiseXor 42 Reduce 1310
+            1312:   1150(ptr) AccessChain 34(data) 1307 57
+            1313: 22(i16vec4) Load 1312
+            1314: 22(i16vec4) VectorShuffle 1313 1311 4 5 2 3
+                              Store 1312 1314
+            1315:      6(int) Load 8(invocation)
+            1316:   1150(ptr) AccessChain 34(data) 57 57
+            1317: 22(i16vec4) Load 1316
+            1318:1159(i16vec3) VectorShuffle 1317 1317 0 1 2
+            1319:1159(i16vec3) GroupNonUniformBitwiseXor 42 Reduce 1318
+            1320:   1150(ptr) AccessChain 34(data) 1315 57
+            1321: 22(i16vec4) Load 1320
+            1322: 22(i16vec4) VectorShuffle 1321 1319 4 5 6 3
+                              Store 1320 1322
+            1323:      6(int) Load 8(invocation)
+            1324:   1150(ptr) AccessChain 34(data) 67 57
+            1325: 22(i16vec4) Load 1324
+            1326: 22(i16vec4) GroupNonUniformBitwiseXor 42 Reduce 1325
+            1327:   1150(ptr) AccessChain 34(data) 1323 57
+                              Store 1327 1326
+            1328:      6(int) Load 8(invocation)
+            1329:   1143(ptr) AccessChain 34(data) 37 57 38
+            1330: 21(int16_t) Load 1329
+            1331: 21(int16_t) GroupNonUniformIAdd 42 InclusiveScan 1330
+            1332:   1143(ptr) AccessChain 34(data) 1328 57 38
+                              Store 1332 1331
+            1333:      6(int) Load 8(invocation)
+            1334:   1150(ptr) AccessChain 34(data) 46 57
+            1335: 22(i16vec4) Load 1334
+            1336:1149(i16vec2) VectorShuffle 1335 1335 0 1
+            1337:1149(i16vec2) GroupNonUniformIAdd 42 InclusiveScan 1336
+            1338:   1150(ptr) AccessChain 34(data) 1333 57
+            1339: 22(i16vec4) Load 1338
+            1340: 22(i16vec4) VectorShuffle 1339 1337 4 5 2 3
+                              Store 1338 1340
+            1341:      6(int) Load 8(invocation)
+            1342:   1150(ptr) AccessChain 34(data) 57 57
+            1343: 22(i16vec4) Load 1342
+            1344:1159(i16vec3) VectorShuffle 1343 1343 0 1 2
+            1345:1159(i16vec3) GroupNonUniformIAdd 42 InclusiveScan 1344
+            1346:   1150(ptr) AccessChain 34(data) 1341 57
+            1347: 22(i16vec4) Load 1346
+            1348: 22(i16vec4) VectorShuffle 1347 1345 4 5 6 3
+                              Store 1346 1348
+            1349:      6(int) Load 8(invocation)
+            1350:   1150(ptr) AccessChain 34(data) 67 57
+            1351: 22(i16vec4) Load 1350
+            1352: 22(i16vec4) GroupNonUniformIAdd 42 InclusiveScan 1351
+            1353:   1150(ptr) AccessChain 34(data) 1349 57
+                              Store 1353 1352
+            1354:      6(int) Load 8(invocation)
+            1355:   1143(ptr) AccessChain 34(data) 37 57 38
+            1356: 21(int16_t) Load 1355
+            1357: 21(int16_t) GroupNonUniformIMul 42 InclusiveScan 1356
+            1358:   1143(ptr) AccessChain 34(data) 1354 57 38
+                              Store 1358 1357
+            1359:      6(int) Load 8(invocation)
+            1360:   1150(ptr) AccessChain 34(data) 46 57
+            1361: 22(i16vec4) Load 1360
+            1362:1149(i16vec2) VectorShuffle 1361 1361 0 1
+            1363:1149(i16vec2) GroupNonUniformIMul 42 InclusiveScan 1362
+            1364:   1150(ptr) AccessChain 34(data) 1359 57
+            1365: 22(i16vec4) Load 1364
+            1366: 22(i16vec4) VectorShuffle 1365 1363 4 5 2 3
+                              Store 1364 1366
+            1367:      6(int) Load 8(invocation)
+            1368:   1150(ptr) AccessChain 34(data) 57 57
+            1369: 22(i16vec4) Load 1368
+            1370:1159(i16vec3) VectorShuffle 1369 1369 0 1 2
+            1371:1159(i16vec3) GroupNonUniformIMul 42 InclusiveScan 1370
+            1372:   1150(ptr) AccessChain 34(data) 1367 57
+            1373: 22(i16vec4) Load 1372
+            1374: 22(i16vec4) VectorShuffle 1373 1371 4 5 6 3
+                              Store 1372 1374
+            1375:      6(int) Load 8(invocation)
+            1376:   1150(ptr) AccessChain 34(data) 67 57
+            1377: 22(i16vec4) Load 1376
+            1378: 22(i16vec4) GroupNonUniformIMul 42 InclusiveScan 1377
+            1379:   1150(ptr) AccessChain 34(data) 1375 57
+                              Store 1379 1378
+            1380:      6(int) Load 8(invocation)
+            1381:   1143(ptr) AccessChain 34(data) 37 57 38
+            1382: 21(int16_t) Load 1381
+            1383: 21(int16_t) GroupNonUniformSMin 42 InclusiveScan 1382
+            1384:   1143(ptr) AccessChain 34(data) 1380 57 38
+                              Store 1384 1383
+            1385:      6(int) Load 8(invocation)
+            1386:   1150(ptr) AccessChain 34(data) 46 57
+            1387: 22(i16vec4) Load 1386
+            1388:1149(i16vec2) VectorShuffle 1387 1387 0 1
+            1389:1149(i16vec2) GroupNonUniformSMin 42 InclusiveScan 1388
+            1390:   1150(ptr) AccessChain 34(data) 1385 57
+            1391: 22(i16vec4) Load 1390
+            1392: 22(i16vec4) VectorShuffle 1391 1389 4 5 2 3
+                              Store 1390 1392
+            1393:      6(int) Load 8(invocation)
+            1394:   1150(ptr) AccessChain 34(data) 57 57
+            1395: 22(i16vec4) Load 1394
+            1396:1159(i16vec3) VectorShuffle 1395 1395 0 1 2
+            1397:1159(i16vec3) GroupNonUniformSMin 42 InclusiveScan 1396
+            1398:   1150(ptr) AccessChain 34(data) 1393 57
+            1399: 22(i16vec4) Load 1398
+            1400: 22(i16vec4) VectorShuffle 1399 1397 4 5 6 3
+                              Store 1398 1400
+            1401:      6(int) Load 8(invocation)
+            1402:   1150(ptr) AccessChain 34(data) 67 57
+            1403: 22(i16vec4) Load 1402
+            1404: 22(i16vec4) GroupNonUniformSMin 42 InclusiveScan 1403
+            1405:   1150(ptr) AccessChain 34(data) 1401 57
+                              Store 1405 1404
+            1406:      6(int) Load 8(invocation)
+            1407:   1143(ptr) AccessChain 34(data) 37 57 38
+            1408: 21(int16_t) Load 1407
+            1409: 21(int16_t) GroupNonUniformSMax 42 InclusiveScan 1408
+            1410:   1143(ptr) AccessChain 34(data) 1406 57 38
+                              Store 1410 1409
+            1411:      6(int) Load 8(invocation)
+            1412:   1150(ptr) AccessChain 34(data) 46 57
+            1413: 22(i16vec4) Load 1412
+            1414:1149(i16vec2) VectorShuffle 1413 1413 0 1
+            1415:1149(i16vec2) GroupNonUniformSMax 42 InclusiveScan 1414
+            1416:   1150(ptr) AccessChain 34(data) 1411 57
+            1417: 22(i16vec4) Load 1416
+            1418: 22(i16vec4) VectorShuffle 1417 1415 4 5 2 3
+                              Store 1416 1418
+            1419:      6(int) Load 8(invocation)
+            1420:   1150(ptr) AccessChain 34(data) 57 57
+            1421: 22(i16vec4) Load 1420
+            1422:1159(i16vec3) VectorShuffle 1421 1421 0 1 2
+            1423:1159(i16vec3) GroupNonUniformSMax 42 InclusiveScan 1422
+            1424:   1150(ptr) AccessChain 34(data) 1419 57
+            1425: 22(i16vec4) Load 1424
+            1426: 22(i16vec4) VectorShuffle 1425 1423 4 5 6 3
+                              Store 1424 1426
+            1427:      6(int) Load 8(invocation)
+            1428:   1150(ptr) AccessChain 34(data) 67 57
+            1429: 22(i16vec4) Load 1428
+            1430: 22(i16vec4) GroupNonUniformSMax 42 InclusiveScan 1429
+            1431:   1150(ptr) AccessChain 34(data) 1427 57
+                              Store 1431 1430
+            1432:      6(int) Load 8(invocation)
+            1433:   1143(ptr) AccessChain 34(data) 37 57 38
+            1434: 21(int16_t) Load 1433
+            1435: 21(int16_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 1434
+            1436:   1143(ptr) AccessChain 34(data) 1432 57 38
+                              Store 1436 1435
+            1437:      6(int) Load 8(invocation)
+            1438:   1150(ptr) AccessChain 34(data) 46 57
+            1439: 22(i16vec4) Load 1438
+            1440:1149(i16vec2) VectorShuffle 1439 1439 0 1
+            1441:1149(i16vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 1440
+            1442:   1150(ptr) AccessChain 34(data) 1437 57
+            1443: 22(i16vec4) Load 1442
+            1444: 22(i16vec4) VectorShuffle 1443 1441 4 5 2 3
+                              Store 1442 1444
+            1445:      6(int) Load 8(invocation)
+            1446:   1150(ptr) AccessChain 34(data) 57 57
+            1447: 22(i16vec4) Load 1446
+            1448:1159(i16vec3) VectorShuffle 1447 1447 0 1 2
+            1449:1159(i16vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 1448
+            1450:   1150(ptr) AccessChain 34(data) 1445 57
+            1451: 22(i16vec4) Load 1450
+            1452: 22(i16vec4) VectorShuffle 1451 1449 4 5 6 3
+                              Store 1450 1452
+            1453:      6(int) Load 8(invocation)
+            1454:   1150(ptr) AccessChain 34(data) 67 57
+            1455: 22(i16vec4) Load 1454
+            1456: 22(i16vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 1455
+            1457:   1150(ptr) AccessChain 34(data) 1453 57
+                              Store 1457 1456
+            1458:      6(int) Load 8(invocation)
+            1459:   1143(ptr) AccessChain 34(data) 37 57 38
+            1460: 21(int16_t) Load 1459
+            1461: 21(int16_t) GroupNonUniformBitwiseOr 42 InclusiveScan 1460
+            1462:   1143(ptr) AccessChain 34(data) 1458 57 38
+                              Store 1462 1461
+            1463:      6(int) Load 8(invocation)
+            1464:   1150(ptr) AccessChain 34(data) 46 57
+            1465: 22(i16vec4) Load 1464
+            1466:1149(i16vec2) VectorShuffle 1465 1465 0 1
+            1467:1149(i16vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 1466
+            1468:   1150(ptr) AccessChain 34(data) 1463 57
+            1469: 22(i16vec4) Load 1468
+            1470: 22(i16vec4) VectorShuffle 1469 1467 4 5 2 3
+                              Store 1468 1470
+            1471:      6(int) Load 8(invocation)
+            1472:   1150(ptr) AccessChain 34(data) 57 57
+            1473: 22(i16vec4) Load 1472
+            1474:1159(i16vec3) VectorShuffle 1473 1473 0 1 2
+            1475:1159(i16vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 1474
+            1476:   1150(ptr) AccessChain 34(data) 1471 57
+            1477: 22(i16vec4) Load 1476
+            1478: 22(i16vec4) VectorShuffle 1477 1475 4 5 6 3
+                              Store 1476 1478
+            1479:      6(int) Load 8(invocation)
+            1480:   1150(ptr) AccessChain 34(data) 67 57
+            1481: 22(i16vec4) Load 1480
+            1482: 22(i16vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 1481
+            1483:   1150(ptr) AccessChain 34(data) 1479 57
+                              Store 1483 1482
+            1484:      6(int) Load 8(invocation)
+            1485:   1143(ptr) AccessChain 34(data) 37 57 38
+            1486: 21(int16_t) Load 1485
+            1487: 21(int16_t) GroupNonUniformBitwiseXor 42 InclusiveScan 1486
+            1488:   1143(ptr) AccessChain 34(data) 1484 57 38
+                              Store 1488 1487
+            1489:      6(int) Load 8(invocation)
+            1490:   1150(ptr) AccessChain 34(data) 46 57
+            1491: 22(i16vec4) Load 1490
+            1492:1149(i16vec2) VectorShuffle 1491 1491 0 1
+            1493:1149(i16vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 1492
+            1494:   1150(ptr) AccessChain 34(data) 1489 57
+            1495: 22(i16vec4) Load 1494
+            1496: 22(i16vec4) VectorShuffle 1495 1493 4 5 2 3
+                              Store 1494 1496
+            1497:      6(int) Load 8(invocation)
+            1498:   1150(ptr) AccessChain 34(data) 57 57
+            1499: 22(i16vec4) Load 1498
+            1500:1159(i16vec3) VectorShuffle 1499 1499 0 1 2
+            1501:1159(i16vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 1500
+            1502:   1150(ptr) AccessChain 34(data) 1497 57
+            1503: 22(i16vec4) Load 1502
+            1504: 22(i16vec4) VectorShuffle 1503 1501 4 5 6 3
+                              Store 1502 1504
+            1505:      6(int) Load 8(invocation)
+            1506:   1150(ptr) AccessChain 34(data) 67 57
+            1507: 22(i16vec4) Load 1506
+            1508: 22(i16vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 1507
+            1509:   1150(ptr) AccessChain 34(data) 1505 57
+                              Store 1509 1508
+            1510:      6(int) Load 8(invocation)
+            1511:   1143(ptr) AccessChain 34(data) 37 57 38
+            1512: 21(int16_t) Load 1511
+            1513: 21(int16_t) GroupNonUniformIAdd 42 ExclusiveScan 1512
+            1514:   1143(ptr) AccessChain 34(data) 1510 57 38
+                              Store 1514 1513
+            1515:      6(int) Load 8(invocation)
+            1516:   1150(ptr) AccessChain 34(data) 46 57
+            1517: 22(i16vec4) Load 1516
+            1518:1149(i16vec2) VectorShuffle 1517 1517 0 1
+            1519:1149(i16vec2) GroupNonUniformIAdd 42 ExclusiveScan 1518
+            1520:   1150(ptr) AccessChain 34(data) 1515 57
+            1521: 22(i16vec4) Load 1520
+            1522: 22(i16vec4) VectorShuffle 1521 1519 4 5 2 3
+                              Store 1520 1522
+            1523:      6(int) Load 8(invocation)
+            1524:   1150(ptr) AccessChain 34(data) 57 57
+            1525: 22(i16vec4) Load 1524
+            1526:1159(i16vec3) VectorShuffle 1525 1525 0 1 2
+            1527:1159(i16vec3) GroupNonUniformIAdd 42 ExclusiveScan 1526
+            1528:   1150(ptr) AccessChain 34(data) 1523 57
+            1529: 22(i16vec4) Load 1528
+            1530: 22(i16vec4) VectorShuffle 1529 1527 4 5 6 3
+                              Store 1528 1530
+            1531:      6(int) Load 8(invocation)
+            1532:   1150(ptr) AccessChain 34(data) 67 57
+            1533: 22(i16vec4) Load 1532
+            1534: 22(i16vec4) GroupNonUniformIAdd 42 ExclusiveScan 1533
+            1535:   1150(ptr) AccessChain 34(data) 1531 57
+                              Store 1535 1534
+            1536:      6(int) Load 8(invocation)
+            1537:   1143(ptr) AccessChain 34(data) 37 57 38
+            1538: 21(int16_t) Load 1537
+            1539: 21(int16_t) GroupNonUniformIMul 42 ExclusiveScan 1538
+            1540:   1143(ptr) AccessChain 34(data) 1536 57 38
+                              Store 1540 1539
+            1541:      6(int) Load 8(invocation)
+            1542:   1150(ptr) AccessChain 34(data) 46 57
+            1543: 22(i16vec4) Load 1542
+            1544:1149(i16vec2) VectorShuffle 1543 1543 0 1
+            1545:1149(i16vec2) GroupNonUniformIMul 42 ExclusiveScan 1544
+            1546:   1150(ptr) AccessChain 34(data) 1541 57
+            1547: 22(i16vec4) Load 1546
+            1548: 22(i16vec4) VectorShuffle 1547 1545 4 5 2 3
+                              Store 1546 1548
+            1549:      6(int) Load 8(invocation)
+            1550:   1150(ptr) AccessChain 34(data) 57 57
+            1551: 22(i16vec4) Load 1550
+            1552:1159(i16vec3) VectorShuffle 1551 1551 0 1 2
+            1553:1159(i16vec3) GroupNonUniformIMul 42 ExclusiveScan 1552
+            1554:   1150(ptr) AccessChain 34(data) 1549 57
+            1555: 22(i16vec4) Load 1554
+            1556: 22(i16vec4) VectorShuffle 1555 1553 4 5 6 3
+                              Store 1554 1556
+            1557:      6(int) Load 8(invocation)
+            1558:   1150(ptr) AccessChain 34(data) 67 57
+            1559: 22(i16vec4) Load 1558
+            1560: 22(i16vec4) GroupNonUniformIMul 42 ExclusiveScan 1559
+            1561:   1150(ptr) AccessChain 34(data) 1557 57
+                              Store 1561 1560
+            1562:      6(int) Load 8(invocation)
+            1563:   1143(ptr) AccessChain 34(data) 37 57 38
+            1564: 21(int16_t) Load 1563
+            1565: 21(int16_t) GroupNonUniformSMin 42 ExclusiveScan 1564
+            1566:   1143(ptr) AccessChain 34(data) 1562 57 38
+                              Store 1566 1565
+            1567:      6(int) Load 8(invocation)
+            1568:   1150(ptr) AccessChain 34(data) 46 57
+            1569: 22(i16vec4) Load 1568
+            1570:1149(i16vec2) VectorShuffle 1569 1569 0 1
+            1571:1149(i16vec2) GroupNonUniformSMin 42 ExclusiveScan 1570
+            1572:   1150(ptr) AccessChain 34(data) 1567 57
+            1573: 22(i16vec4) Load 1572
+            1574: 22(i16vec4) VectorShuffle 1573 1571 4 5 2 3
+                              Store 1572 1574
+            1575:      6(int) Load 8(invocation)
+            1576:   1150(ptr) AccessChain 34(data) 57 57
+            1577: 22(i16vec4) Load 1576
+            1578:1159(i16vec3) VectorShuffle 1577 1577 0 1 2
+            1579:1159(i16vec3) GroupNonUniformSMin 42 ExclusiveScan 1578
+            1580:   1150(ptr) AccessChain 34(data) 1575 57
+            1581: 22(i16vec4) Load 1580
+            1582: 22(i16vec4) VectorShuffle 1581 1579 4 5 6 3
+                              Store 1580 1582
+            1583:      6(int) Load 8(invocation)
+            1584:   1150(ptr) AccessChain 34(data) 67 57
+            1585: 22(i16vec4) Load 1584
+            1586: 22(i16vec4) GroupNonUniformSMin 42 ExclusiveScan 1585
+            1587:   1150(ptr) AccessChain 34(data) 1583 57
+                              Store 1587 1586
+            1588:      6(int) Load 8(invocation)
+            1589:   1143(ptr) AccessChain 34(data) 37 57 38
+            1590: 21(int16_t) Load 1589
+            1591: 21(int16_t) GroupNonUniformSMax 42 ExclusiveScan 1590
+            1592:   1143(ptr) AccessChain 34(data) 1588 57 38
+                              Store 1592 1591
+            1593:      6(int) Load 8(invocation)
+            1594:   1150(ptr) AccessChain 34(data) 46 57
+            1595: 22(i16vec4) Load 1594
+            1596:1149(i16vec2) VectorShuffle 1595 1595 0 1
+            1597:1149(i16vec2) GroupNonUniformSMax 42 ExclusiveScan 1596
+            1598:   1150(ptr) AccessChain 34(data) 1593 57
+            1599: 22(i16vec4) Load 1598
+            1600: 22(i16vec4) VectorShuffle 1599 1597 4 5 2 3
+                              Store 1598 1600
+            1601:      6(int) Load 8(invocation)
+            1602:   1150(ptr) AccessChain 34(data) 57 57
+            1603: 22(i16vec4) Load 1602
+            1604:1159(i16vec3) VectorShuffle 1603 1603 0 1 2
+            1605:1159(i16vec3) GroupNonUniformSMax 42 ExclusiveScan 1604
+            1606:   1150(ptr) AccessChain 34(data) 1601 57
+            1607: 22(i16vec4) Load 1606
+            1608: 22(i16vec4) VectorShuffle 1607 1605 4 5 6 3
+                              Store 1606 1608
+            1609:      6(int) Load 8(invocation)
+            1610:   1150(ptr) AccessChain 34(data) 67 57
+            1611: 22(i16vec4) Load 1610
+            1612: 22(i16vec4) GroupNonUniformSMax 42 ExclusiveScan 1611
+            1613:   1150(ptr) AccessChain 34(data) 1609 57
+                              Store 1613 1612
+            1614:      6(int) Load 8(invocation)
+            1615:   1143(ptr) AccessChain 34(data) 37 57 38
+            1616: 21(int16_t) Load 1615
+            1617: 21(int16_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1616
+            1618:   1143(ptr) AccessChain 34(data) 1614 57 38
+                              Store 1618 1617
+            1619:      6(int) Load 8(invocation)
+            1620:   1150(ptr) AccessChain 34(data) 46 57
+            1621: 22(i16vec4) Load 1620
+            1622:1149(i16vec2) VectorShuffle 1621 1621 0 1
+            1623:1149(i16vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1622
+            1624:   1150(ptr) AccessChain 34(data) 1619 57
+            1625: 22(i16vec4) Load 1624
+            1626: 22(i16vec4) VectorShuffle 1625 1623 4 5 2 3
+                              Store 1624 1626
+            1627:      6(int) Load 8(invocation)
+            1628:   1150(ptr) AccessChain 34(data) 57 57
+            1629: 22(i16vec4) Load 1628
+            1630:1159(i16vec3) VectorShuffle 1629 1629 0 1 2
+            1631:1159(i16vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1630
+            1632:   1150(ptr) AccessChain 34(data) 1627 57
+            1633: 22(i16vec4) Load 1632
+            1634: 22(i16vec4) VectorShuffle 1633 1631 4 5 6 3
+                              Store 1632 1634
+            1635:      6(int) Load 8(invocation)
+            1636:   1150(ptr) AccessChain 34(data) 67 57
+            1637: 22(i16vec4) Load 1636
+            1638: 22(i16vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1637
+            1639:   1150(ptr) AccessChain 34(data) 1635 57
+                              Store 1639 1638
+            1640:      6(int) Load 8(invocation)
+            1641:   1143(ptr) AccessChain 34(data) 37 57 38
+            1642: 21(int16_t) Load 1641
+            1643: 21(int16_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 1642
+            1644:   1143(ptr) AccessChain 34(data) 1640 57 38
+                              Store 1644 1643
+            1645:      6(int) Load 8(invocation)
+            1646:   1150(ptr) AccessChain 34(data) 46 57
+            1647: 22(i16vec4) Load 1646
+            1648:1149(i16vec2) VectorShuffle 1647 1647 0 1
+            1649:1149(i16vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 1648
+            1650:   1150(ptr) AccessChain 34(data) 1645 57
+            1651: 22(i16vec4) Load 1650
+            1652: 22(i16vec4) VectorShuffle 1651 1649 4 5 2 3
+                              Store 1650 1652
+            1653:      6(int) Load 8(invocation)
+            1654:   1150(ptr) AccessChain 34(data) 57 57
+            1655: 22(i16vec4) Load 1654
+            1656:1159(i16vec3) VectorShuffle 1655 1655 0 1 2
+            1657:1159(i16vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 1656
+            1658:   1150(ptr) AccessChain 34(data) 1653 57
+            1659: 22(i16vec4) Load 1658
+            1660: 22(i16vec4) VectorShuffle 1659 1657 4 5 6 3
+                              Store 1658 1660
+            1661:      6(int) Load 8(invocation)
+            1662:   1150(ptr) AccessChain 34(data) 67 57
+            1663: 22(i16vec4) Load 1662
+            1664: 22(i16vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 1663
+            1665:   1150(ptr) AccessChain 34(data) 1661 57
+                              Store 1665 1664
+            1666:      6(int) Load 8(invocation)
+            1667:   1143(ptr) AccessChain 34(data) 37 57 38
+            1668: 21(int16_t) Load 1667
+            1669: 21(int16_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 1668
+            1670:   1143(ptr) AccessChain 34(data) 1666 57 38
+                              Store 1670 1669
+            1671:      6(int) Load 8(invocation)
+            1672:   1150(ptr) AccessChain 34(data) 46 57
+            1673: 22(i16vec4) Load 1672
+            1674:1149(i16vec2) VectorShuffle 1673 1673 0 1
+            1675:1149(i16vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 1674
+            1676:   1150(ptr) AccessChain 34(data) 1671 57
+            1677: 22(i16vec4) Load 1676
+            1678: 22(i16vec4) VectorShuffle 1677 1675 4 5 2 3
+                              Store 1676 1678
+            1679:      6(int) Load 8(invocation)
+            1680:   1150(ptr) AccessChain 34(data) 57 57
+            1681: 22(i16vec4) Load 1680
+            1682:1159(i16vec3) VectorShuffle 1681 1681 0 1 2
+            1683:1159(i16vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 1682
+            1684:   1150(ptr) AccessChain 34(data) 1679 57
+            1685: 22(i16vec4) Load 1684
+            1686: 22(i16vec4) VectorShuffle 1685 1683 4 5 6 3
+                              Store 1684 1686
+            1687:      6(int) Load 8(invocation)
+            1688:   1150(ptr) AccessChain 34(data) 67 57
+            1689: 22(i16vec4) Load 1688
+            1690: 22(i16vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 1689
+            1691:   1150(ptr) AccessChain 34(data) 1687 57
+                              Store 1691 1690
+            1692:      6(int) Load 8(invocation)
+            1694:   1693(ptr) AccessChain 34(data) 37 67 38
+            1695: 23(int16_t) Load 1694
+            1696: 23(int16_t) GroupNonUniformIAdd 42 Reduce 1695
+            1697:   1693(ptr) AccessChain 34(data) 1692 67 38
+                              Store 1697 1696
+            1698:      6(int) Load 8(invocation)
+            1701:   1700(ptr) AccessChain 34(data) 46 67
+            1702: 24(i16vec4) Load 1701
+            1703:1699(i16vec2) VectorShuffle 1702 1702 0 1
+            1704:1699(i16vec2) GroupNonUniformIAdd 42 Reduce 1703
+            1705:   1700(ptr) AccessChain 34(data) 1698 67
+            1706: 24(i16vec4) Load 1705
+            1707: 24(i16vec4) VectorShuffle 1706 1704 4 5 2 3
+                              Store 1705 1707
+            1708:      6(int) Load 8(invocation)
+            1710:   1700(ptr) AccessChain 34(data) 57 67
+            1711: 24(i16vec4) Load 1710
+            1712:1709(i16vec3) VectorShuffle 1711 1711 0 1 2
+            1713:1709(i16vec3) GroupNonUniformIAdd 42 Reduce 1712
+            1714:   1700(ptr) AccessChain 34(data) 1708 67
+            1715: 24(i16vec4) Load 1714
+            1716: 24(i16vec4) VectorShuffle 1715 1713 4 5 6 3
+                              Store 1714 1716
+            1717:      6(int) Load 8(invocation)
+            1718:   1700(ptr) AccessChain 34(data) 67 67
+            1719: 24(i16vec4) Load 1718
+            1720: 24(i16vec4) GroupNonUniformIAdd 42 Reduce 1719
+            1721:   1700(ptr) AccessChain 34(data) 1717 67
+                              Store 1721 1720
+            1722:      6(int) Load 8(invocation)
+            1723:   1693(ptr) AccessChain 34(data) 37 67 38
+            1724: 23(int16_t) Load 1723
+            1725: 23(int16_t) GroupNonUniformIMul 42 Reduce 1724
+            1726:   1693(ptr) AccessChain 34(data) 1722 67 38
+                              Store 1726 1725
+            1727:      6(int) Load 8(invocation)
+            1728:   1700(ptr) AccessChain 34(data) 46 67
+            1729: 24(i16vec4) Load 1728
+            1730:1699(i16vec2) VectorShuffle 1729 1729 0 1
+            1731:1699(i16vec2) GroupNonUniformIMul 42 Reduce 1730
+            1732:   1700(ptr) AccessChain 34(data) 1727 67
+            1733: 24(i16vec4) Load 1732
+            1734: 24(i16vec4) VectorShuffle 1733 1731 4 5 2 3
+                              Store 1732 1734
+            1735:      6(int) Load 8(invocation)
+            1736:   1700(ptr) AccessChain 34(data) 57 67
+            1737: 24(i16vec4) Load 1736
+            1738:1709(i16vec3) VectorShuffle 1737 1737 0 1 2
+            1739:1709(i16vec3) GroupNonUniformIMul 42 Reduce 1738
+            1740:   1700(ptr) AccessChain 34(data) 1735 67
+            1741: 24(i16vec4) Load 1740
+            1742: 24(i16vec4) VectorShuffle 1741 1739 4 5 6 3
+                              Store 1740 1742
+            1743:      6(int) Load 8(invocation)
+            1744:   1700(ptr) AccessChain 34(data) 67 67
+            1745: 24(i16vec4) Load 1744
+            1746: 24(i16vec4) GroupNonUniformIMul 42 Reduce 1745
+            1747:   1700(ptr) AccessChain 34(data) 1743 67
+                              Store 1747 1746
+            1748:      6(int) Load 8(invocation)
+            1749:   1693(ptr) AccessChain 34(data) 37 67 38
+            1750: 23(int16_t) Load 1749
+            1751: 23(int16_t) GroupNonUniformUMin 42 Reduce 1750
+            1752:   1693(ptr) AccessChain 34(data) 1748 67 38
+                              Store 1752 1751
+            1753:      6(int) Load 8(invocation)
+            1754:   1700(ptr) AccessChain 34(data) 46 67
+            1755: 24(i16vec4) Load 1754
+            1756:1699(i16vec2) VectorShuffle 1755 1755 0 1
+            1757:1699(i16vec2) GroupNonUniformUMin 42 Reduce 1756
+            1758:   1700(ptr) AccessChain 34(data) 1753 67
+            1759: 24(i16vec4) Load 1758
+            1760: 24(i16vec4) VectorShuffle 1759 1757 4 5 2 3
+                              Store 1758 1760
+            1761:      6(int) Load 8(invocation)
+            1762:   1700(ptr) AccessChain 34(data) 57 67
+            1763: 24(i16vec4) Load 1762
+            1764:1709(i16vec3) VectorShuffle 1763 1763 0 1 2
+            1765:1709(i16vec3) GroupNonUniformUMin 42 Reduce 1764
+            1766:   1700(ptr) AccessChain 34(data) 1761 67
+            1767: 24(i16vec4) Load 1766
+            1768: 24(i16vec4) VectorShuffle 1767 1765 4 5 6 3
+                              Store 1766 1768
+            1769:      6(int) Load 8(invocation)
+            1770:   1700(ptr) AccessChain 34(data) 67 67
+            1771: 24(i16vec4) Load 1770
+            1772: 24(i16vec4) GroupNonUniformUMin 42 Reduce 1771
+            1773:   1700(ptr) AccessChain 34(data) 1769 67
+                              Store 1773 1772
+            1774:      6(int) Load 8(invocation)
+            1775:   1693(ptr) AccessChain 34(data) 37 67 38
+            1776: 23(int16_t) Load 1775
+            1777: 23(int16_t) GroupNonUniformUMax 42 Reduce 1776
+            1778:   1693(ptr) AccessChain 34(data) 1774 67 38
+                              Store 1778 1777
+            1779:      6(int) Load 8(invocation)
+            1780:   1700(ptr) AccessChain 34(data) 46 67
+            1781: 24(i16vec4) Load 1780
+            1782:1699(i16vec2) VectorShuffle 1781 1781 0 1
+            1783:1699(i16vec2) GroupNonUniformUMax 42 Reduce 1782
+            1784:   1700(ptr) AccessChain 34(data) 1779 67
+            1785: 24(i16vec4) Load 1784
+            1786: 24(i16vec4) VectorShuffle 1785 1783 4 5 2 3
+                              Store 1784 1786
+            1787:      6(int) Load 8(invocation)
+            1788:   1700(ptr) AccessChain 34(data) 57 67
+            1789: 24(i16vec4) Load 1788
+            1790:1709(i16vec3) VectorShuffle 1789 1789 0 1 2
+            1791:1709(i16vec3) GroupNonUniformUMax 42 Reduce 1790
+            1792:   1700(ptr) AccessChain 34(data) 1787 67
+            1793: 24(i16vec4) Load 1792
+            1794: 24(i16vec4) VectorShuffle 1793 1791 4 5 6 3
+                              Store 1792 1794
+            1795:      6(int) Load 8(invocation)
+            1796:   1700(ptr) AccessChain 34(data) 67 67
+            1797: 24(i16vec4) Load 1796
+            1798: 24(i16vec4) GroupNonUniformUMax 42 Reduce 1797
+            1799:   1700(ptr) AccessChain 34(data) 1795 67
+                              Store 1799 1798
+            1800:      6(int) Load 8(invocation)
+            1801:   1693(ptr) AccessChain 34(data) 37 67 38
+            1802: 23(int16_t) Load 1801
+            1803: 23(int16_t) GroupNonUniformBitwiseAnd 42 Reduce 1802
+            1804:   1693(ptr) AccessChain 34(data) 1800 67 38
+                              Store 1804 1803
+            1805:      6(int) Load 8(invocation)
+            1806:   1700(ptr) AccessChain 34(data) 46 67
+            1807: 24(i16vec4) Load 1806
+            1808:1699(i16vec2) VectorShuffle 1807 1807 0 1
+            1809:1699(i16vec2) GroupNonUniformBitwiseAnd 42 Reduce 1808
+            1810:   1700(ptr) AccessChain 34(data) 1805 67
+            1811: 24(i16vec4) Load 1810
+            1812: 24(i16vec4) VectorShuffle 1811 1809 4 5 2 3
+                              Store 1810 1812
+            1813:      6(int) Load 8(invocation)
+            1814:   1700(ptr) AccessChain 34(data) 57 67
+            1815: 24(i16vec4) Load 1814
+            1816:1709(i16vec3) VectorShuffle 1815 1815 0 1 2
+            1817:1709(i16vec3) GroupNonUniformBitwiseAnd 42 Reduce 1816
+            1818:   1700(ptr) AccessChain 34(data) 1813 67
+            1819: 24(i16vec4) Load 1818
+            1820: 24(i16vec4) VectorShuffle 1819 1817 4 5 6 3
+                              Store 1818 1820
+            1821:      6(int) Load 8(invocation)
+            1822:   1700(ptr) AccessChain 34(data) 67 67
+            1823: 24(i16vec4) Load 1822
+            1824: 24(i16vec4) GroupNonUniformBitwiseAnd 42 Reduce 1823
+            1825:   1700(ptr) AccessChain 34(data) 1821 67
+                              Store 1825 1824
+            1826:      6(int) Load 8(invocation)
+            1827:   1693(ptr) AccessChain 34(data) 37 67 38
+            1828: 23(int16_t) Load 1827
+            1829: 23(int16_t) GroupNonUniformBitwiseOr 42 Reduce 1828
+            1830:   1693(ptr) AccessChain 34(data) 1826 67 38
+                              Store 1830 1829
+            1831:      6(int) Load 8(invocation)
+            1832:   1700(ptr) AccessChain 34(data) 46 67
+            1833: 24(i16vec4) Load 1832
+            1834:1699(i16vec2) VectorShuffle 1833 1833 0 1
+            1835:1699(i16vec2) GroupNonUniformBitwiseOr 42 Reduce 1834
+            1836:   1700(ptr) AccessChain 34(data) 1831 67
+            1837: 24(i16vec4) Load 1836
+            1838: 24(i16vec4) VectorShuffle 1837 1835 4 5 2 3
+                              Store 1836 1838
+            1839:      6(int) Load 8(invocation)
+            1840:   1700(ptr) AccessChain 34(data) 57 67
+            1841: 24(i16vec4) Load 1840
+            1842:1709(i16vec3) VectorShuffle 1841 1841 0 1 2
+            1843:1709(i16vec3) GroupNonUniformBitwiseOr 42 Reduce 1842
+            1844:   1700(ptr) AccessChain 34(data) 1839 67
+            1845: 24(i16vec4) Load 1844
+            1846: 24(i16vec4) VectorShuffle 1845 1843 4 5 6 3
+                              Store 1844 1846
+            1847:      6(int) Load 8(invocation)
+            1848:   1700(ptr) AccessChain 34(data) 67 67
+            1849: 24(i16vec4) Load 1848
+            1850: 24(i16vec4) GroupNonUniformBitwiseOr 42 Reduce 1849
+            1851:   1700(ptr) AccessChain 34(data) 1847 67
+                              Store 1851 1850
+            1852:      6(int) Load 8(invocation)
+            1853:   1693(ptr) AccessChain 34(data) 37 67 38
+            1854: 23(int16_t) Load 1853
+            1855: 23(int16_t) GroupNonUniformBitwiseXor 42 Reduce 1854
+            1856:   1693(ptr) AccessChain 34(data) 1852 67 38
+                              Store 1856 1855
+            1857:      6(int) Load 8(invocation)
+            1858:   1700(ptr) AccessChain 34(data) 46 67
+            1859: 24(i16vec4) Load 1858
+            1860:1699(i16vec2) VectorShuffle 1859 1859 0 1
+            1861:1699(i16vec2) GroupNonUniformBitwiseXor 42 Reduce 1860
+            1862:   1700(ptr) AccessChain 34(data) 1857 67
+            1863: 24(i16vec4) Load 1862
+            1864: 24(i16vec4) VectorShuffle 1863 1861 4 5 2 3
+                              Store 1862 1864
+            1865:      6(int) Load 8(invocation)
+            1866:   1700(ptr) AccessChain 34(data) 57 67
+            1867: 24(i16vec4) Load 1866
+            1868:1709(i16vec3) VectorShuffle 1867 1867 0 1 2
+            1869:1709(i16vec3) GroupNonUniformBitwiseXor 42 Reduce 1868
+            1870:   1700(ptr) AccessChain 34(data) 1865 67
+            1871: 24(i16vec4) Load 1870
+            1872: 24(i16vec4) VectorShuffle 1871 1869 4 5 6 3
+                              Store 1870 1872
+            1873:      6(int) Load 8(invocation)
+            1874:   1700(ptr) AccessChain 34(data) 67 67
+            1875: 24(i16vec4) Load 1874
+            1876: 24(i16vec4) GroupNonUniformBitwiseXor 42 Reduce 1875
+            1877:   1700(ptr) AccessChain 34(data) 1873 67
+                              Store 1877 1876
+            1878:      6(int) Load 8(invocation)
+            1879:   1693(ptr) AccessChain 34(data) 37 67 38
+            1880: 23(int16_t) Load 1879
+            1881: 23(int16_t) GroupNonUniformIAdd 42 InclusiveScan 1880
+            1882:   1693(ptr) AccessChain 34(data) 1878 67 38
+                              Store 1882 1881
+            1883:      6(int) Load 8(invocation)
+            1884:   1700(ptr) AccessChain 34(data) 46 67
+            1885: 24(i16vec4) Load 1884
+            1886:1699(i16vec2) VectorShuffle 1885 1885 0 1
+            1887:1699(i16vec2) GroupNonUniformIAdd 42 InclusiveScan 1886
+            1888:   1700(ptr) AccessChain 34(data) 1883 67
+            1889: 24(i16vec4) Load 1888
+            1890: 24(i16vec4) VectorShuffle 1889 1887 4 5 2 3
+                              Store 1888 1890
+            1891:      6(int) Load 8(invocation)
+            1892:   1700(ptr) AccessChain 34(data) 57 67
+            1893: 24(i16vec4) Load 1892
+            1894:1709(i16vec3) VectorShuffle 1893 1893 0 1 2
+            1895:1709(i16vec3) GroupNonUniformIAdd 42 InclusiveScan 1894
+            1896:   1700(ptr) AccessChain 34(data) 1891 67
+            1897: 24(i16vec4) Load 1896
+            1898: 24(i16vec4) VectorShuffle 1897 1895 4 5 6 3
+                              Store 1896 1898
+            1899:      6(int) Load 8(invocation)
+            1900:   1700(ptr) AccessChain 34(data) 67 67
+            1901: 24(i16vec4) Load 1900
+            1902: 24(i16vec4) GroupNonUniformIAdd 42 InclusiveScan 1901
+            1903:   1700(ptr) AccessChain 34(data) 1899 67
+                              Store 1903 1902
+            1904:      6(int) Load 8(invocation)
+            1905:   1693(ptr) AccessChain 34(data) 37 67 38
+            1906: 23(int16_t) Load 1905
+            1907: 23(int16_t) GroupNonUniformIMul 42 InclusiveScan 1906
+            1908:   1693(ptr) AccessChain 34(data) 1904 67 38
+                              Store 1908 1907
+            1909:      6(int) Load 8(invocation)
+            1910:   1700(ptr) AccessChain 34(data) 46 67
+            1911: 24(i16vec4) Load 1910
+            1912:1699(i16vec2) VectorShuffle 1911 1911 0 1
+            1913:1699(i16vec2) GroupNonUniformIMul 42 InclusiveScan 1912
+            1914:   1700(ptr) AccessChain 34(data) 1909 67
+            1915: 24(i16vec4) Load 1914
+            1916: 24(i16vec4) VectorShuffle 1915 1913 4 5 2 3
+                              Store 1914 1916
+            1917:      6(int) Load 8(invocation)
+            1918:   1700(ptr) AccessChain 34(data) 57 67
+            1919: 24(i16vec4) Load 1918
+            1920:1709(i16vec3) VectorShuffle 1919 1919 0 1 2
+            1921:1709(i16vec3) GroupNonUniformIMul 42 InclusiveScan 1920
+            1922:   1700(ptr) AccessChain 34(data) 1917 67
+            1923: 24(i16vec4) Load 1922
+            1924: 24(i16vec4) VectorShuffle 1923 1921 4 5 6 3
+                              Store 1922 1924
+            1925:      6(int) Load 8(invocation)
+            1926:   1700(ptr) AccessChain 34(data) 67 67
+            1927: 24(i16vec4) Load 1926
+            1928: 24(i16vec4) GroupNonUniformIMul 42 InclusiveScan 1927
+            1929:   1700(ptr) AccessChain 34(data) 1925 67
+                              Store 1929 1928
+            1930:      6(int) Load 8(invocation)
+            1931:   1693(ptr) AccessChain 34(data) 37 67 38
+            1932: 23(int16_t) Load 1931
+            1933: 23(int16_t) GroupNonUniformUMin 42 InclusiveScan 1932
+            1934:   1693(ptr) AccessChain 34(data) 1930 67 38
+                              Store 1934 1933
+            1935:      6(int) Load 8(invocation)
+            1936:   1700(ptr) AccessChain 34(data) 46 67
+            1937: 24(i16vec4) Load 1936
+            1938:1699(i16vec2) VectorShuffle 1937 1937 0 1
+            1939:1699(i16vec2) GroupNonUniformUMin 42 InclusiveScan 1938
+            1940:   1700(ptr) AccessChain 34(data) 1935 67
+            1941: 24(i16vec4) Load 1940
+            1942: 24(i16vec4) VectorShuffle 1941 1939 4 5 2 3
+                              Store 1940 1942
+            1943:      6(int) Load 8(invocation)
+            1944:   1700(ptr) AccessChain 34(data) 57 67
+            1945: 24(i16vec4) Load 1944
+            1946:1709(i16vec3) VectorShuffle 1945 1945 0 1 2
+            1947:1709(i16vec3) GroupNonUniformUMin 42 InclusiveScan 1946
+            1948:   1700(ptr) AccessChain 34(data) 1943 67
+            1949: 24(i16vec4) Load 1948
+            1950: 24(i16vec4) VectorShuffle 1949 1947 4 5 6 3
+                              Store 1948 1950
+            1951:      6(int) Load 8(invocation)
+            1952:   1700(ptr) AccessChain 34(data) 67 67
+            1953: 24(i16vec4) Load 1952
+            1954: 24(i16vec4) GroupNonUniformUMin 42 InclusiveScan 1953
+            1955:   1700(ptr) AccessChain 34(data) 1951 67
+                              Store 1955 1954
+            1956:      6(int) Load 8(invocation)
+            1957:   1693(ptr) AccessChain 34(data) 37 67 38
+            1958: 23(int16_t) Load 1957
+            1959: 23(int16_t) GroupNonUniformUMax 42 InclusiveScan 1958
+            1960:   1693(ptr) AccessChain 34(data) 1956 67 38
+                              Store 1960 1959
+            1961:      6(int) Load 8(invocation)
+            1962:   1700(ptr) AccessChain 34(data) 46 67
+            1963: 24(i16vec4) Load 1962
+            1964:1699(i16vec2) VectorShuffle 1963 1963 0 1
+            1965:1699(i16vec2) GroupNonUniformUMax 42 InclusiveScan 1964
+            1966:   1700(ptr) AccessChain 34(data) 1961 67
+            1967: 24(i16vec4) Load 1966
+            1968: 24(i16vec4) VectorShuffle 1967 1965 4 5 2 3
+                              Store 1966 1968
+            1969:      6(int) Load 8(invocation)
+            1970:   1700(ptr) AccessChain 34(data) 57 67
+            1971: 24(i16vec4) Load 1970
+            1972:1709(i16vec3) VectorShuffle 1971 1971 0 1 2
+            1973:1709(i16vec3) GroupNonUniformUMax 42 InclusiveScan 1972
+            1974:   1700(ptr) AccessChain 34(data) 1969 67
+            1975: 24(i16vec4) Load 1974
+            1976: 24(i16vec4) VectorShuffle 1975 1973 4 5 6 3
+                              Store 1974 1976
+            1977:      6(int) Load 8(invocation)
+            1978:   1700(ptr) AccessChain 34(data) 67 67
+            1979: 24(i16vec4) Load 1978
+            1980: 24(i16vec4) GroupNonUniformUMax 42 InclusiveScan 1979
+            1981:   1700(ptr) AccessChain 34(data) 1977 67
+                              Store 1981 1980
+            1982:      6(int) Load 8(invocation)
+            1983:   1693(ptr) AccessChain 34(data) 37 67 38
+            1984: 23(int16_t) Load 1983
+            1985: 23(int16_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 1984
+            1986:   1693(ptr) AccessChain 34(data) 1982 67 38
+                              Store 1986 1985
+            1987:      6(int) Load 8(invocation)
+            1988:   1700(ptr) AccessChain 34(data) 46 67
+            1989: 24(i16vec4) Load 1988
+            1990:1699(i16vec2) VectorShuffle 1989 1989 0 1
+            1991:1699(i16vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 1990
+            1992:   1700(ptr) AccessChain 34(data) 1987 67
+            1993: 24(i16vec4) Load 1992
+            1994: 24(i16vec4) VectorShuffle 1993 1991 4 5 2 3
+                              Store 1992 1994
+            1995:      6(int) Load 8(invocation)
+            1996:   1700(ptr) AccessChain 34(data) 57 67
+            1997: 24(i16vec4) Load 1996
+            1998:1709(i16vec3) VectorShuffle 1997 1997 0 1 2
+            1999:1709(i16vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 1998
+            2000:   1700(ptr) AccessChain 34(data) 1995 67
+            2001: 24(i16vec4) Load 2000
+            2002: 24(i16vec4) VectorShuffle 2001 1999 4 5 6 3
+                              Store 2000 2002
+            2003:      6(int) Load 8(invocation)
+            2004:   1700(ptr) AccessChain 34(data) 67 67
+            2005: 24(i16vec4) Load 2004
+            2006: 24(i16vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 2005
+            2007:   1700(ptr) AccessChain 34(data) 2003 67
+                              Store 2007 2006
+            2008:      6(int) Load 8(invocation)
+            2009:   1693(ptr) AccessChain 34(data) 37 67 38
+            2010: 23(int16_t) Load 2009
+            2011: 23(int16_t) GroupNonUniformBitwiseOr 42 InclusiveScan 2010
+            2012:   1693(ptr) AccessChain 34(data) 2008 67 38
+                              Store 2012 2011
+            2013:      6(int) Load 8(invocation)
+            2014:   1700(ptr) AccessChain 34(data) 46 67
+            2015: 24(i16vec4) Load 2014
+            2016:1699(i16vec2) VectorShuffle 2015 2015 0 1
+            2017:1699(i16vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 2016
+            2018:   1700(ptr) AccessChain 34(data) 2013 67
+            2019: 24(i16vec4) Load 2018
+            2020: 24(i16vec4) VectorShuffle 2019 2017 4 5 2 3
+                              Store 2018 2020
+            2021:      6(int) Load 8(invocation)
+            2022:   1700(ptr) AccessChain 34(data) 57 67
+            2023: 24(i16vec4) Load 2022
+            2024:1709(i16vec3) VectorShuffle 2023 2023 0 1 2
+            2025:1709(i16vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 2024
+            2026:   1700(ptr) AccessChain 34(data) 2021 67
+            2027: 24(i16vec4) Load 2026
+            2028: 24(i16vec4) VectorShuffle 2027 2025 4 5 6 3
+                              Store 2026 2028
+            2029:      6(int) Load 8(invocation)
+            2030:   1700(ptr) AccessChain 34(data) 67 67
+            2031: 24(i16vec4) Load 2030
+            2032: 24(i16vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 2031
+            2033:   1700(ptr) AccessChain 34(data) 2029 67
+                              Store 2033 2032
+            2034:      6(int) Load 8(invocation)
+            2035:   1693(ptr) AccessChain 34(data) 37 67 38
+            2036: 23(int16_t) Load 2035
+            2037: 23(int16_t) GroupNonUniformBitwiseXor 42 InclusiveScan 2036
+            2038:   1693(ptr) AccessChain 34(data) 2034 67 38
+                              Store 2038 2037
+            2039:      6(int) Load 8(invocation)
+            2040:   1700(ptr) AccessChain 34(data) 46 67
+            2041: 24(i16vec4) Load 2040
+            2042:1699(i16vec2) VectorShuffle 2041 2041 0 1
+            2043:1699(i16vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 2042
+            2044:   1700(ptr) AccessChain 34(data) 2039 67
+            2045: 24(i16vec4) Load 2044
+            2046: 24(i16vec4) VectorShuffle 2045 2043 4 5 2 3
+                              Store 2044 2046
+            2047:      6(int) Load 8(invocation)
+            2048:   1700(ptr) AccessChain 34(data) 57 67
+            2049: 24(i16vec4) Load 2048
+            2050:1709(i16vec3) VectorShuffle 2049 2049 0 1 2
+            2051:1709(i16vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 2050
+            2052:   1700(ptr) AccessChain 34(data) 2047 67
+            2053: 24(i16vec4) Load 2052
+            2054: 24(i16vec4) VectorShuffle 2053 2051 4 5 6 3
+                              Store 2052 2054
+            2055:      6(int) Load 8(invocation)
+            2056:   1700(ptr) AccessChain 34(data) 67 67
+            2057: 24(i16vec4) Load 2056
+            2058: 24(i16vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 2057
+            2059:   1700(ptr) AccessChain 34(data) 2055 67
+                              Store 2059 2058
+            2060:      6(int) Load 8(invocation)
+            2061:   1693(ptr) AccessChain 34(data) 37 67 38
+            2062: 23(int16_t) Load 2061
+            2063: 23(int16_t) GroupNonUniformIAdd 42 ExclusiveScan 2062
+            2064:   1693(ptr) AccessChain 34(data) 2060 67 38
+                              Store 2064 2063
+            2065:      6(int) Load 8(invocation)
+            2066:   1700(ptr) AccessChain 34(data) 46 67
+            2067: 24(i16vec4) Load 2066
+            2068:1699(i16vec2) VectorShuffle 2067 2067 0 1
+            2069:1699(i16vec2) GroupNonUniformIAdd 42 ExclusiveScan 2068
+            2070:   1700(ptr) AccessChain 34(data) 2065 67
+            2071: 24(i16vec4) Load 2070
+            2072: 24(i16vec4) VectorShuffle 2071 2069 4 5 2 3
+                              Store 2070 2072
+            2073:      6(int) Load 8(invocation)
+            2074:   1700(ptr) AccessChain 34(data) 57 67
+            2075: 24(i16vec4) Load 2074
+            2076:1709(i16vec3) VectorShuffle 2075 2075 0 1 2
+            2077:1709(i16vec3) GroupNonUniformIAdd 42 ExclusiveScan 2076
+            2078:   1700(ptr) AccessChain 34(data) 2073 67
+            2079: 24(i16vec4) Load 2078
+            2080: 24(i16vec4) VectorShuffle 2079 2077 4 5 6 3
+                              Store 2078 2080
+            2081:      6(int) Load 8(invocation)
+            2082:   1700(ptr) AccessChain 34(data) 67 67
+            2083: 24(i16vec4) Load 2082
+            2084: 24(i16vec4) GroupNonUniformIAdd 42 ExclusiveScan 2083
+            2085:   1700(ptr) AccessChain 34(data) 2081 67
+                              Store 2085 2084
+            2086:      6(int) Load 8(invocation)
+            2087:   1693(ptr) AccessChain 34(data) 37 67 38
+            2088: 23(int16_t) Load 2087
+            2089: 23(int16_t) GroupNonUniformIMul 42 ExclusiveScan 2088
+            2090:   1693(ptr) AccessChain 34(data) 2086 67 38
+                              Store 2090 2089
+            2091:      6(int) Load 8(invocation)
+            2092:   1700(ptr) AccessChain 34(data) 46 67
+            2093: 24(i16vec4) Load 2092
+            2094:1699(i16vec2) VectorShuffle 2093 2093 0 1
+            2095:1699(i16vec2) GroupNonUniformIMul 42 ExclusiveScan 2094
+            2096:   1700(ptr) AccessChain 34(data) 2091 67
+            2097: 24(i16vec4) Load 2096
+            2098: 24(i16vec4) VectorShuffle 2097 2095 4 5 2 3
+                              Store 2096 2098
+            2099:      6(int) Load 8(invocation)
+            2100:   1700(ptr) AccessChain 34(data) 57 67
+            2101: 24(i16vec4) Load 2100
+            2102:1709(i16vec3) VectorShuffle 2101 2101 0 1 2
+            2103:1709(i16vec3) GroupNonUniformIMul 42 ExclusiveScan 2102
+            2104:   1700(ptr) AccessChain 34(data) 2099 67
+            2105: 24(i16vec4) Load 2104
+            2106: 24(i16vec4) VectorShuffle 2105 2103 4 5 6 3
+                              Store 2104 2106
+            2107:      6(int) Load 8(invocation)
+            2108:   1700(ptr) AccessChain 34(data) 67 67
+            2109: 24(i16vec4) Load 2108
+            2110: 24(i16vec4) GroupNonUniformIMul 42 ExclusiveScan 2109
+            2111:   1700(ptr) AccessChain 34(data) 2107 67
+                              Store 2111 2110
+            2112:      6(int) Load 8(invocation)
+            2113:   1693(ptr) AccessChain 34(data) 37 67 38
+            2114: 23(int16_t) Load 2113
+            2115: 23(int16_t) GroupNonUniformUMin 42 ExclusiveScan 2114
+            2116:   1693(ptr) AccessChain 34(data) 2112 67 38
+                              Store 2116 2115
+            2117:      6(int) Load 8(invocation)
+            2118:   1700(ptr) AccessChain 34(data) 46 67
+            2119: 24(i16vec4) Load 2118
+            2120:1699(i16vec2) VectorShuffle 2119 2119 0 1
+            2121:1699(i16vec2) GroupNonUniformUMin 42 ExclusiveScan 2120
+            2122:   1700(ptr) AccessChain 34(data) 2117 67
+            2123: 24(i16vec4) Load 2122
+            2124: 24(i16vec4) VectorShuffle 2123 2121 4 5 2 3
+                              Store 2122 2124
+            2125:      6(int) Load 8(invocation)
+            2126:   1700(ptr) AccessChain 34(data) 57 67
+            2127: 24(i16vec4) Load 2126
+            2128:1709(i16vec3) VectorShuffle 2127 2127 0 1 2
+            2129:1709(i16vec3) GroupNonUniformUMin 42 ExclusiveScan 2128
+            2130:   1700(ptr) AccessChain 34(data) 2125 67
+            2131: 24(i16vec4) Load 2130
+            2132: 24(i16vec4) VectorShuffle 2131 2129 4 5 6 3
+                              Store 2130 2132
+            2133:      6(int) Load 8(invocation)
+            2134:   1700(ptr) AccessChain 34(data) 67 67
+            2135: 24(i16vec4) Load 2134
+            2136: 24(i16vec4) GroupNonUniformUMin 42 ExclusiveScan 2135
+            2137:   1700(ptr) AccessChain 34(data) 2133 67
+                              Store 2137 2136
+            2138:      6(int) Load 8(invocation)
+            2139:   1693(ptr) AccessChain 34(data) 37 67 38
+            2140: 23(int16_t) Load 2139
+            2141: 23(int16_t) GroupNonUniformUMax 42 ExclusiveScan 2140
+            2142:   1693(ptr) AccessChain 34(data) 2138 67 38
+                              Store 2142 2141
+            2143:      6(int) Load 8(invocation)
+            2144:   1700(ptr) AccessChain 34(data) 46 67
+            2145: 24(i16vec4) Load 2144
+            2146:1699(i16vec2) VectorShuffle 2145 2145 0 1
+            2147:1699(i16vec2) GroupNonUniformUMax 42 ExclusiveScan 2146
+            2148:   1700(ptr) AccessChain 34(data) 2143 67
+            2149: 24(i16vec4) Load 2148
+            2150: 24(i16vec4) VectorShuffle 2149 2147 4 5 2 3
+                              Store 2148 2150
+            2151:      6(int) Load 8(invocation)
+            2152:   1700(ptr) AccessChain 34(data) 57 67
+            2153: 24(i16vec4) Load 2152
+            2154:1709(i16vec3) VectorShuffle 2153 2153 0 1 2
+            2155:1709(i16vec3) GroupNonUniformUMax 42 ExclusiveScan 2154
+            2156:   1700(ptr) AccessChain 34(data) 2151 67
+            2157: 24(i16vec4) Load 2156
+            2158: 24(i16vec4) VectorShuffle 2157 2155 4 5 6 3
+                              Store 2156 2158
+            2159:      6(int) Load 8(invocation)
+            2160:   1700(ptr) AccessChain 34(data) 67 67
+            2161: 24(i16vec4) Load 2160
+            2162: 24(i16vec4) GroupNonUniformUMax 42 ExclusiveScan 2161
+            2163:   1700(ptr) AccessChain 34(data) 2159 67
+                              Store 2163 2162
+            2164:      6(int) Load 8(invocation)
+            2165:   1693(ptr) AccessChain 34(data) 37 67 38
+            2166: 23(int16_t) Load 2165
+            2167: 23(int16_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2166
+            2168:   1693(ptr) AccessChain 34(data) 2164 67 38
+                              Store 2168 2167
+            2169:      6(int) Load 8(invocation)
+            2170:   1700(ptr) AccessChain 34(data) 46 67
+            2171: 24(i16vec4) Load 2170
+            2172:1699(i16vec2) VectorShuffle 2171 2171 0 1
+            2173:1699(i16vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2172
+            2174:   1700(ptr) AccessChain 34(data) 2169 67
+            2175: 24(i16vec4) Load 2174
+            2176: 24(i16vec4) VectorShuffle 2175 2173 4 5 2 3
+                              Store 2174 2176
+            2177:      6(int) Load 8(invocation)
+            2178:   1700(ptr) AccessChain 34(data) 57 67
+            2179: 24(i16vec4) Load 2178
+            2180:1709(i16vec3) VectorShuffle 2179 2179 0 1 2
+            2181:1709(i16vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2180
+            2182:   1700(ptr) AccessChain 34(data) 2177 67
+            2183: 24(i16vec4) Load 2182
+            2184: 24(i16vec4) VectorShuffle 2183 2181 4 5 6 3
+                              Store 2182 2184
+            2185:      6(int) Load 8(invocation)
+            2186:   1700(ptr) AccessChain 34(data) 67 67
+            2187: 24(i16vec4) Load 2186
+            2188: 24(i16vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2187
+            2189:   1700(ptr) AccessChain 34(data) 2185 67
+                              Store 2189 2188
+            2190:      6(int) Load 8(invocation)
+            2191:   1693(ptr) AccessChain 34(data) 37 67 38
+            2192: 23(int16_t) Load 2191
+            2193: 23(int16_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 2192
+            2194:   1693(ptr) AccessChain 34(data) 2190 67 38
+                              Store 2194 2193
+            2195:      6(int) Load 8(invocation)
+            2196:   1700(ptr) AccessChain 34(data) 46 67
+            2197: 24(i16vec4) Load 2196
+            2198:1699(i16vec2) VectorShuffle 2197 2197 0 1
+            2199:1699(i16vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 2198
+            2200:   1700(ptr) AccessChain 34(data) 2195 67
+            2201: 24(i16vec4) Load 2200
+            2202: 24(i16vec4) VectorShuffle 2201 2199 4 5 2 3
+                              Store 2200 2202
+            2203:      6(int) Load 8(invocation)
+            2204:   1700(ptr) AccessChain 34(data) 57 67
+            2205: 24(i16vec4) Load 2204
+            2206:1709(i16vec3) VectorShuffle 2205 2205 0 1 2
+            2207:1709(i16vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 2206
+            2208:   1700(ptr) AccessChain 34(data) 2203 67
+            2209: 24(i16vec4) Load 2208
+            2210: 24(i16vec4) VectorShuffle 2209 2207 4 5 6 3
+                              Store 2208 2210
+            2211:      6(int) Load 8(invocation)
+            2212:   1700(ptr) AccessChain 34(data) 67 67
+            2213: 24(i16vec4) Load 2212
+            2214: 24(i16vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 2213
+            2215:   1700(ptr) AccessChain 34(data) 2211 67
+                              Store 2215 2214
+            2216:      6(int) Load 8(invocation)
+            2217:   1693(ptr) AccessChain 34(data) 37 67 38
+            2218: 23(int16_t) Load 2217
+            2219: 23(int16_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 2218
+            2220:   1693(ptr) AccessChain 34(data) 2216 67 38
+                              Store 2220 2219
+            2221:      6(int) Load 8(invocation)
+            2222:   1700(ptr) AccessChain 34(data) 46 67
+            2223: 24(i16vec4) Load 2222
+            2224:1699(i16vec2) VectorShuffle 2223 2223 0 1
+            2225:1699(i16vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 2224
+            2226:   1700(ptr) AccessChain 34(data) 2221 67
+            2227: 24(i16vec4) Load 2226
+            2228: 24(i16vec4) VectorShuffle 2227 2225 4 5 2 3
+                              Store 2226 2228
+            2229:      6(int) Load 8(invocation)
+            2230:   1700(ptr) AccessChain 34(data) 57 67
+            2231: 24(i16vec4) Load 2230
+            2232:1709(i16vec3) VectorShuffle 2231 2231 0 1 2
+            2233:1709(i16vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 2232
+            2234:   1700(ptr) AccessChain 34(data) 2229 67
+            2235: 24(i16vec4) Load 2234
+            2236: 24(i16vec4) VectorShuffle 2235 2233 4 5 6 3
+                              Store 2234 2236
+            2237:      6(int) Load 8(invocation)
+            2238:   1700(ptr) AccessChain 34(data) 67 67
+            2239: 24(i16vec4) Load 2238
+            2240: 24(i16vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 2239
+            2241:   1700(ptr) AccessChain 34(data) 2237 67
+                              Store 2241 2240
+            2242:      6(int) Load 8(invocation)
+            2245:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2246: 25(int64_t) Load 2245
+            2247: 25(int64_t) GroupNonUniformIAdd 42 Reduce 2246
+            2248:   2244(ptr) AccessChain 34(data) 2242 2243 38
+                              Store 2248 2247
+            2249:      6(int) Load 8(invocation)
+            2252:   2251(ptr) AccessChain 34(data) 46 2243
+            2253: 26(i64vec4) Load 2252
+            2254:2250(i64vec2) VectorShuffle 2253 2253 0 1
+            2255:2250(i64vec2) GroupNonUniformIAdd 42 Reduce 2254
+            2256:   2251(ptr) AccessChain 34(data) 2249 2243
+            2257: 26(i64vec4) Load 2256
+            2258: 26(i64vec4) VectorShuffle 2257 2255 4 5 2 3
+                              Store 2256 2258
+            2259:      6(int) Load 8(invocation)
+            2261:   2251(ptr) AccessChain 34(data) 57 2243
+            2262: 26(i64vec4) Load 2261
+            2263:2260(i64vec3) VectorShuffle 2262 2262 0 1 2
+            2264:2260(i64vec3) GroupNonUniformIAdd 42 Reduce 2263
+            2265:   2251(ptr) AccessChain 34(data) 2259 2243
+            2266: 26(i64vec4) Load 2265
+            2267: 26(i64vec4) VectorShuffle 2266 2264 4 5 6 3
+                              Store 2265 2267
+            2268:      6(int) Load 8(invocation)
+            2269:   2251(ptr) AccessChain 34(data) 67 2243
+            2270: 26(i64vec4) Load 2269
+            2271: 26(i64vec4) GroupNonUniformIAdd 42 Reduce 2270
+            2272:   2251(ptr) AccessChain 34(data) 2268 2243
+                              Store 2272 2271
+            2273:      6(int) Load 8(invocation)
+            2274:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2275: 25(int64_t) Load 2274
+            2276: 25(int64_t) GroupNonUniformIMul 42 Reduce 2275
+            2277:   2244(ptr) AccessChain 34(data) 2273 2243 38
+                              Store 2277 2276
+            2278:      6(int) Load 8(invocation)
+            2279:   2251(ptr) AccessChain 34(data) 46 2243
+            2280: 26(i64vec4) Load 2279
+            2281:2250(i64vec2) VectorShuffle 2280 2280 0 1
+            2282:2250(i64vec2) GroupNonUniformIMul 42 Reduce 2281
+            2283:   2251(ptr) AccessChain 34(data) 2278 2243
+            2284: 26(i64vec4) Load 2283
+            2285: 26(i64vec4) VectorShuffle 2284 2282 4 5 2 3
+                              Store 2283 2285
+            2286:      6(int) Load 8(invocation)
+            2287:   2251(ptr) AccessChain 34(data) 57 2243
+            2288: 26(i64vec4) Load 2287
+            2289:2260(i64vec3) VectorShuffle 2288 2288 0 1 2
+            2290:2260(i64vec3) GroupNonUniformIMul 42 Reduce 2289
+            2291:   2251(ptr) AccessChain 34(data) 2286 2243
+            2292: 26(i64vec4) Load 2291
+            2293: 26(i64vec4) VectorShuffle 2292 2290 4 5 6 3
+                              Store 2291 2293
+            2294:      6(int) Load 8(invocation)
+            2295:   2251(ptr) AccessChain 34(data) 67 2243
+            2296: 26(i64vec4) Load 2295
+            2297: 26(i64vec4) GroupNonUniformIMul 42 Reduce 2296
+            2298:   2251(ptr) AccessChain 34(data) 2294 2243
+                              Store 2298 2297
+            2299:      6(int) Load 8(invocation)
+            2300:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2301: 25(int64_t) Load 2300
+            2302: 25(int64_t) GroupNonUniformSMin 42 Reduce 2301
+            2303:   2244(ptr) AccessChain 34(data) 2299 2243 38
+                              Store 2303 2302
+            2304:      6(int) Load 8(invocation)
+            2305:   2251(ptr) AccessChain 34(data) 46 2243
+            2306: 26(i64vec4) Load 2305
+            2307:2250(i64vec2) VectorShuffle 2306 2306 0 1
+            2308:2250(i64vec2) GroupNonUniformSMin 42 Reduce 2307
+            2309:   2251(ptr) AccessChain 34(data) 2304 2243
+            2310: 26(i64vec4) Load 2309
+            2311: 26(i64vec4) VectorShuffle 2310 2308 4 5 2 3
+                              Store 2309 2311
+            2312:      6(int) Load 8(invocation)
+            2313:   2251(ptr) AccessChain 34(data) 57 2243
+            2314: 26(i64vec4) Load 2313
+            2315:2260(i64vec3) VectorShuffle 2314 2314 0 1 2
+            2316:2260(i64vec3) GroupNonUniformSMin 42 Reduce 2315
+            2317:   2251(ptr) AccessChain 34(data) 2312 2243
+            2318: 26(i64vec4) Load 2317
+            2319: 26(i64vec4) VectorShuffle 2318 2316 4 5 6 3
+                              Store 2317 2319
+            2320:      6(int) Load 8(invocation)
+            2321:   2251(ptr) AccessChain 34(data) 67 2243
+            2322: 26(i64vec4) Load 2321
+            2323: 26(i64vec4) GroupNonUniformSMin 42 Reduce 2322
+            2324:   2251(ptr) AccessChain 34(data) 2320 2243
+                              Store 2324 2323
+            2325:      6(int) Load 8(invocation)
+            2326:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2327: 25(int64_t) Load 2326
+            2328: 25(int64_t) GroupNonUniformSMax 42 Reduce 2327
+            2329:   2244(ptr) AccessChain 34(data) 2325 2243 38
+                              Store 2329 2328
+            2330:      6(int) Load 8(invocation)
+            2331:   2251(ptr) AccessChain 34(data) 46 2243
+            2332: 26(i64vec4) Load 2331
+            2333:2250(i64vec2) VectorShuffle 2332 2332 0 1
+            2334:2250(i64vec2) GroupNonUniformSMax 42 Reduce 2333
+            2335:   2251(ptr) AccessChain 34(data) 2330 2243
+            2336: 26(i64vec4) Load 2335
+            2337: 26(i64vec4) VectorShuffle 2336 2334 4 5 2 3
+                              Store 2335 2337
+            2338:      6(int) Load 8(invocation)
+            2339:   2251(ptr) AccessChain 34(data) 57 2243
+            2340: 26(i64vec4) Load 2339
+            2341:2260(i64vec3) VectorShuffle 2340 2340 0 1 2
+            2342:2260(i64vec3) GroupNonUniformSMax 42 Reduce 2341
+            2343:   2251(ptr) AccessChain 34(data) 2338 2243
+            2344: 26(i64vec4) Load 2343
+            2345: 26(i64vec4) VectorShuffle 2344 2342 4 5 6 3
+                              Store 2343 2345
+            2346:      6(int) Load 8(invocation)
+            2347:   2251(ptr) AccessChain 34(data) 67 2243
+            2348: 26(i64vec4) Load 2347
+            2349: 26(i64vec4) GroupNonUniformSMax 42 Reduce 2348
+            2350:   2251(ptr) AccessChain 34(data) 2346 2243
+                              Store 2350 2349
+            2351:      6(int) Load 8(invocation)
+            2352:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2353: 25(int64_t) Load 2352
+            2354: 25(int64_t) GroupNonUniformBitwiseAnd 42 Reduce 2353
+            2355:   2244(ptr) AccessChain 34(data) 2351 2243 38
+                              Store 2355 2354
+            2356:      6(int) Load 8(invocation)
+            2357:   2251(ptr) AccessChain 34(data) 46 2243
+            2358: 26(i64vec4) Load 2357
+            2359:2250(i64vec2) VectorShuffle 2358 2358 0 1
+            2360:2250(i64vec2) GroupNonUniformBitwiseAnd 42 Reduce 2359
+            2361:   2251(ptr) AccessChain 34(data) 2356 2243
+            2362: 26(i64vec4) Load 2361
+            2363: 26(i64vec4) VectorShuffle 2362 2360 4 5 2 3
+                              Store 2361 2363
+            2364:      6(int) Load 8(invocation)
+            2365:   2251(ptr) AccessChain 34(data) 57 2243
+            2366: 26(i64vec4) Load 2365
+            2367:2260(i64vec3) VectorShuffle 2366 2366 0 1 2
+            2368:2260(i64vec3) GroupNonUniformBitwiseAnd 42 Reduce 2367
+            2369:   2251(ptr) AccessChain 34(data) 2364 2243
+            2370: 26(i64vec4) Load 2369
+            2371: 26(i64vec4) VectorShuffle 2370 2368 4 5 6 3
+                              Store 2369 2371
+            2372:      6(int) Load 8(invocation)
+            2373:   2251(ptr) AccessChain 34(data) 67 2243
+            2374: 26(i64vec4) Load 2373
+            2375: 26(i64vec4) GroupNonUniformBitwiseAnd 42 Reduce 2374
+            2376:   2251(ptr) AccessChain 34(data) 2372 2243
+                              Store 2376 2375
+            2377:      6(int) Load 8(invocation)
+            2378:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2379: 25(int64_t) Load 2378
+            2380: 25(int64_t) GroupNonUniformBitwiseOr 42 Reduce 2379
+            2381:   2244(ptr) AccessChain 34(data) 2377 2243 38
+                              Store 2381 2380
+            2382:      6(int) Load 8(invocation)
+            2383:   2251(ptr) AccessChain 34(data) 46 2243
+            2384: 26(i64vec4) Load 2383
+            2385:2250(i64vec2) VectorShuffle 2384 2384 0 1
+            2386:2250(i64vec2) GroupNonUniformBitwiseOr 42 Reduce 2385
+            2387:   2251(ptr) AccessChain 34(data) 2382 2243
+            2388: 26(i64vec4) Load 2387
+            2389: 26(i64vec4) VectorShuffle 2388 2386 4 5 2 3
+                              Store 2387 2389
+            2390:      6(int) Load 8(invocation)
+            2391:   2251(ptr) AccessChain 34(data) 57 2243
+            2392: 26(i64vec4) Load 2391
+            2393:2260(i64vec3) VectorShuffle 2392 2392 0 1 2
+            2394:2260(i64vec3) GroupNonUniformBitwiseOr 42 Reduce 2393
+            2395:   2251(ptr) AccessChain 34(data) 2390 2243
+            2396: 26(i64vec4) Load 2395
+            2397: 26(i64vec4) VectorShuffle 2396 2394 4 5 6 3
+                              Store 2395 2397
+            2398:      6(int) Load 8(invocation)
+            2399:   2251(ptr) AccessChain 34(data) 67 2243
+            2400: 26(i64vec4) Load 2399
+            2401: 26(i64vec4) GroupNonUniformBitwiseOr 42 Reduce 2400
+            2402:   2251(ptr) AccessChain 34(data) 2398 2243
+                              Store 2402 2401
+            2403:      6(int) Load 8(invocation)
+            2404:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2405: 25(int64_t) Load 2404
+            2406: 25(int64_t) GroupNonUniformBitwiseXor 42 Reduce 2405
+            2407:   2244(ptr) AccessChain 34(data) 2403 2243 38
+                              Store 2407 2406
+            2408:      6(int) Load 8(invocation)
+            2409:   2251(ptr) AccessChain 34(data) 46 2243
+            2410: 26(i64vec4) Load 2409
+            2411:2250(i64vec2) VectorShuffle 2410 2410 0 1
+            2412:2250(i64vec2) GroupNonUniformBitwiseXor 42 Reduce 2411
+            2413:   2251(ptr) AccessChain 34(data) 2408 2243
+            2414: 26(i64vec4) Load 2413
+            2415: 26(i64vec4) VectorShuffle 2414 2412 4 5 2 3
+                              Store 2413 2415
+            2416:      6(int) Load 8(invocation)
+            2417:   2251(ptr) AccessChain 34(data) 57 2243
+            2418: 26(i64vec4) Load 2417
+            2419:2260(i64vec3) VectorShuffle 2418 2418 0 1 2
+            2420:2260(i64vec3) GroupNonUniformBitwiseXor 42 Reduce 2419
+            2421:   2251(ptr) AccessChain 34(data) 2416 2243
+            2422: 26(i64vec4) Load 2421
+            2423: 26(i64vec4) VectorShuffle 2422 2420 4 5 6 3
+                              Store 2421 2423
+            2424:      6(int) Load 8(invocation)
+            2425:   2251(ptr) AccessChain 34(data) 67 2243
+            2426: 26(i64vec4) Load 2425
+            2427: 26(i64vec4) GroupNonUniformBitwiseXor 42 Reduce 2426
+            2428:   2251(ptr) AccessChain 34(data) 2424 2243
+                              Store 2428 2427
+            2429:      6(int) Load 8(invocation)
+            2430:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2431: 25(int64_t) Load 2430
+            2432: 25(int64_t) GroupNonUniformIAdd 42 InclusiveScan 2431
+            2433:   2244(ptr) AccessChain 34(data) 2429 2243 38
+                              Store 2433 2432
+            2434:      6(int) Load 8(invocation)
+            2435:   2251(ptr) AccessChain 34(data) 46 2243
+            2436: 26(i64vec4) Load 2435
+            2437:2250(i64vec2) VectorShuffle 2436 2436 0 1
+            2438:2250(i64vec2) GroupNonUniformIAdd 42 InclusiveScan 2437
+            2439:   2251(ptr) AccessChain 34(data) 2434 2243
+            2440: 26(i64vec4) Load 2439
+            2441: 26(i64vec4) VectorShuffle 2440 2438 4 5 2 3
+                              Store 2439 2441
+            2442:      6(int) Load 8(invocation)
+            2443:   2251(ptr) AccessChain 34(data) 57 2243
+            2444: 26(i64vec4) Load 2443
+            2445:2260(i64vec3) VectorShuffle 2444 2444 0 1 2
+            2446:2260(i64vec3) GroupNonUniformIAdd 42 InclusiveScan 2445
+            2447:   2251(ptr) AccessChain 34(data) 2442 2243
+            2448: 26(i64vec4) Load 2447
+            2449: 26(i64vec4) VectorShuffle 2448 2446 4 5 6 3
+                              Store 2447 2449
+            2450:      6(int) Load 8(invocation)
+            2451:   2251(ptr) AccessChain 34(data) 67 2243
+            2452: 26(i64vec4) Load 2451
+            2453: 26(i64vec4) GroupNonUniformIAdd 42 InclusiveScan 2452
+            2454:   2251(ptr) AccessChain 34(data) 2450 2243
+                              Store 2454 2453
+            2455:      6(int) Load 8(invocation)
+            2456:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2457: 25(int64_t) Load 2456
+            2458: 25(int64_t) GroupNonUniformIMul 42 InclusiveScan 2457
+            2459:   2244(ptr) AccessChain 34(data) 2455 2243 38
+                              Store 2459 2458
+            2460:      6(int) Load 8(invocation)
+            2461:   2251(ptr) AccessChain 34(data) 46 2243
+            2462: 26(i64vec4) Load 2461
+            2463:2250(i64vec2) VectorShuffle 2462 2462 0 1
+            2464:2250(i64vec2) GroupNonUniformIMul 42 InclusiveScan 2463
+            2465:   2251(ptr) AccessChain 34(data) 2460 2243
+            2466: 26(i64vec4) Load 2465
+            2467: 26(i64vec4) VectorShuffle 2466 2464 4 5 2 3
+                              Store 2465 2467
+            2468:      6(int) Load 8(invocation)
+            2469:   2251(ptr) AccessChain 34(data) 57 2243
+            2470: 26(i64vec4) Load 2469
+            2471:2260(i64vec3) VectorShuffle 2470 2470 0 1 2
+            2472:2260(i64vec3) GroupNonUniformIMul 42 InclusiveScan 2471
+            2473:   2251(ptr) AccessChain 34(data) 2468 2243
+            2474: 26(i64vec4) Load 2473
+            2475: 26(i64vec4) VectorShuffle 2474 2472 4 5 6 3
+                              Store 2473 2475
+            2476:      6(int) Load 8(invocation)
+            2477:   2251(ptr) AccessChain 34(data) 67 2243
+            2478: 26(i64vec4) Load 2477
+            2479: 26(i64vec4) GroupNonUniformIMul 42 InclusiveScan 2478
+            2480:   2251(ptr) AccessChain 34(data) 2476 2243
+                              Store 2480 2479
+            2481:      6(int) Load 8(invocation)
+            2482:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2483: 25(int64_t) Load 2482
+            2484: 25(int64_t) GroupNonUniformSMin 42 InclusiveScan 2483
+            2485:   2244(ptr) AccessChain 34(data) 2481 2243 38
+                              Store 2485 2484
+            2486:      6(int) Load 8(invocation)
+            2487:   2251(ptr) AccessChain 34(data) 46 2243
+            2488: 26(i64vec4) Load 2487
+            2489:2250(i64vec2) VectorShuffle 2488 2488 0 1
+            2490:2250(i64vec2) GroupNonUniformSMin 42 InclusiveScan 2489
+            2491:   2251(ptr) AccessChain 34(data) 2486 2243
+            2492: 26(i64vec4) Load 2491
+            2493: 26(i64vec4) VectorShuffle 2492 2490 4 5 2 3
+                              Store 2491 2493
+            2494:      6(int) Load 8(invocation)
+            2495:   2251(ptr) AccessChain 34(data) 57 2243
+            2496: 26(i64vec4) Load 2495
+            2497:2260(i64vec3) VectorShuffle 2496 2496 0 1 2
+            2498:2260(i64vec3) GroupNonUniformSMin 42 InclusiveScan 2497
+            2499:   2251(ptr) AccessChain 34(data) 2494 2243
+            2500: 26(i64vec4) Load 2499
+            2501: 26(i64vec4) VectorShuffle 2500 2498 4 5 6 3
+                              Store 2499 2501
+            2502:      6(int) Load 8(invocation)
+            2503:   2251(ptr) AccessChain 34(data) 67 2243
+            2504: 26(i64vec4) Load 2503
+            2505: 26(i64vec4) GroupNonUniformSMin 42 InclusiveScan 2504
+            2506:   2251(ptr) AccessChain 34(data) 2502 2243
+                              Store 2506 2505
+            2507:      6(int) Load 8(invocation)
+            2508:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2509: 25(int64_t) Load 2508
+            2510: 25(int64_t) GroupNonUniformSMax 42 InclusiveScan 2509
+            2511:   2244(ptr) AccessChain 34(data) 2507 2243 38
+                              Store 2511 2510
+            2512:      6(int) Load 8(invocation)
+            2513:   2251(ptr) AccessChain 34(data) 46 2243
+            2514: 26(i64vec4) Load 2513
+            2515:2250(i64vec2) VectorShuffle 2514 2514 0 1
+            2516:2250(i64vec2) GroupNonUniformSMax 42 InclusiveScan 2515
+            2517:   2251(ptr) AccessChain 34(data) 2512 2243
+            2518: 26(i64vec4) Load 2517
+            2519: 26(i64vec4) VectorShuffle 2518 2516 4 5 2 3
+                              Store 2517 2519
+            2520:      6(int) Load 8(invocation)
+            2521:   2251(ptr) AccessChain 34(data) 57 2243
+            2522: 26(i64vec4) Load 2521
+            2523:2260(i64vec3) VectorShuffle 2522 2522 0 1 2
+            2524:2260(i64vec3) GroupNonUniformSMax 42 InclusiveScan 2523
+            2525:   2251(ptr) AccessChain 34(data) 2520 2243
+            2526: 26(i64vec4) Load 2525
+            2527: 26(i64vec4) VectorShuffle 2526 2524 4 5 6 3
+                              Store 2525 2527
+            2528:      6(int) Load 8(invocation)
+            2529:   2251(ptr) AccessChain 34(data) 67 2243
+            2530: 26(i64vec4) Load 2529
+            2531: 26(i64vec4) GroupNonUniformSMax 42 InclusiveScan 2530
+            2532:   2251(ptr) AccessChain 34(data) 2528 2243
+                              Store 2532 2531
+            2533:      6(int) Load 8(invocation)
+            2534:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2535: 25(int64_t) Load 2534
+            2536: 25(int64_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 2535
+            2537:   2244(ptr) AccessChain 34(data) 2533 2243 38
+                              Store 2537 2536
+            2538:      6(int) Load 8(invocation)
+            2539:   2251(ptr) AccessChain 34(data) 46 2243
+            2540: 26(i64vec4) Load 2539
+            2541:2250(i64vec2) VectorShuffle 2540 2540 0 1
+            2542:2250(i64vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 2541
+            2543:   2251(ptr) AccessChain 34(data) 2538 2243
+            2544: 26(i64vec4) Load 2543
+            2545: 26(i64vec4) VectorShuffle 2544 2542 4 5 2 3
+                              Store 2543 2545
+            2546:      6(int) Load 8(invocation)
+            2547:   2251(ptr) AccessChain 34(data) 57 2243
+            2548: 26(i64vec4) Load 2547
+            2549:2260(i64vec3) VectorShuffle 2548 2548 0 1 2
+            2550:2260(i64vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 2549
+            2551:   2251(ptr) AccessChain 34(data) 2546 2243
+            2552: 26(i64vec4) Load 2551
+            2553: 26(i64vec4) VectorShuffle 2552 2550 4 5 6 3
+                              Store 2551 2553
+            2554:      6(int) Load 8(invocation)
+            2555:   2251(ptr) AccessChain 34(data) 67 2243
+            2556: 26(i64vec4) Load 2555
+            2557: 26(i64vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 2556
+            2558:   2251(ptr) AccessChain 34(data) 2554 2243
+                              Store 2558 2557
+            2559:      6(int) Load 8(invocation)
+            2560:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2561: 25(int64_t) Load 2560
+            2562: 25(int64_t) GroupNonUniformBitwiseOr 42 InclusiveScan 2561
+            2563:   2244(ptr) AccessChain 34(data) 2559 2243 38
+                              Store 2563 2562
+            2564:      6(int) Load 8(invocation)
+            2565:   2251(ptr) AccessChain 34(data) 46 2243
+            2566: 26(i64vec4) Load 2565
+            2567:2250(i64vec2) VectorShuffle 2566 2566 0 1
+            2568:2250(i64vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 2567
+            2569:   2251(ptr) AccessChain 34(data) 2564 2243
+            2570: 26(i64vec4) Load 2569
+            2571: 26(i64vec4) VectorShuffle 2570 2568 4 5 2 3
+                              Store 2569 2571
+            2572:      6(int) Load 8(invocation)
+            2573:   2251(ptr) AccessChain 34(data) 57 2243
+            2574: 26(i64vec4) Load 2573
+            2575:2260(i64vec3) VectorShuffle 2574 2574 0 1 2
+            2576:2260(i64vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 2575
+            2577:   2251(ptr) AccessChain 34(data) 2572 2243
+            2578: 26(i64vec4) Load 2577
+            2579: 26(i64vec4) VectorShuffle 2578 2576 4 5 6 3
+                              Store 2577 2579
+            2580:      6(int) Load 8(invocation)
+            2581:   2251(ptr) AccessChain 34(data) 67 2243
+            2582: 26(i64vec4) Load 2581
+            2583: 26(i64vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 2582
+            2584:   2251(ptr) AccessChain 34(data) 2580 2243
+                              Store 2584 2583
+            2585:      6(int) Load 8(invocation)
+            2586:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2587: 25(int64_t) Load 2586
+            2588: 25(int64_t) GroupNonUniformBitwiseXor 42 InclusiveScan 2587
+            2589:   2244(ptr) AccessChain 34(data) 2585 2243 38
+                              Store 2589 2588
+            2590:      6(int) Load 8(invocation)
+            2591:   2251(ptr) AccessChain 34(data) 46 2243
+            2592: 26(i64vec4) Load 2591
+            2593:2250(i64vec2) VectorShuffle 2592 2592 0 1
+            2594:2250(i64vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 2593
+            2595:   2251(ptr) AccessChain 34(data) 2590 2243
+            2596: 26(i64vec4) Load 2595
+            2597: 26(i64vec4) VectorShuffle 2596 2594 4 5 2 3
+                              Store 2595 2597
+            2598:      6(int) Load 8(invocation)
+            2599:   2251(ptr) AccessChain 34(data) 57 2243
+            2600: 26(i64vec4) Load 2599
+            2601:2260(i64vec3) VectorShuffle 2600 2600 0 1 2
+            2602:2260(i64vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 2601
+            2603:   2251(ptr) AccessChain 34(data) 2598 2243
+            2604: 26(i64vec4) Load 2603
+            2605: 26(i64vec4) VectorShuffle 2604 2602 4 5 6 3
+                              Store 2603 2605
+            2606:      6(int) Load 8(invocation)
+            2607:   2251(ptr) AccessChain 34(data) 67 2243
+            2608: 26(i64vec4) Load 2607
+            2609: 26(i64vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 2608
+            2610:   2251(ptr) AccessChain 34(data) 2606 2243
+                              Store 2610 2609
+            2611:      6(int) Load 8(invocation)
+            2612:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2613: 25(int64_t) Load 2612
+            2614: 25(int64_t) GroupNonUniformIAdd 42 ExclusiveScan 2613
+            2615:   2244(ptr) AccessChain 34(data) 2611 2243 38
+                              Store 2615 2614
+            2616:      6(int) Load 8(invocation)
+            2617:   2251(ptr) AccessChain 34(data) 46 2243
+            2618: 26(i64vec4) Load 2617
+            2619:2250(i64vec2) VectorShuffle 2618 2618 0 1
+            2620:2250(i64vec2) GroupNonUniformIAdd 42 ExclusiveScan 2619
+            2621:   2251(ptr) AccessChain 34(data) 2616 2243
+            2622: 26(i64vec4) Load 2621
+            2623: 26(i64vec4) VectorShuffle 2622 2620 4 5 2 3
+                              Store 2621 2623
+            2624:      6(int) Load 8(invocation)
+            2625:   2251(ptr) AccessChain 34(data) 57 2243
+            2626: 26(i64vec4) Load 2625
+            2627:2260(i64vec3) VectorShuffle 2626 2626 0 1 2
+            2628:2260(i64vec3) GroupNonUniformIAdd 42 ExclusiveScan 2627
+            2629:   2251(ptr) AccessChain 34(data) 2624 2243
+            2630: 26(i64vec4) Load 2629
+            2631: 26(i64vec4) VectorShuffle 2630 2628 4 5 6 3
+                              Store 2629 2631
+            2632:      6(int) Load 8(invocation)
+            2633:   2251(ptr) AccessChain 34(data) 67 2243
+            2634: 26(i64vec4) Load 2633
+            2635: 26(i64vec4) GroupNonUniformIAdd 42 ExclusiveScan 2634
+            2636:   2251(ptr) AccessChain 34(data) 2632 2243
+                              Store 2636 2635
+            2637:      6(int) Load 8(invocation)
+            2638:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2639: 25(int64_t) Load 2638
+            2640: 25(int64_t) GroupNonUniformIMul 42 ExclusiveScan 2639
+            2641:   2244(ptr) AccessChain 34(data) 2637 2243 38
+                              Store 2641 2640
+            2642:      6(int) Load 8(invocation)
+            2643:   2251(ptr) AccessChain 34(data) 46 2243
+            2644: 26(i64vec4) Load 2643
+            2645:2250(i64vec2) VectorShuffle 2644 2644 0 1
+            2646:2250(i64vec2) GroupNonUniformIMul 42 ExclusiveScan 2645
+            2647:   2251(ptr) AccessChain 34(data) 2642 2243
+            2648: 26(i64vec4) Load 2647
+            2649: 26(i64vec4) VectorShuffle 2648 2646 4 5 2 3
+                              Store 2647 2649
+            2650:      6(int) Load 8(invocation)
+            2651:   2251(ptr) AccessChain 34(data) 57 2243
+            2652: 26(i64vec4) Load 2651
+            2653:2260(i64vec3) VectorShuffle 2652 2652 0 1 2
+            2654:2260(i64vec3) GroupNonUniformIMul 42 ExclusiveScan 2653
+            2655:   2251(ptr) AccessChain 34(data) 2650 2243
+            2656: 26(i64vec4) Load 2655
+            2657: 26(i64vec4) VectorShuffle 2656 2654 4 5 6 3
+                              Store 2655 2657
+            2658:      6(int) Load 8(invocation)
+            2659:   2251(ptr) AccessChain 34(data) 67 2243
+            2660: 26(i64vec4) Load 2659
+            2661: 26(i64vec4) GroupNonUniformIMul 42 ExclusiveScan 2660
+            2662:   2251(ptr) AccessChain 34(data) 2658 2243
+                              Store 2662 2661
+            2663:      6(int) Load 8(invocation)
+            2664:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2665: 25(int64_t) Load 2664
+            2666: 25(int64_t) GroupNonUniformSMin 42 ExclusiveScan 2665
+            2667:   2244(ptr) AccessChain 34(data) 2663 2243 38
+                              Store 2667 2666
+            2668:      6(int) Load 8(invocation)
+            2669:   2251(ptr) AccessChain 34(data) 46 2243
+            2670: 26(i64vec4) Load 2669
+            2671:2250(i64vec2) VectorShuffle 2670 2670 0 1
+            2672:2250(i64vec2) GroupNonUniformSMin 42 ExclusiveScan 2671
+            2673:   2251(ptr) AccessChain 34(data) 2668 2243
+            2674: 26(i64vec4) Load 2673
+            2675: 26(i64vec4) VectorShuffle 2674 2672 4 5 2 3
+                              Store 2673 2675
+            2676:      6(int) Load 8(invocation)
+            2677:   2251(ptr) AccessChain 34(data) 57 2243
+            2678: 26(i64vec4) Load 2677
+            2679:2260(i64vec3) VectorShuffle 2678 2678 0 1 2
+            2680:2260(i64vec3) GroupNonUniformSMin 42 ExclusiveScan 2679
+            2681:   2251(ptr) AccessChain 34(data) 2676 2243
+            2682: 26(i64vec4) Load 2681
+            2683: 26(i64vec4) VectorShuffle 2682 2680 4 5 6 3
+                              Store 2681 2683
+            2684:      6(int) Load 8(invocation)
+            2685:   2251(ptr) AccessChain 34(data) 67 2243
+            2686: 26(i64vec4) Load 2685
+            2687: 26(i64vec4) GroupNonUniformSMin 42 ExclusiveScan 2686
+            2688:   2251(ptr) AccessChain 34(data) 2684 2243
+                              Store 2688 2687
+            2689:      6(int) Load 8(invocation)
+            2690:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2691: 25(int64_t) Load 2690
+            2692: 25(int64_t) GroupNonUniformSMax 42 ExclusiveScan 2691
+            2693:   2244(ptr) AccessChain 34(data) 2689 2243 38
+                              Store 2693 2692
+            2694:      6(int) Load 8(invocation)
+            2695:   2251(ptr) AccessChain 34(data) 46 2243
+            2696: 26(i64vec4) Load 2695
+            2697:2250(i64vec2) VectorShuffle 2696 2696 0 1
+            2698:2250(i64vec2) GroupNonUniformSMax 42 ExclusiveScan 2697
+            2699:   2251(ptr) AccessChain 34(data) 2694 2243
+            2700: 26(i64vec4) Load 2699
+            2701: 26(i64vec4) VectorShuffle 2700 2698 4 5 2 3
+                              Store 2699 2701
+            2702:      6(int) Load 8(invocation)
+            2703:   2251(ptr) AccessChain 34(data) 57 2243
+            2704: 26(i64vec4) Load 2703
+            2705:2260(i64vec3) VectorShuffle 2704 2704 0 1 2
+            2706:2260(i64vec3) GroupNonUniformSMax 42 ExclusiveScan 2705
+            2707:   2251(ptr) AccessChain 34(data) 2702 2243
+            2708: 26(i64vec4) Load 2707
+            2709: 26(i64vec4) VectorShuffle 2708 2706 4 5 6 3
+                              Store 2707 2709
+            2710:      6(int) Load 8(invocation)
+            2711:   2251(ptr) AccessChain 34(data) 67 2243
+            2712: 26(i64vec4) Load 2711
+            2713: 26(i64vec4) GroupNonUniformSMax 42 ExclusiveScan 2712
+            2714:   2251(ptr) AccessChain 34(data) 2710 2243
+                              Store 2714 2713
+            2715:      6(int) Load 8(invocation)
+            2716:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2717: 25(int64_t) Load 2716
+            2718: 25(int64_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2717
+            2719:   2244(ptr) AccessChain 34(data) 2715 2243 38
+                              Store 2719 2718
+            2720:      6(int) Load 8(invocation)
+            2721:   2251(ptr) AccessChain 34(data) 46 2243
+            2722: 26(i64vec4) Load 2721
+            2723:2250(i64vec2) VectorShuffle 2722 2722 0 1
+            2724:2250(i64vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2723
+            2725:   2251(ptr) AccessChain 34(data) 2720 2243
+            2726: 26(i64vec4) Load 2725
+            2727: 26(i64vec4) VectorShuffle 2726 2724 4 5 2 3
+                              Store 2725 2727
+            2728:      6(int) Load 8(invocation)
+            2729:   2251(ptr) AccessChain 34(data) 57 2243
+            2730: 26(i64vec4) Load 2729
+            2731:2260(i64vec3) VectorShuffle 2730 2730 0 1 2
+            2732:2260(i64vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2731
+            2733:   2251(ptr) AccessChain 34(data) 2728 2243
+            2734: 26(i64vec4) Load 2733
+            2735: 26(i64vec4) VectorShuffle 2734 2732 4 5 6 3
+                              Store 2733 2735
+            2736:      6(int) Load 8(invocation)
+            2737:   2251(ptr) AccessChain 34(data) 67 2243
+            2738: 26(i64vec4) Load 2737
+            2739: 26(i64vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2738
+            2740:   2251(ptr) AccessChain 34(data) 2736 2243
+                              Store 2740 2739
+            2741:      6(int) Load 8(invocation)
+            2742:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2743: 25(int64_t) Load 2742
+            2744: 25(int64_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 2743
+            2745:   2244(ptr) AccessChain 34(data) 2741 2243 38
+                              Store 2745 2744
+            2746:      6(int) Load 8(invocation)
+            2747:   2251(ptr) AccessChain 34(data) 46 2243
+            2748: 26(i64vec4) Load 2747
+            2749:2250(i64vec2) VectorShuffle 2748 2748 0 1
+            2750:2250(i64vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 2749
+            2751:   2251(ptr) AccessChain 34(data) 2746 2243
+            2752: 26(i64vec4) Load 2751
+            2753: 26(i64vec4) VectorShuffle 2752 2750 4 5 2 3
+                              Store 2751 2753
+            2754:      6(int) Load 8(invocation)
+            2755:   2251(ptr) AccessChain 34(data) 57 2243
+            2756: 26(i64vec4) Load 2755
+            2757:2260(i64vec3) VectorShuffle 2756 2756 0 1 2
+            2758:2260(i64vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 2757
+            2759:   2251(ptr) AccessChain 34(data) 2754 2243
+            2760: 26(i64vec4) Load 2759
+            2761: 26(i64vec4) VectorShuffle 2760 2758 4 5 6 3
+                              Store 2759 2761
+            2762:      6(int) Load 8(invocation)
+            2763:   2251(ptr) AccessChain 34(data) 67 2243
+            2764: 26(i64vec4) Load 2763
+            2765: 26(i64vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 2764
+            2766:   2251(ptr) AccessChain 34(data) 2762 2243
+                              Store 2766 2765
+            2767:      6(int) Load 8(invocation)
+            2768:   2244(ptr) AccessChain 34(data) 37 2243 38
+            2769: 25(int64_t) Load 2768
+            2770: 25(int64_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 2769
+            2771:   2244(ptr) AccessChain 34(data) 2767 2243 38
+                              Store 2771 2770
+            2772:      6(int) Load 8(invocation)
+            2773:   2251(ptr) AccessChain 34(data) 46 2243
+            2774: 26(i64vec4) Load 2773
+            2775:2250(i64vec2) VectorShuffle 2774 2774 0 1
+            2776:2250(i64vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 2775
+            2777:   2251(ptr) AccessChain 34(data) 2772 2243
+            2778: 26(i64vec4) Load 2777
+            2779: 26(i64vec4) VectorShuffle 2778 2776 4 5 2 3
+                              Store 2777 2779
+            2780:      6(int) Load 8(invocation)
+            2781:   2251(ptr) AccessChain 34(data) 57 2243
+            2782: 26(i64vec4) Load 2781
+            2783:2260(i64vec3) VectorShuffle 2782 2782 0 1 2
+            2784:2260(i64vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 2783
+            2785:   2251(ptr) AccessChain 34(data) 2780 2243
+            2786: 26(i64vec4) Load 2785
+            2787: 26(i64vec4) VectorShuffle 2786 2784 4 5 6 3
+                              Store 2785 2787
+            2788:      6(int) Load 8(invocation)
+            2789:   2251(ptr) AccessChain 34(data) 67 2243
+            2790: 26(i64vec4) Load 2789
+            2791: 26(i64vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 2790
+            2792:   2251(ptr) AccessChain 34(data) 2788 2243
+                              Store 2792 2791
+            2793:      6(int) Load 8(invocation)
+            2796:   2795(ptr) AccessChain 34(data) 37 2794 38
+            2797: 27(int64_t) Load 2796
+            2798: 27(int64_t) GroupNonUniformIAdd 42 Reduce 2797
+            2799:   2795(ptr) AccessChain 34(data) 2793 2794 38
+                              Store 2799 2798
+            2800:      6(int) Load 8(invocation)
+            2803:   2802(ptr) AccessChain 34(data) 46 2794
+            2804: 28(i64vec4) Load 2803
+            2805:2801(i64vec2) VectorShuffle 2804 2804 0 1
+            2806:2801(i64vec2) GroupNonUniformIAdd 42 Reduce 2805
+            2807:   2802(ptr) AccessChain 34(data) 2800 2794
+            2808: 28(i64vec4) Load 2807
+            2809: 28(i64vec4) VectorShuffle 2808 2806 4 5 2 3
+                              Store 2807 2809
+            2810:      6(int) Load 8(invocation)
+            2812:   2802(ptr) AccessChain 34(data) 57 2794
+            2813: 28(i64vec4) Load 2812
+            2814:2811(i64vec3) VectorShuffle 2813 2813 0 1 2
+            2815:2811(i64vec3) GroupNonUniformIAdd 42 Reduce 2814
+            2816:   2802(ptr) AccessChain 34(data) 2810 2794
+            2817: 28(i64vec4) Load 2816
+            2818: 28(i64vec4) VectorShuffle 2817 2815 4 5 6 3
+                              Store 2816 2818
+            2819:      6(int) Load 8(invocation)
+            2820:   2802(ptr) AccessChain 34(data) 67 2794
+            2821: 28(i64vec4) Load 2820
+            2822: 28(i64vec4) GroupNonUniformIAdd 42 Reduce 2821
+            2823:   2802(ptr) AccessChain 34(data) 2819 2794
+                              Store 2823 2822
+            2824:      6(int) Load 8(invocation)
+            2825:   2795(ptr) AccessChain 34(data) 37 2794 38
+            2826: 27(int64_t) Load 2825
+            2827: 27(int64_t) GroupNonUniformIMul 42 Reduce 2826
+            2828:   2795(ptr) AccessChain 34(data) 2824 2794 38
+                              Store 2828 2827
+            2829:      6(int) Load 8(invocation)
+            2830:   2802(ptr) AccessChain 34(data) 46 2794
+            2831: 28(i64vec4) Load 2830
+            2832:2801(i64vec2) VectorShuffle 2831 2831 0 1
+            2833:2801(i64vec2) GroupNonUniformIMul 42 Reduce 2832
+            2834:   2802(ptr) AccessChain 34(data) 2829 2794
+            2835: 28(i64vec4) Load 2834
+            2836: 28(i64vec4) VectorShuffle 2835 2833 4 5 2 3
+                              Store 2834 2836
+            2837:      6(int) Load 8(invocation)
+            2838:   2802(ptr) AccessChain 34(data) 57 2794
+            2839: 28(i64vec4) Load 2838
+            2840:2811(i64vec3) VectorShuffle 2839 2839 0 1 2
+            2841:2811(i64vec3) GroupNonUniformIMul 42 Reduce 2840
+            2842:   2802(ptr) AccessChain 34(data) 2837 2794
+            2843: 28(i64vec4) Load 2842
+            2844: 28(i64vec4) VectorShuffle 2843 2841 4 5 6 3
+                              Store 2842 2844
+            2845:      6(int) Load 8(invocation)
+            2846:   2802(ptr) AccessChain 34(data) 67 2794
+            2847: 28(i64vec4) Load 2846
+            2848: 28(i64vec4) GroupNonUniformIMul 42 Reduce 2847
+            2849:   2802(ptr) AccessChain 34(data) 2845 2794
+                              Store 2849 2848
+            2850:      6(int) Load 8(invocation)
+            2851:   2795(ptr) AccessChain 34(data) 37 2794 38
+            2852: 27(int64_t) Load 2851
+            2853: 27(int64_t) GroupNonUniformUMin 42 Reduce 2852
+            2854:   2795(ptr) AccessChain 34(data) 2850 2794 38
+                              Store 2854 2853
+            2855:      6(int) Load 8(invocation)
+            2856:   2802(ptr) AccessChain 34(data) 46 2794
+            2857: 28(i64vec4) Load 2856
+            2858:2801(i64vec2) VectorShuffle 2857 2857 0 1
+            2859:2801(i64vec2) GroupNonUniformUMin 42 Reduce 2858
+            2860:   2802(ptr) AccessChain 34(data) 2855 2794
+            2861: 28(i64vec4) Load 2860
+            2862: 28(i64vec4) VectorShuffle 2861 2859 4 5 2 3
+                              Store 2860 2862
+            2863:      6(int) Load 8(invocation)
+            2864:   2802(ptr) AccessChain 34(data) 57 2794
+            2865: 28(i64vec4) Load 2864
+            2866:2811(i64vec3) VectorShuffle 2865 2865 0 1 2
+            2867:2811(i64vec3) GroupNonUniformUMin 42 Reduce 2866
+            2868:   2802(ptr) AccessChain 34(data) 2863 2794
+            2869: 28(i64vec4) Load 2868
+            2870: 28(i64vec4) VectorShuffle 2869 2867 4 5 6 3
+                              Store 2868 2870
+            2871:      6(int) Load 8(invocation)
+            2872:   2802(ptr) AccessChain 34(data) 67 2794
+            2873: 28(i64vec4) Load 2872
+            2874: 28(i64vec4) GroupNonUniformUMin 42 Reduce 2873
+            2875:   2802(ptr) AccessChain 34(data) 2871 2794
+                              Store 2875 2874
+            2876:      6(int) Load 8(invocation)
+            2877:   2795(ptr) AccessChain 34(data) 37 2794 38
+            2878: 27(int64_t) Load 2877
+            2879: 27(int64_t) GroupNonUniformUMax 42 Reduce 2878
+            2880:   2795(ptr) AccessChain 34(data) 2876 2794 38
+                              Store 2880 2879
+            2881:      6(int) Load 8(invocation)
+            2882:   2802(ptr) AccessChain 34(data) 46 2794
+            2883: 28(i64vec4) Load 2882
+            2884:2801(i64vec2) VectorShuffle 2883 2883 0 1
+            2885:2801(i64vec2) GroupNonUniformUMax 42 Reduce 2884
+            2886:   2802(ptr) AccessChain 34(data) 2881 2794
+            2887: 28(i64vec4) Load 2886
+            2888: 28(i64vec4) VectorShuffle 2887 2885 4 5 2 3
+                              Store 2886 2888
+            2889:      6(int) Load 8(invocation)
+            2890:   2802(ptr) AccessChain 34(data) 57 2794
+            2891: 28(i64vec4) Load 2890
+            2892:2811(i64vec3) VectorShuffle 2891 2891 0 1 2
+            2893:2811(i64vec3) GroupNonUniformUMax 42 Reduce 2892
+            2894:   2802(ptr) AccessChain 34(data) 2889 2794
+            2895: 28(i64vec4) Load 2894
+            2896: 28(i64vec4) VectorShuffle 2895 2893 4 5 6 3
+                              Store 2894 2896
+            2897:      6(int) Load 8(invocation)
+            2898:   2802(ptr) AccessChain 34(data) 67 2794
+            2899: 28(i64vec4) Load 2898
+            2900: 28(i64vec4) GroupNonUniformUMax 42 Reduce 2899
+            2901:   2802(ptr) AccessChain 34(data) 2897 2794
+                              Store 2901 2900
+            2902:      6(int) Load 8(invocation)
+            2903:   2795(ptr) AccessChain 34(data) 37 2794 38
+            2904: 27(int64_t) Load 2903
+            2905: 27(int64_t) GroupNonUniformBitwiseAnd 42 Reduce 2904
+            2906:   2795(ptr) AccessChain 34(data) 2902 2794 38
+                              Store 2906 2905
+            2907:      6(int) Load 8(invocation)
+            2908:   2802(ptr) AccessChain 34(data) 46 2794
+            2909: 28(i64vec4) Load 2908
+            2910:2801(i64vec2) VectorShuffle 2909 2909 0 1
+            2911:2801(i64vec2) GroupNonUniformBitwiseAnd 42 Reduce 2910
+            2912:   2802(ptr) AccessChain 34(data) 2907 2794
+            2913: 28(i64vec4) Load 2912
+            2914: 28(i64vec4) VectorShuffle 2913 2911 4 5 2 3
+                              Store 2912 2914
+            2915:      6(int) Load 8(invocation)
+            2916:   2802(ptr) AccessChain 34(data) 57 2794
+            2917: 28(i64vec4) Load 2916
+            2918:2811(i64vec3) VectorShuffle 2917 2917 0 1 2
+            2919:2811(i64vec3) GroupNonUniformBitwiseAnd 42 Reduce 2918
+            2920:   2802(ptr) AccessChain 34(data) 2915 2794
+            2921: 28(i64vec4) Load 2920
+            2922: 28(i64vec4) VectorShuffle 2921 2919 4 5 6 3
+                              Store 2920 2922
+            2923:      6(int) Load 8(invocation)
+            2924:   2802(ptr) AccessChain 34(data) 67 2794
+            2925: 28(i64vec4) Load 2924
+            2926: 28(i64vec4) GroupNonUniformBitwiseAnd 42 Reduce 2925
+            2927:   2802(ptr) AccessChain 34(data) 2923 2794
+                              Store 2927 2926
+            2928:      6(int) Load 8(invocation)
+            2929:   2795(ptr) AccessChain 34(data) 37 2794 38
+            2930: 27(int64_t) Load 2929
+            2931: 27(int64_t) GroupNonUniformBitwiseOr 42 Reduce 2930
+            2932:   2795(ptr) AccessChain 34(data) 2928 2794 38
+                              Store 2932 2931
+            2933:      6(int) Load 8(invocation)
+            2934:   2802(ptr) AccessChain 34(data) 46 2794
+            2935: 28(i64vec4) Load 2934
+            2936:2801(i64vec2) VectorShuffle 2935 2935 0 1
+            2937:2801(i64vec2) GroupNonUniformBitwiseOr 42 Reduce 2936
+            2938:   2802(ptr) AccessChain 34(data) 2933 2794
+            2939: 28(i64vec4) Load 2938
+            2940: 28(i64vec4) VectorShuffle 2939 2937 4 5 2 3
+                              Store 2938 2940
+            2941:      6(int) Load 8(invocation)
+            2942:   2802(ptr) AccessChain 34(data) 57 2794
+            2943: 28(i64vec4) Load 2942
+            2944:2811(i64vec3) VectorShuffle 2943 2943 0 1 2
+            2945:2811(i64vec3) GroupNonUniformBitwiseOr 42 Reduce 2944
+            2946:   2802(ptr) AccessChain 34(data) 2941 2794
+            2947: 28(i64vec4) Load 2946
+            2948: 28(i64vec4) VectorShuffle 2947 2945 4 5 6 3
+                              Store 2946 2948
+            2949:      6(int) Load 8(invocation)
+            2950:   2802(ptr) AccessChain 34(data) 67 2794
+            2951: 28(i64vec4) Load 2950
+            2952: 28(i64vec4) GroupNonUniformBitwiseOr 42 Reduce 2951
+            2953:   2802(ptr) AccessChain 34(data) 2949 2794
+                              Store 2953 2952
+            2954:      6(int) Load 8(invocation)
+            2955:   2795(ptr) AccessChain 34(data) 37 2794 38
+            2956: 27(int64_t) Load 2955
+            2957: 27(int64_t) GroupNonUniformBitwiseXor 42 Reduce 2956
+            2958:   2795(ptr) AccessChain 34(data) 2954 2794 38
+                              Store 2958 2957
+            2959:      6(int) Load 8(invocation)
+            2960:   2802(ptr) AccessChain 34(data) 46 2794
+            2961: 28(i64vec4) Load 2960
+            2962:2801(i64vec2) VectorShuffle 2961 2961 0 1
+            2963:2801(i64vec2) GroupNonUniformBitwiseXor 42 Reduce 2962
+            2964:   2802(ptr) AccessChain 34(data) 2959 2794
+            2965: 28(i64vec4) Load 2964
+            2966: 28(i64vec4) VectorShuffle 2965 2963 4 5 2 3
+                              Store 2964 2966
+            2967:      6(int) Load 8(invocation)
+            2968:   2802(ptr) AccessChain 34(data) 57 2794
+            2969: 28(i64vec4) Load 2968
+            2970:2811(i64vec3) VectorShuffle 2969 2969 0 1 2
+            2971:2811(i64vec3) GroupNonUniformBitwiseXor 42 Reduce 2970
+            2972:   2802(ptr) AccessChain 34(data) 2967 2794
+            2973: 28(i64vec4) Load 2972
+            2974: 28(i64vec4) VectorShuffle 2973 2971 4 5 6 3
+                              Store 2972 2974
+            2975:      6(int) Load 8(invocation)
+            2976:   2802(ptr) AccessChain 34(data) 67 2794
+            2977: 28(i64vec4) Load 2976
+            2978: 28(i64vec4) GroupNonUniformBitwiseXor 42 Reduce 2977
+            2979:   2802(ptr) AccessChain 34(data) 2975 2794
+                              Store 2979 2978
+            2980:      6(int) Load 8(invocation)
+            2981:   2795(ptr) AccessChain 34(data) 37 2794 38
+            2982: 27(int64_t) Load 2981
+            2983: 27(int64_t) GroupNonUniformIAdd 42 InclusiveScan 2982
+            2984:   2795(ptr) AccessChain 34(data) 2980 2794 38
+                              Store 2984 2983
+            2985:      6(int) Load 8(invocation)
+            2986:   2802(ptr) AccessChain 34(data) 46 2794
+            2987: 28(i64vec4) Load 2986
+            2988:2801(i64vec2) VectorShuffle 2987 2987 0 1
+            2989:2801(i64vec2) GroupNonUniformIAdd 42 InclusiveScan 2988
+            2990:   2802(ptr) AccessChain 34(data) 2985 2794
+            2991: 28(i64vec4) Load 2990
+            2992: 28(i64vec4) VectorShuffle 2991 2989 4 5 2 3
+                              Store 2990 2992
+            2993:      6(int) Load 8(invocation)
+            2994:   2802(ptr) AccessChain 34(data) 57 2794
+            2995: 28(i64vec4) Load 2994
+            2996:2811(i64vec3) VectorShuffle 2995 2995 0 1 2
+            2997:2811(i64vec3) GroupNonUniformIAdd 42 InclusiveScan 2996
+            2998:   2802(ptr) AccessChain 34(data) 2993 2794
+            2999: 28(i64vec4) Load 2998
+            3000: 28(i64vec4) VectorShuffle 2999 2997 4 5 6 3
+                              Store 2998 3000
+            3001:      6(int) Load 8(invocation)
+            3002:   2802(ptr) AccessChain 34(data) 67 2794
+            3003: 28(i64vec4) Load 3002
+            3004: 28(i64vec4) GroupNonUniformIAdd 42 InclusiveScan 3003
+            3005:   2802(ptr) AccessChain 34(data) 3001 2794
+                              Store 3005 3004
+            3006:      6(int) Load 8(invocation)
+            3007:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3008: 27(int64_t) Load 3007
+            3009: 27(int64_t) GroupNonUniformIMul 42 InclusiveScan 3008
+            3010:   2795(ptr) AccessChain 34(data) 3006 2794 38
+                              Store 3010 3009
+            3011:      6(int) Load 8(invocation)
+            3012:   2802(ptr) AccessChain 34(data) 46 2794
+            3013: 28(i64vec4) Load 3012
+            3014:2801(i64vec2) VectorShuffle 3013 3013 0 1
+            3015:2801(i64vec2) GroupNonUniformIMul 42 InclusiveScan 3014
+            3016:   2802(ptr) AccessChain 34(data) 3011 2794
+            3017: 28(i64vec4) Load 3016
+            3018: 28(i64vec4) VectorShuffle 3017 3015 4 5 2 3
+                              Store 3016 3018
+            3019:      6(int) Load 8(invocation)
+            3020:   2802(ptr) AccessChain 34(data) 57 2794
+            3021: 28(i64vec4) Load 3020
+            3022:2811(i64vec3) VectorShuffle 3021 3021 0 1 2
+            3023:2811(i64vec3) GroupNonUniformIMul 42 InclusiveScan 3022
+            3024:   2802(ptr) AccessChain 34(data) 3019 2794
+            3025: 28(i64vec4) Load 3024
+            3026: 28(i64vec4) VectorShuffle 3025 3023 4 5 6 3
+                              Store 3024 3026
+            3027:      6(int) Load 8(invocation)
+            3028:   2802(ptr) AccessChain 34(data) 67 2794
+            3029: 28(i64vec4) Load 3028
+            3030: 28(i64vec4) GroupNonUniformIMul 42 InclusiveScan 3029
+            3031:   2802(ptr) AccessChain 34(data) 3027 2794
+                              Store 3031 3030
+            3032:      6(int) Load 8(invocation)
+            3033:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3034: 27(int64_t) Load 3033
+            3035: 27(int64_t) GroupNonUniformUMin 42 InclusiveScan 3034
+            3036:   2795(ptr) AccessChain 34(data) 3032 2794 38
+                              Store 3036 3035
+            3037:      6(int) Load 8(invocation)
+            3038:   2802(ptr) AccessChain 34(data) 46 2794
+            3039: 28(i64vec4) Load 3038
+            3040:2801(i64vec2) VectorShuffle 3039 3039 0 1
+            3041:2801(i64vec2) GroupNonUniformUMin 42 InclusiveScan 3040
+            3042:   2802(ptr) AccessChain 34(data) 3037 2794
+            3043: 28(i64vec4) Load 3042
+            3044: 28(i64vec4) VectorShuffle 3043 3041 4 5 2 3
+                              Store 3042 3044
+            3045:      6(int) Load 8(invocation)
+            3046:   2802(ptr) AccessChain 34(data) 57 2794
+            3047: 28(i64vec4) Load 3046
+            3048:2811(i64vec3) VectorShuffle 3047 3047 0 1 2
+            3049:2811(i64vec3) GroupNonUniformUMin 42 InclusiveScan 3048
+            3050:   2802(ptr) AccessChain 34(data) 3045 2794
+            3051: 28(i64vec4) Load 3050
+            3052: 28(i64vec4) VectorShuffle 3051 3049 4 5 6 3
+                              Store 3050 3052
+            3053:      6(int) Load 8(invocation)
+            3054:   2802(ptr) AccessChain 34(data) 67 2794
+            3055: 28(i64vec4) Load 3054
+            3056: 28(i64vec4) GroupNonUniformUMin 42 InclusiveScan 3055
+            3057:   2802(ptr) AccessChain 34(data) 3053 2794
+                              Store 3057 3056
+            3058:      6(int) Load 8(invocation)
+            3059:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3060: 27(int64_t) Load 3059
+            3061: 27(int64_t) GroupNonUniformUMax 42 InclusiveScan 3060
+            3062:   2795(ptr) AccessChain 34(data) 3058 2794 38
+                              Store 3062 3061
+            3063:      6(int) Load 8(invocation)
+            3064:   2802(ptr) AccessChain 34(data) 46 2794
+            3065: 28(i64vec4) Load 3064
+            3066:2801(i64vec2) VectorShuffle 3065 3065 0 1
+            3067:2801(i64vec2) GroupNonUniformUMax 42 InclusiveScan 3066
+            3068:   2802(ptr) AccessChain 34(data) 3063 2794
+            3069: 28(i64vec4) Load 3068
+            3070: 28(i64vec4) VectorShuffle 3069 3067 4 5 2 3
+                              Store 3068 3070
+            3071:      6(int) Load 8(invocation)
+            3072:   2802(ptr) AccessChain 34(data) 57 2794
+            3073: 28(i64vec4) Load 3072
+            3074:2811(i64vec3) VectorShuffle 3073 3073 0 1 2
+            3075:2811(i64vec3) GroupNonUniformUMax 42 InclusiveScan 3074
+            3076:   2802(ptr) AccessChain 34(data) 3071 2794
+            3077: 28(i64vec4) Load 3076
+            3078: 28(i64vec4) VectorShuffle 3077 3075 4 5 6 3
+                              Store 3076 3078
+            3079:      6(int) Load 8(invocation)
+            3080:   2802(ptr) AccessChain 34(data) 67 2794
+            3081: 28(i64vec4) Load 3080
+            3082: 28(i64vec4) GroupNonUniformUMax 42 InclusiveScan 3081
+            3083:   2802(ptr) AccessChain 34(data) 3079 2794
+                              Store 3083 3082
+            3084:      6(int) Load 8(invocation)
+            3085:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3086: 27(int64_t) Load 3085
+            3087: 27(int64_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 3086
+            3088:   2795(ptr) AccessChain 34(data) 3084 2794 38
+                              Store 3088 3087
+            3089:      6(int) Load 8(invocation)
+            3090:   2802(ptr) AccessChain 34(data) 46 2794
+            3091: 28(i64vec4) Load 3090
+            3092:2801(i64vec2) VectorShuffle 3091 3091 0 1
+            3093:2801(i64vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 3092
+            3094:   2802(ptr) AccessChain 34(data) 3089 2794
+            3095: 28(i64vec4) Load 3094
+            3096: 28(i64vec4) VectorShuffle 3095 3093 4 5 2 3
+                              Store 3094 3096
+            3097:      6(int) Load 8(invocation)
+            3098:   2802(ptr) AccessChain 34(data) 57 2794
+            3099: 28(i64vec4) Load 3098
+            3100:2811(i64vec3) VectorShuffle 3099 3099 0 1 2
+            3101:2811(i64vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 3100
+            3102:   2802(ptr) AccessChain 34(data) 3097 2794
+            3103: 28(i64vec4) Load 3102
+            3104: 28(i64vec4) VectorShuffle 3103 3101 4 5 6 3
+                              Store 3102 3104
+            3105:      6(int) Load 8(invocation)
+            3106:   2802(ptr) AccessChain 34(data) 67 2794
+            3107: 28(i64vec4) Load 3106
+            3108: 28(i64vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 3107
+            3109:   2802(ptr) AccessChain 34(data) 3105 2794
+                              Store 3109 3108
+            3110:      6(int) Load 8(invocation)
+            3111:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3112: 27(int64_t) Load 3111
+            3113: 27(int64_t) GroupNonUniformBitwiseOr 42 InclusiveScan 3112
+            3114:   2795(ptr) AccessChain 34(data) 3110 2794 38
+                              Store 3114 3113
+            3115:      6(int) Load 8(invocation)
+            3116:   2802(ptr) AccessChain 34(data) 46 2794
+            3117: 28(i64vec4) Load 3116
+            3118:2801(i64vec2) VectorShuffle 3117 3117 0 1
+            3119:2801(i64vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 3118
+            3120:   2802(ptr) AccessChain 34(data) 3115 2794
+            3121: 28(i64vec4) Load 3120
+            3122: 28(i64vec4) VectorShuffle 3121 3119 4 5 2 3
+                              Store 3120 3122
+            3123:      6(int) Load 8(invocation)
+            3124:   2802(ptr) AccessChain 34(data) 57 2794
+            3125: 28(i64vec4) Load 3124
+            3126:2811(i64vec3) VectorShuffle 3125 3125 0 1 2
+            3127:2811(i64vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 3126
+            3128:   2802(ptr) AccessChain 34(data) 3123 2794
+            3129: 28(i64vec4) Load 3128
+            3130: 28(i64vec4) VectorShuffle 3129 3127 4 5 6 3
+                              Store 3128 3130
+            3131:      6(int) Load 8(invocation)
+            3132:   2802(ptr) AccessChain 34(data) 67 2794
+            3133: 28(i64vec4) Load 3132
+            3134: 28(i64vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 3133
+            3135:   2802(ptr) AccessChain 34(data) 3131 2794
+                              Store 3135 3134
+            3136:      6(int) Load 8(invocation)
+            3137:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3138: 27(int64_t) Load 3137
+            3139: 27(int64_t) GroupNonUniformBitwiseXor 42 InclusiveScan 3138
+            3140:   2795(ptr) AccessChain 34(data) 3136 2794 38
+                              Store 3140 3139
+            3141:      6(int) Load 8(invocation)
+            3142:   2802(ptr) AccessChain 34(data) 46 2794
+            3143: 28(i64vec4) Load 3142
+            3144:2801(i64vec2) VectorShuffle 3143 3143 0 1
+            3145:2801(i64vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 3144
+            3146:   2802(ptr) AccessChain 34(data) 3141 2794
+            3147: 28(i64vec4) Load 3146
+            3148: 28(i64vec4) VectorShuffle 3147 3145 4 5 2 3
+                              Store 3146 3148
+            3149:      6(int) Load 8(invocation)
+            3150:   2802(ptr) AccessChain 34(data) 57 2794
+            3151: 28(i64vec4) Load 3150
+            3152:2811(i64vec3) VectorShuffle 3151 3151 0 1 2
+            3153:2811(i64vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 3152
+            3154:   2802(ptr) AccessChain 34(data) 3149 2794
+            3155: 28(i64vec4) Load 3154
+            3156: 28(i64vec4) VectorShuffle 3155 3153 4 5 6 3
+                              Store 3154 3156
+            3157:      6(int) Load 8(invocation)
+            3158:   2802(ptr) AccessChain 34(data) 67 2794
+            3159: 28(i64vec4) Load 3158
+            3160: 28(i64vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 3159
+            3161:   2802(ptr) AccessChain 34(data) 3157 2794
+                              Store 3161 3160
+            3162:      6(int) Load 8(invocation)
+            3163:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3164: 27(int64_t) Load 3163
+            3165: 27(int64_t) GroupNonUniformIAdd 42 ExclusiveScan 3164
+            3166:   2795(ptr) AccessChain 34(data) 3162 2794 38
+                              Store 3166 3165
+            3167:      6(int) Load 8(invocation)
+            3168:   2802(ptr) AccessChain 34(data) 46 2794
+            3169: 28(i64vec4) Load 3168
+            3170:2801(i64vec2) VectorShuffle 3169 3169 0 1
+            3171:2801(i64vec2) GroupNonUniformIAdd 42 ExclusiveScan 3170
+            3172:   2802(ptr) AccessChain 34(data) 3167 2794
+            3173: 28(i64vec4) Load 3172
+            3174: 28(i64vec4) VectorShuffle 3173 3171 4 5 2 3
+                              Store 3172 3174
+            3175:      6(int) Load 8(invocation)
+            3176:   2802(ptr) AccessChain 34(data) 57 2794
+            3177: 28(i64vec4) Load 3176
+            3178:2811(i64vec3) VectorShuffle 3177 3177 0 1 2
+            3179:2811(i64vec3) GroupNonUniformIAdd 42 ExclusiveScan 3178
+            3180:   2802(ptr) AccessChain 34(data) 3175 2794
+            3181: 28(i64vec4) Load 3180
+            3182: 28(i64vec4) VectorShuffle 3181 3179 4 5 6 3
+                              Store 3180 3182
+            3183:      6(int) Load 8(invocation)
+            3184:   2802(ptr) AccessChain 34(data) 67 2794
+            3185: 28(i64vec4) Load 3184
+            3186: 28(i64vec4) GroupNonUniformIAdd 42 ExclusiveScan 3185
+            3187:   2802(ptr) AccessChain 34(data) 3183 2794
+                              Store 3187 3186
+            3188:      6(int) Load 8(invocation)
+            3189:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3190: 27(int64_t) Load 3189
+            3191: 27(int64_t) GroupNonUniformIMul 42 ExclusiveScan 3190
+            3192:   2795(ptr) AccessChain 34(data) 3188 2794 38
+                              Store 3192 3191
+            3193:      6(int) Load 8(invocation)
+            3194:   2802(ptr) AccessChain 34(data) 46 2794
+            3195: 28(i64vec4) Load 3194
+            3196:2801(i64vec2) VectorShuffle 3195 3195 0 1
+            3197:2801(i64vec2) GroupNonUniformIMul 42 ExclusiveScan 3196
+            3198:   2802(ptr) AccessChain 34(data) 3193 2794
+            3199: 28(i64vec4) Load 3198
+            3200: 28(i64vec4) VectorShuffle 3199 3197 4 5 2 3
+                              Store 3198 3200
+            3201:      6(int) Load 8(invocation)
+            3202:   2802(ptr) AccessChain 34(data) 57 2794
+            3203: 28(i64vec4) Load 3202
+            3204:2811(i64vec3) VectorShuffle 3203 3203 0 1 2
+            3205:2811(i64vec3) GroupNonUniformIMul 42 ExclusiveScan 3204
+            3206:   2802(ptr) AccessChain 34(data) 3201 2794
+            3207: 28(i64vec4) Load 3206
+            3208: 28(i64vec4) VectorShuffle 3207 3205 4 5 6 3
+                              Store 3206 3208
+            3209:      6(int) Load 8(invocation)
+            3210:   2802(ptr) AccessChain 34(data) 67 2794
+            3211: 28(i64vec4) Load 3210
+            3212: 28(i64vec4) GroupNonUniformIMul 42 ExclusiveScan 3211
+            3213:   2802(ptr) AccessChain 34(data) 3209 2794
+                              Store 3213 3212
+            3214:      6(int) Load 8(invocation)
+            3215:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3216: 27(int64_t) Load 3215
+            3217: 27(int64_t) GroupNonUniformUMin 42 ExclusiveScan 3216
+            3218:   2795(ptr) AccessChain 34(data) 3214 2794 38
+                              Store 3218 3217
+            3219:      6(int) Load 8(invocation)
+            3220:   2802(ptr) AccessChain 34(data) 46 2794
+            3221: 28(i64vec4) Load 3220
+            3222:2801(i64vec2) VectorShuffle 3221 3221 0 1
+            3223:2801(i64vec2) GroupNonUniformUMin 42 ExclusiveScan 3222
+            3224:   2802(ptr) AccessChain 34(data) 3219 2794
+            3225: 28(i64vec4) Load 3224
+            3226: 28(i64vec4) VectorShuffle 3225 3223 4 5 2 3
+                              Store 3224 3226
+            3227:      6(int) Load 8(invocation)
+            3228:   2802(ptr) AccessChain 34(data) 57 2794
+            3229: 28(i64vec4) Load 3228
+            3230:2811(i64vec3) VectorShuffle 3229 3229 0 1 2
+            3231:2811(i64vec3) GroupNonUniformUMin 42 ExclusiveScan 3230
+            3232:   2802(ptr) AccessChain 34(data) 3227 2794
+            3233: 28(i64vec4) Load 3232
+            3234: 28(i64vec4) VectorShuffle 3233 3231 4 5 6 3
+                              Store 3232 3234
+            3235:      6(int) Load 8(invocation)
+            3236:   2802(ptr) AccessChain 34(data) 67 2794
+            3237: 28(i64vec4) Load 3236
+            3238: 28(i64vec4) GroupNonUniformUMin 42 ExclusiveScan 3237
+            3239:   2802(ptr) AccessChain 34(data) 3235 2794
+                              Store 3239 3238
+            3240:      6(int) Load 8(invocation)
+            3241:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3242: 27(int64_t) Load 3241
+            3243: 27(int64_t) GroupNonUniformUMax 42 ExclusiveScan 3242
+            3244:   2795(ptr) AccessChain 34(data) 3240 2794 38
+                              Store 3244 3243
+            3245:      6(int) Load 8(invocation)
+            3246:   2802(ptr) AccessChain 34(data) 46 2794
+            3247: 28(i64vec4) Load 3246
+            3248:2801(i64vec2) VectorShuffle 3247 3247 0 1
+            3249:2801(i64vec2) GroupNonUniformUMax 42 ExclusiveScan 3248
+            3250:   2802(ptr) AccessChain 34(data) 3245 2794
+            3251: 28(i64vec4) Load 3250
+            3252: 28(i64vec4) VectorShuffle 3251 3249 4 5 2 3
+                              Store 3250 3252
+            3253:      6(int) Load 8(invocation)
+            3254:   2802(ptr) AccessChain 34(data) 57 2794
+            3255: 28(i64vec4) Load 3254
+            3256:2811(i64vec3) VectorShuffle 3255 3255 0 1 2
+            3257:2811(i64vec3) GroupNonUniformUMax 42 ExclusiveScan 3256
+            3258:   2802(ptr) AccessChain 34(data) 3253 2794
+            3259: 28(i64vec4) Load 3258
+            3260: 28(i64vec4) VectorShuffle 3259 3257 4 5 6 3
+                              Store 3258 3260
+            3261:      6(int) Load 8(invocation)
+            3262:   2802(ptr) AccessChain 34(data) 67 2794
+            3263: 28(i64vec4) Load 3262
+            3264: 28(i64vec4) GroupNonUniformUMax 42 ExclusiveScan 3263
+            3265:   2802(ptr) AccessChain 34(data) 3261 2794
+                              Store 3265 3264
+            3266:      6(int) Load 8(invocation)
+            3267:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3268: 27(int64_t) Load 3267
+            3269: 27(int64_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3268
+            3270:   2795(ptr) AccessChain 34(data) 3266 2794 38
+                              Store 3270 3269
+            3271:      6(int) Load 8(invocation)
+            3272:   2802(ptr) AccessChain 34(data) 46 2794
+            3273: 28(i64vec4) Load 3272
+            3274:2801(i64vec2) VectorShuffle 3273 3273 0 1
+            3275:2801(i64vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3274
+            3276:   2802(ptr) AccessChain 34(data) 3271 2794
+            3277: 28(i64vec4) Load 3276
+            3278: 28(i64vec4) VectorShuffle 3277 3275 4 5 2 3
+                              Store 3276 3278
+            3279:      6(int) Load 8(invocation)
+            3280:   2802(ptr) AccessChain 34(data) 57 2794
+            3281: 28(i64vec4) Load 3280
+            3282:2811(i64vec3) VectorShuffle 3281 3281 0 1 2
+            3283:2811(i64vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3282
+            3284:   2802(ptr) AccessChain 34(data) 3279 2794
+            3285: 28(i64vec4) Load 3284
+            3286: 28(i64vec4) VectorShuffle 3285 3283 4 5 6 3
+                              Store 3284 3286
+            3287:      6(int) Load 8(invocation)
+            3288:   2802(ptr) AccessChain 34(data) 67 2794
+            3289: 28(i64vec4) Load 3288
+            3290: 28(i64vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3289
+            3291:   2802(ptr) AccessChain 34(data) 3287 2794
+                              Store 3291 3290
+            3292:      6(int) Load 8(invocation)
+            3293:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3294: 27(int64_t) Load 3293
+            3295: 27(int64_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 3294
+            3296:   2795(ptr) AccessChain 34(data) 3292 2794 38
+                              Store 3296 3295
+            3297:      6(int) Load 8(invocation)
+            3298:   2802(ptr) AccessChain 34(data) 46 2794
+            3299: 28(i64vec4) Load 3298
+            3300:2801(i64vec2) VectorShuffle 3299 3299 0 1
+            3301:2801(i64vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 3300
+            3302:   2802(ptr) AccessChain 34(data) 3297 2794
+            3303: 28(i64vec4) Load 3302
+            3304: 28(i64vec4) VectorShuffle 3303 3301 4 5 2 3
+                              Store 3302 3304
+            3305:      6(int) Load 8(invocation)
+            3306:   2802(ptr) AccessChain 34(data) 57 2794
+            3307: 28(i64vec4) Load 3306
+            3308:2811(i64vec3) VectorShuffle 3307 3307 0 1 2
+            3309:2811(i64vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 3308
+            3310:   2802(ptr) AccessChain 34(data) 3305 2794
+            3311: 28(i64vec4) Load 3310
+            3312: 28(i64vec4) VectorShuffle 3311 3309 4 5 6 3
+                              Store 3310 3312
+            3313:      6(int) Load 8(invocation)
+            3314:   2802(ptr) AccessChain 34(data) 67 2794
+            3315: 28(i64vec4) Load 3314
+            3316: 28(i64vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 3315
+            3317:   2802(ptr) AccessChain 34(data) 3313 2794
+                              Store 3317 3316
+            3318:      6(int) Load 8(invocation)
+            3319:   2795(ptr) AccessChain 34(data) 37 2794 38
+            3320: 27(int64_t) Load 3319
+            3321: 27(int64_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 3320
+            3322:   2795(ptr) AccessChain 34(data) 3318 2794 38
+                              Store 3322 3321
+            3323:      6(int) Load 8(invocation)
+            3324:   2802(ptr) AccessChain 34(data) 46 2794
+            3325: 28(i64vec4) Load 3324
+            3326:2801(i64vec2) VectorShuffle 3325 3325 0 1
+            3327:2801(i64vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 3326
+            3328:   2802(ptr) AccessChain 34(data) 3323 2794
+            3329: 28(i64vec4) Load 3328
+            3330: 28(i64vec4) VectorShuffle 3329 3327 4 5 2 3
+                              Store 3328 3330
+            3331:      6(int) Load 8(invocation)
+            3332:   2802(ptr) AccessChain 34(data) 57 2794
+            3333: 28(i64vec4) Load 3332
+            3334:2811(i64vec3) VectorShuffle 3333 3333 0 1 2
+            3335:2811(i64vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 3334
+            3336:   2802(ptr) AccessChain 34(data) 3331 2794
+            3337: 28(i64vec4) Load 3336
+            3338: 28(i64vec4) VectorShuffle 3337 3335 4 5 6 3
+                              Store 3336 3338
+            3339:      6(int) Load 8(invocation)
+            3340:   2802(ptr) AccessChain 34(data) 67 2794
+            3341: 28(i64vec4) Load 3340
+            3342: 28(i64vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 3341
+            3343:   2802(ptr) AccessChain 34(data) 3339 2794
+                              Store 3343 3342
+            3344:      6(int) Load 8(invocation)
+            3347:   3346(ptr) AccessChain 34(data) 37 3345 38
+            3348:29(float16_t) Load 3347
+            3349:29(float16_t) GroupNonUniformFAdd 42 Reduce 3348
+            3350:   3346(ptr) AccessChain 34(data) 3344 3345 38
+                              Store 3350 3349
+            3351:      6(int) Load 8(invocation)
+            3354:   3353(ptr) AccessChain 34(data) 46 3345
+            3355: 30(f16vec4) Load 3354
+            3356:3352(f16vec2) VectorShuffle 3355 3355 0 1
+            3357:3352(f16vec2) GroupNonUniformFAdd 42 Reduce 3356
+            3358:   3353(ptr) AccessChain 34(data) 3351 3345
+            3359: 30(f16vec4) Load 3358
+            3360: 30(f16vec4) VectorShuffle 3359 3357 4 5 2 3
+                              Store 3358 3360
+            3361:      6(int) Load 8(invocation)
+            3363:   3353(ptr) AccessChain 34(data) 57 3345
+            3364: 30(f16vec4) Load 3363
+            3365:3362(f16vec3) VectorShuffle 3364 3364 0 1 2
+            3366:3362(f16vec3) GroupNonUniformFAdd 42 Reduce 3365
+            3367:   3353(ptr) AccessChain 34(data) 3361 3345
+            3368: 30(f16vec4) Load 3367
+            3369: 30(f16vec4) VectorShuffle 3368 3366 4 5 6 3
+                              Store 3367 3369
+            3370:      6(int) Load 8(invocation)
+            3371:   3353(ptr) AccessChain 34(data) 67 3345
+            3372: 30(f16vec4) Load 3371
+            3373: 30(f16vec4) GroupNonUniformFAdd 42 Reduce 3372
+            3374:   3353(ptr) AccessChain 34(data) 3370 3345
+                              Store 3374 3373
+            3375:      6(int) Load 8(invocation)
+            3376:   3346(ptr) AccessChain 34(data) 37 3345 38
+            3377:29(float16_t) Load 3376
+            3378:29(float16_t) GroupNonUniformFMul 42 Reduce 3377
+            3379:   3346(ptr) AccessChain 34(data) 3375 3345 38
+                              Store 3379 3378
+            3380:      6(int) Load 8(invocation)
+            3381:   3353(ptr) AccessChain 34(data) 46 3345
+            3382: 30(f16vec4) Load 3381
+            3383:3352(f16vec2) VectorShuffle 3382 3382 0 1
+            3384:3352(f16vec2) GroupNonUniformFMul 42 Reduce 3383
+            3385:   3353(ptr) AccessChain 34(data) 3380 3345
+            3386: 30(f16vec4) Load 3385
+            3387: 30(f16vec4) VectorShuffle 3386 3384 4 5 2 3
+                              Store 3385 3387
+            3388:      6(int) Load 8(invocation)
+            3389:   3353(ptr) AccessChain 34(data) 57 3345
+            3390: 30(f16vec4) Load 3389
+            3391:3362(f16vec3) VectorShuffle 3390 3390 0 1 2
+            3392:3362(f16vec3) GroupNonUniformFMul 42 Reduce 3391
+            3393:   3353(ptr) AccessChain 34(data) 3388 3345
+            3394: 30(f16vec4) Load 3393
+            3395: 30(f16vec4) VectorShuffle 3394 3392 4 5 6 3
+                              Store 3393 3395
+            3396:      6(int) Load 8(invocation)
+            3397:   3353(ptr) AccessChain 34(data) 67 3345
+            3398: 30(f16vec4) Load 3397
+            3399: 30(f16vec4) GroupNonUniformFMul 42 Reduce 3398
+            3400:   3353(ptr) AccessChain 34(data) 3396 3345
+                              Store 3400 3399
+            3401:      6(int) Load 8(invocation)
+            3402:   3346(ptr) AccessChain 34(data) 37 3345 38
+            3403:29(float16_t) Load 3402
+            3404:29(float16_t) GroupNonUniformFMin 42 Reduce 3403
+            3405:   3346(ptr) AccessChain 34(data) 3401 3345 38
+                              Store 3405 3404
+            3406:      6(int) Load 8(invocation)
+            3407:   3353(ptr) AccessChain 34(data) 46 3345
+            3408: 30(f16vec4) Load 3407
+            3409:3352(f16vec2) VectorShuffle 3408 3408 0 1
+            3410:3352(f16vec2) GroupNonUniformFMin 42 Reduce 3409
+            3411:   3353(ptr) AccessChain 34(data) 3406 3345
+            3412: 30(f16vec4) Load 3411
+            3413: 30(f16vec4) VectorShuffle 3412 3410 4 5 2 3
+                              Store 3411 3413
+            3414:      6(int) Load 8(invocation)
+            3415:   3353(ptr) AccessChain 34(data) 57 3345
+            3416: 30(f16vec4) Load 3415
+            3417:3362(f16vec3) VectorShuffle 3416 3416 0 1 2
+            3418:3362(f16vec3) GroupNonUniformFMin 42 Reduce 3417
+            3419:   3353(ptr) AccessChain 34(data) 3414 3345
+            3420: 30(f16vec4) Load 3419
+            3421: 30(f16vec4) VectorShuffle 3420 3418 4 5 6 3
+                              Store 3419 3421
+            3422:      6(int) Load 8(invocation)
+            3423:   3353(ptr) AccessChain 34(data) 67 3345
+            3424: 30(f16vec4) Load 3423
+            3425: 30(f16vec4) GroupNonUniformFMin 42 Reduce 3424
+            3426:   3353(ptr) AccessChain 34(data) 3422 3345
+                              Store 3426 3425
+            3427:      6(int) Load 8(invocation)
+            3428:   3346(ptr) AccessChain 34(data) 37 3345 38
+            3429:29(float16_t) Load 3428
+            3430:29(float16_t) GroupNonUniformFMax 42 Reduce 3429
+            3431:   3346(ptr) AccessChain 34(data) 3427 3345 38
+                              Store 3431 3430
+            3432:      6(int) Load 8(invocation)
+            3433:   3353(ptr) AccessChain 34(data) 46 3345
+            3434: 30(f16vec4) Load 3433
+            3435:3352(f16vec2) VectorShuffle 3434 3434 0 1
+            3436:3352(f16vec2) GroupNonUniformFMax 42 Reduce 3435
+            3437:   3353(ptr) AccessChain 34(data) 3432 3345
+            3438: 30(f16vec4) Load 3437
+            3439: 30(f16vec4) VectorShuffle 3438 3436 4 5 2 3
+                              Store 3437 3439
+            3440:      6(int) Load 8(invocation)
+            3441:   3353(ptr) AccessChain 34(data) 57 3345
+            3442: 30(f16vec4) Load 3441
+            3443:3362(f16vec3) VectorShuffle 3442 3442 0 1 2
+            3444:3362(f16vec3) GroupNonUniformFMax 42 Reduce 3443
+            3445:   3353(ptr) AccessChain 34(data) 3440 3345
+            3446: 30(f16vec4) Load 3445
+            3447: 30(f16vec4) VectorShuffle 3446 3444 4 5 6 3
+                              Store 3445 3447
+            3448:      6(int) Load 8(invocation)
+            3449:   3353(ptr) AccessChain 34(data) 67 3345
+            3450: 30(f16vec4) Load 3449
+            3451: 30(f16vec4) GroupNonUniformFMax 42 Reduce 3450
+            3452:   3353(ptr) AccessChain 34(data) 3448 3345
+                              Store 3452 3451
+            3453:      6(int) Load 8(invocation)
+            3454:   3346(ptr) AccessChain 34(data) 37 3345 38
+            3455:29(float16_t) Load 3454
+            3456:29(float16_t) GroupNonUniformFAdd 42 InclusiveScan 3455
+            3457:   3346(ptr) AccessChain 34(data) 3453 3345 38
+                              Store 3457 3456
+            3458:      6(int) Load 8(invocation)
+            3459:   3353(ptr) AccessChain 34(data) 46 3345
+            3460: 30(f16vec4) Load 3459
+            3461:3352(f16vec2) VectorShuffle 3460 3460 0 1
+            3462:3352(f16vec2) GroupNonUniformFAdd 42 InclusiveScan 3461
+            3463:   3353(ptr) AccessChain 34(data) 3458 3345
+            3464: 30(f16vec4) Load 3463
+            3465: 30(f16vec4) VectorShuffle 3464 3462 4 5 2 3
+                              Store 3463 3465
+            3466:      6(int) Load 8(invocation)
+            3467:   3353(ptr) AccessChain 34(data) 57 3345
+            3468: 30(f16vec4) Load 3467
+            3469:3362(f16vec3) VectorShuffle 3468 3468 0 1 2
+            3470:3362(f16vec3) GroupNonUniformFAdd 42 InclusiveScan 3469
+            3471:   3353(ptr) AccessChain 34(data) 3466 3345
+            3472: 30(f16vec4) Load 3471
+            3473: 30(f16vec4) VectorShuffle 3472 3470 4 5 6 3
+                              Store 3471 3473
+            3474:      6(int) Load 8(invocation)
+            3475:   3353(ptr) AccessChain 34(data) 67 3345
+            3476: 30(f16vec4) Load 3475
+            3477: 30(f16vec4) GroupNonUniformFAdd 42 InclusiveScan 3476
+            3478:   3353(ptr) AccessChain 34(data) 3474 3345
+                              Store 3478 3477
+            3479:      6(int) Load 8(invocation)
+            3480:   3346(ptr) AccessChain 34(data) 37 3345 38
+            3481:29(float16_t) Load 3480
+            3482:29(float16_t) GroupNonUniformFMul 42 InclusiveScan 3481
+            3483:   3346(ptr) AccessChain 34(data) 3479 3345 38
+                              Store 3483 3482
+            3484:      6(int) Load 8(invocation)
+            3485:   3353(ptr) AccessChain 34(data) 46 3345
+            3486: 30(f16vec4) Load 3485
+            3487:3352(f16vec2) VectorShuffle 3486 3486 0 1
+            3488:3352(f16vec2) GroupNonUniformFMul 42 InclusiveScan 3487
+            3489:   3353(ptr) AccessChain 34(data) 3484 3345
+            3490: 30(f16vec4) Load 3489
+            3491: 30(f16vec4) VectorShuffle 3490 3488 4 5 2 3
+                              Store 3489 3491
+            3492:      6(int) Load 8(invocation)
+            3493:   3353(ptr) AccessChain 34(data) 57 3345
+            3494: 30(f16vec4) Load 3493
+            3495:3362(f16vec3) VectorShuffle 3494 3494 0 1 2
+            3496:3362(f16vec3) GroupNonUniformFMul 42 InclusiveScan 3495
+            3497:   3353(ptr) AccessChain 34(data) 3492 3345
+            3498: 30(f16vec4) Load 3497
+            3499: 30(f16vec4) VectorShuffle 3498 3496 4 5 6 3
+                              Store 3497 3499
+            3500:      6(int) Load 8(invocation)
+            3501:   3353(ptr) AccessChain 34(data) 67 3345
+            3502: 30(f16vec4) Load 3501
+            3503: 30(f16vec4) GroupNonUniformFMul 42 InclusiveScan 3502
+            3504:   3353(ptr) AccessChain 34(data) 3500 3345
+                              Store 3504 3503
+            3505:      6(int) Load 8(invocation)
+            3506:   3346(ptr) AccessChain 34(data) 37 3345 38
+            3507:29(float16_t) Load 3506
+            3508:29(float16_t) GroupNonUniformFMin 42 InclusiveScan 3507
+            3509:   3346(ptr) AccessChain 34(data) 3505 3345 38
+                              Store 3509 3508
+            3510:      6(int) Load 8(invocation)
+            3511:   3353(ptr) AccessChain 34(data) 46 3345
+            3512: 30(f16vec4) Load 3511
+            3513:3352(f16vec2) VectorShuffle 3512 3512 0 1
+            3514:3352(f16vec2) GroupNonUniformFMin 42 InclusiveScan 3513
+            3515:   3353(ptr) AccessChain 34(data) 3510 3345
+            3516: 30(f16vec4) Load 3515
+            3517: 30(f16vec4) VectorShuffle 3516 3514 4 5 2 3
+                              Store 3515 3517
+            3518:      6(int) Load 8(invocation)
+            3519:   3353(ptr) AccessChain 34(data) 57 3345
+            3520: 30(f16vec4) Load 3519
+            3521:3362(f16vec3) VectorShuffle 3520 3520 0 1 2
+            3522:3362(f16vec3) GroupNonUniformFMin 42 InclusiveScan 3521
+            3523:   3353(ptr) AccessChain 34(data) 3518 3345
+            3524: 30(f16vec4) Load 3523
+            3525: 30(f16vec4) VectorShuffle 3524 3522 4 5 6 3
+                              Store 3523 3525
+            3526:      6(int) Load 8(invocation)
+            3527:   3353(ptr) AccessChain 34(data) 67 3345
+            3528: 30(f16vec4) Load 3527
+            3529: 30(f16vec4) GroupNonUniformFMin 42 InclusiveScan 3528
+            3530:   3353(ptr) AccessChain 34(data) 3526 3345
+                              Store 3530 3529
+            3531:      6(int) Load 8(invocation)
+            3532:   3346(ptr) AccessChain 34(data) 37 3345 38
+            3533:29(float16_t) Load 3532
+            3534:29(float16_t) GroupNonUniformFMax 42 InclusiveScan 3533
+            3535:   3346(ptr) AccessChain 34(data) 3531 3345 38
+                              Store 3535 3534
+            3536:      6(int) Load 8(invocation)
+            3537:   3353(ptr) AccessChain 34(data) 46 3345
+            3538: 30(f16vec4) Load 3537
+            3539:3352(f16vec2) VectorShuffle 3538 3538 0 1
+            3540:3352(f16vec2) GroupNonUniformFMax 42 InclusiveScan 3539
+            3541:   3353(ptr) AccessChain 34(data) 3536 3345
+            3542: 30(f16vec4) Load 3541
+            3543: 30(f16vec4) VectorShuffle 3542 3540 4 5 2 3
+                              Store 3541 3543
+            3544:      6(int) Load 8(invocation)
+            3545:   3353(ptr) AccessChain 34(data) 57 3345
+            3546: 30(f16vec4) Load 3545
+            3547:3362(f16vec3) VectorShuffle 3546 3546 0 1 2
+            3548:3362(f16vec3) GroupNonUniformFMax 42 InclusiveScan 3547
+            3549:   3353(ptr) AccessChain 34(data) 3544 3345
+            3550: 30(f16vec4) Load 3549
+            3551: 30(f16vec4) VectorShuffle 3550 3548 4 5 6 3
+                              Store 3549 3551
+            3552:      6(int) Load 8(invocation)
+            3553:   3353(ptr) AccessChain 34(data) 67 3345
+            3554: 30(f16vec4) Load 3553
+            3555: 30(f16vec4) GroupNonUniformFMax 42 InclusiveScan 3554
+            3556:   3353(ptr) AccessChain 34(data) 3552 3345
+                              Store 3556 3555
+            3557:      6(int) Load 8(invocation)
+            3558:   3346(ptr) AccessChain 34(data) 37 3345 38
+            3559:29(float16_t) Load 3558
+            3560:29(float16_t) GroupNonUniformFAdd 42 ExclusiveScan 3559
+            3561:   3346(ptr) AccessChain 34(data) 3557 3345 38
+                              Store 3561 3560
+            3562:      6(int) Load 8(invocation)
+            3563:   3353(ptr) AccessChain 34(data) 46 3345
+            3564: 30(f16vec4) Load 3563
+            3565:3352(f16vec2) VectorShuffle 3564 3564 0 1
+            3566:3352(f16vec2) GroupNonUniformFAdd 42 ExclusiveScan 3565
+            3567:   3353(ptr) AccessChain 34(data) 3562 3345
+            3568: 30(f16vec4) Load 3567
+            3569: 30(f16vec4) VectorShuffle 3568 3566 4 5 2 3
+                              Store 3567 3569
+            3570:      6(int) Load 8(invocation)
+            3571:   3353(ptr) AccessChain 34(data) 57 3345
+            3572: 30(f16vec4) Load 3571
+            3573:3362(f16vec3) VectorShuffle 3572 3572 0 1 2
+            3574:3362(f16vec3) GroupNonUniformFAdd 42 ExclusiveScan 3573
+            3575:   3353(ptr) AccessChain 34(data) 3570 3345
+            3576: 30(f16vec4) Load 3575
+            3577: 30(f16vec4) VectorShuffle 3576 3574 4 5 6 3
+                              Store 3575 3577
+            3578:      6(int) Load 8(invocation)
+            3579:   3353(ptr) AccessChain 34(data) 67 3345
+            3580: 30(f16vec4) Load 3579
+            3581: 30(f16vec4) GroupNonUniformFAdd 42 ExclusiveScan 3580
+            3582:   3353(ptr) AccessChain 34(data) 3578 3345
+                              Store 3582 3581
+            3583:      6(int) Load 8(invocation)
+            3584:   3346(ptr) AccessChain 34(data) 37 3345 38
+            3585:29(float16_t) Load 3584
+            3586:29(float16_t) GroupNonUniformFMul 42 ExclusiveScan 3585
+            3587:   3346(ptr) AccessChain 34(data) 3583 3345 38
+                              Store 3587 3586
+            3588:      6(int) Load 8(invocation)
+            3589:   3353(ptr) AccessChain 34(data) 46 3345
+            3590: 30(f16vec4) Load 3589
+            3591:3352(f16vec2) VectorShuffle 3590 3590 0 1
+            3592:3352(f16vec2) GroupNonUniformFMul 42 ExclusiveScan 3591
+            3593:   3353(ptr) AccessChain 34(data) 3588 3345
+            3594: 30(f16vec4) Load 3593
+            3595: 30(f16vec4) VectorShuffle 3594 3592 4 5 2 3
+                              Store 3593 3595
+            3596:      6(int) Load 8(invocation)
+            3597:   3353(ptr) AccessChain 34(data) 57 3345
+            3598: 30(f16vec4) Load 3597
+            3599:3362(f16vec3) VectorShuffle 3598 3598 0 1 2
+            3600:3362(f16vec3) GroupNonUniformFMul 42 ExclusiveScan 3599
+            3601:   3353(ptr) AccessChain 34(data) 3596 3345
+            3602: 30(f16vec4) Load 3601
+            3603: 30(f16vec4) VectorShuffle 3602 3600 4 5 6 3
+                              Store 3601 3603
+            3604:      6(int) Load 8(invocation)
+            3605:   3353(ptr) AccessChain 34(data) 67 3345
+            3606: 30(f16vec4) Load 3605
+            3607: 30(f16vec4) GroupNonUniformFMul 42 ExclusiveScan 3606
+            3608:   3353(ptr) AccessChain 34(data) 3604 3345
+                              Store 3608 3607
+            3609:      6(int) Load 8(invocation)
+            3610:   3346(ptr) AccessChain 34(data) 37 3345 38
+            3611:29(float16_t) Load 3610
+            3612:29(float16_t) GroupNonUniformFMin 42 ExclusiveScan 3611
+            3613:   3346(ptr) AccessChain 34(data) 3609 3345 38
+                              Store 3613 3612
+            3614:      6(int) Load 8(invocation)
+            3615:   3353(ptr) AccessChain 34(data) 46 3345
+            3616: 30(f16vec4) Load 3615
+            3617:3352(f16vec2) VectorShuffle 3616 3616 0 1
+            3618:3352(f16vec2) GroupNonUniformFMin 42 ExclusiveScan 3617
+            3619:   3353(ptr) AccessChain 34(data) 3614 3345
+            3620: 30(f16vec4) Load 3619
+            3621: 30(f16vec4) VectorShuffle 3620 3618 4 5 2 3
+                              Store 3619 3621
+            3622:      6(int) Load 8(invocation)
+            3623:   3353(ptr) AccessChain 34(data) 57 3345
+            3624: 30(f16vec4) Load 3623
+            3625:3362(f16vec3) VectorShuffle 3624 3624 0 1 2
+            3626:3362(f16vec3) GroupNonUniformFMin 42 ExclusiveScan 3625
+            3627:   3353(ptr) AccessChain 34(data) 3622 3345
+            3628: 30(f16vec4) Load 3627
+            3629: 30(f16vec4) VectorShuffle 3628 3626 4 5 6 3
+                              Store 3627 3629
+            3630:      6(int) Load 8(invocation)
+            3631:   3353(ptr) AccessChain 34(data) 67 3345
+            3632: 30(f16vec4) Load 3631
+            3633: 30(f16vec4) GroupNonUniformFMin 42 ExclusiveScan 3632
+            3634:   3353(ptr) AccessChain 34(data) 3630 3345
+                              Store 3634 3633
+            3635:      6(int) Load 8(invocation)
+            3636:   3346(ptr) AccessChain 34(data) 37 3345 38
+            3637:29(float16_t) Load 3636
+            3638:29(float16_t) GroupNonUniformFMax 42 ExclusiveScan 3637
+            3639:   3346(ptr) AccessChain 34(data) 3635 3345 38
+                              Store 3639 3638
+            3640:      6(int) Load 8(invocation)
+            3641:   3353(ptr) AccessChain 34(data) 46 3345
+            3642: 30(f16vec4) Load 3641
+            3643:3352(f16vec2) VectorShuffle 3642 3642 0 1
+            3644:3352(f16vec2) GroupNonUniformFMax 42 ExclusiveScan 3643
+            3645:   3353(ptr) AccessChain 34(data) 3640 3345
+            3646: 30(f16vec4) Load 3645
+            3647: 30(f16vec4) VectorShuffle 3646 3644 4 5 2 3
+                              Store 3645 3647
+            3648:      6(int) Load 8(invocation)
+            3649:   3353(ptr) AccessChain 34(data) 57 3345
+            3650: 30(f16vec4) Load 3649
+            3651:3362(f16vec3) VectorShuffle 3650 3650 0 1 2
+            3652:3362(f16vec3) GroupNonUniformFMax 42 ExclusiveScan 3651
+            3653:   3353(ptr) AccessChain 34(data) 3648 3345
+            3654: 30(f16vec4) Load 3653
+            3655: 30(f16vec4) VectorShuffle 3654 3652 4 5 6 3
+                              Store 3653 3655
+            3656:      6(int) Load 8(invocation)
+            3657:   3353(ptr) AccessChain 34(data) 67 3345
+            3658: 30(f16vec4) Load 3657
+            3659: 30(f16vec4) GroupNonUniformFMax 42 ExclusiveScan 3658
+            3660:   3353(ptr) AccessChain 34(data) 3656 3345
+                              Store 3660 3659
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupExtendedTypesArithmeticNeg.comp.out b/Test/baseResults/spv.subgroupExtendedTypesArithmeticNeg.comp.out
new file mode 100644
index 0000000..4750559
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesArithmeticNeg.comp.out
@@ -0,0 +1,557 @@
+spv.subgroupExtendedTypesArithmeticNeg.comp
+ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:43: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:46: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:47: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:48: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:51: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:52: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:53: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:56: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:57: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:58: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:61: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:62: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:63: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:66: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:67: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:68: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:71: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:72: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:73: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:76: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:77: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:78: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:81: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:82: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:83: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:86: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:87: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:88: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:89: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:91: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:92: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:93: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:94: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:96: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:97: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:98: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:99: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:101: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:102: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:103: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:104: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:106: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:107: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:108: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:109: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:111: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:112: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:113: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:114: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:116: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:117: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:118: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:119: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:121: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:122: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:123: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:124: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:126: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:127: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:128: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:129: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:131: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:132: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:133: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:134: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:136: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:137: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:138: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:139: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:141: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:142: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:143: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:144: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:146: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:147: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:148: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:149: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:151: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:152: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:153: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:154: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:156: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:157: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:158: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:159: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:161: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:162: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:163: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:164: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:166: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:167: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:168: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:169: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:171: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:172: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:173: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:174: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:176: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:177: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:178: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:179: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:181: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:182: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:183: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:184: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:186: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:187: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:188: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:189: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:191: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:192: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:193: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:194: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:196: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:197: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:198: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:199: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:201: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:202: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:203: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:204: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:206: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:207: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:208: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:209: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:211: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:212: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:213: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:214: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:216: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:217: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:218: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:219: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:221: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:222: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:223: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:224: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:226: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:227: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:228: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:229: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:231: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:232: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:233: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:234: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:236: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:237: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:238: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:239: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:241: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:242: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:243: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:244: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:246: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:247: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:248: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:249: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:251: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:252: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:253: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:254: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:256: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:257: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:258: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:259: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:261: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:262: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:263: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:264: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:266: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:267: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:268: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:269: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:271: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:272: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:273: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:274: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:276: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:277: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:278: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:279: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:281: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:282: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:283: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:284: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:286: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:287: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:288: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:289: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:291: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:292: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:293: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:294: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:296: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:297: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:298: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:299: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:301: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:302: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:303: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:304: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:306: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:307: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:308: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:309: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:311: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:312: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:313: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:314: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:316: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:317: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:318: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:319: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:321: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:322: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:323: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:324: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:326: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:327: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:328: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:329: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:331: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:332: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:333: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:334: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:336: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:337: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:338: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:339: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:341: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:342: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:343: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:344: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:346: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:347: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:348: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:349: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:351: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:352: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:353: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:354: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:356: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:357: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:358: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:359: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:361: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:362: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:363: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:364: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:366: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:367: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:368: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:369: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:371: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:372: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:373: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:374: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:376: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:377: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:378: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:379: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:381: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:382: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:383: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:384: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:386: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:387: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:388: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:389: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:391: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:392: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:393: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:394: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:396: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:397: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:398: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:399: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:401: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:402: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:403: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:404: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:406: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:407: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:408: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:409: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:411: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:412: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:413: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:414: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:416: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:417: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:418: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:419: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:421: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:422: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:423: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:424: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:426: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:427: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:428: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:429: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:431: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:432: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:433: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:434: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:436: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:437: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:438: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:439: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:441: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:442: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:443: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:444: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:446: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:447: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:448: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:449: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:451: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:452: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:453: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:454: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:456: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:457: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:458: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:459: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:461: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:462: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:463: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:464: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:466: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:467: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:468: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:469: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:471: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:472: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:473: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:474: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:476: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:477: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:478: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:479: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:481: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:482: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:483: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:484: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:486: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:487: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:488: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:489: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:491: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:492: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:493: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:494: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:496: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:497: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:498: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:499: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:501: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:502: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:503: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:504: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:506: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:507: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:508: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:509: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:511: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:512: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:513: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:514: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:516: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:517: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:518: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:519: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:521: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:522: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:523: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:524: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:526: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:527: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:528: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:529: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:531: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:532: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:533: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:534: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:536: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:537: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:538: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:539: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:541: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:542: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:543: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:544: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:546: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:547: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:548: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:549: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:551: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:552: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:553: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:554: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:556: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:557: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:558: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:559: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:561: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:562: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:563: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:564: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:566: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:567: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:568: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:569: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:571: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:572: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:573: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:574: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:576: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:577: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:578: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:579: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:581: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:582: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:583: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:584: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:586: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:587: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:588: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:589: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:591: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:592: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:593: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:594: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:596: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:597: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:598: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:599: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:601: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:602: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:603: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:604: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:606: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:607: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:608: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:609: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:611: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:612: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:613: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:614: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:616: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:617: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:618: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:619: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:621: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:622: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:623: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:624: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:626: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:627: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:628: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:629: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:631: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:632: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:633: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:634: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:636: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:637: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:638: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:639: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:641: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:642: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:643: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:644: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:646: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:647: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:648: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:649: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:651: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:652: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:653: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:654: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:656: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:657: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:658: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:659: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:661: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:662: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:663: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:664: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:666: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:667: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:668: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:669: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:671: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:672: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:673: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:674: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:676: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:677: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:678: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:679: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:681: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:682: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:683: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:684: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:686: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:687: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:688: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:689: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:691: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:692: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:693: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:694: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:696: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:697: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:698: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:699: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:701: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:702: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:703: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:704: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:706: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:707: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:708: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:709: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:711: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:712: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:713: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:714: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 552 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
new file mode 100644
index 0000000..4e1b2dc
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
@@ -0,0 +1,560 @@
+spv.subgroupExtendedTypesBallot.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 441
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformBallot
+                              Capability StorageUniformBufferBlock16
+                              Capability StorageBuffer8BitAccess
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_float16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int64"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int8"
+                              SourceExtension  "GL_KHR_shader_subgroup_ballot"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 31  "Buffers"
+                              MemberName 31(Buffers) 0  "i8"
+                              MemberName 31(Buffers) 1  "u8"
+                              MemberName 31(Buffers) 2  "i16"
+                              MemberName 31(Buffers) 3  "u16"
+                              MemberName 31(Buffers) 4  "i64"
+                              MemberName 31(Buffers) 5  "u64"
+                              MemberName 31(Buffers) 6  "f16"
+                              Name 34  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 31(Buffers) 0 Offset 0
+                              MemberDecorate 31(Buffers) 1 Offset 4
+                              MemberDecorate 31(Buffers) 2 Offset 8
+                              MemberDecorate 31(Buffers) 3 Offset 16
+                              MemberDecorate 31(Buffers) 4 Offset 32
+                              MemberDecorate 31(Buffers) 5 Offset 64
+                              MemberDecorate 31(Buffers) 6 Offset 96
+                              Decorate 31(Buffers) Block
+                              Decorate 34(data) DescriptorSet 0
+                              Decorate 34(data) Binding 0
+                              Decorate 440 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeInt 8 1
+              18:             TypeVector 17(int8_t) 4
+              19:             TypeInt 8 0
+              20:             TypeVector 19(int8_t) 4
+              21:             TypeInt 16 1
+              22:             TypeVector 21(int16_t) 4
+              23:             TypeInt 16 0
+              24:             TypeVector 23(int16_t) 4
+              25:             TypeInt 64 1
+              26:             TypeVector 25(int64_t) 4
+              27:             TypeInt 64 0
+              28:             TypeVector 27(int64_t) 4
+              29:             TypeFloat 16
+              30:             TypeVector 29(float16_t) 4
+     31(Buffers):             TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+              32:             TypeArray 31(Buffers) 15
+              33:             TypePointer StorageBuffer 32
+        34(data):     33(ptr) Variable StorageBuffer
+              36:             TypeInt 32 1
+              37:     36(int) Constant 0
+              38:      6(int) Constant 0
+              39:             TypePointer StorageBuffer 17(int8_t)
+              42:      6(int) Constant 3
+              46:     36(int) Constant 1
+              47:             TypeVector 17(int8_t) 2
+              48:             TypePointer StorageBuffer 18(i8vec4)
+              57:     36(int) Constant 2
+              58:             TypeVector 17(int8_t) 3
+              67:     36(int) Constant 3
+              99:             TypePointer StorageBuffer 19(int8_t)
+             105:             TypeVector 19(int8_t) 2
+             106:             TypePointer StorageBuffer 20(i8vec4)
+             115:             TypeVector 19(int8_t) 3
+             155:             TypePointer StorageBuffer 21(int16_t)
+             161:             TypeVector 21(int16_t) 2
+             162:             TypePointer StorageBuffer 22(i16vec4)
+             171:             TypeVector 21(int16_t) 3
+             211:             TypePointer StorageBuffer 23(int16_t)
+             217:             TypeVector 23(int16_t) 2
+             218:             TypePointer StorageBuffer 24(i16vec4)
+             227:             TypeVector 23(int16_t) 3
+             267:     36(int) Constant 4
+             268:             TypePointer StorageBuffer 25(int64_t)
+             274:             TypeVector 25(int64_t) 2
+             275:             TypePointer StorageBuffer 26(i64vec4)
+             284:             TypeVector 25(int64_t) 3
+             324:     36(int) Constant 5
+             325:             TypePointer StorageBuffer 27(int64_t)
+             331:             TypeVector 27(int64_t) 2
+             332:             TypePointer StorageBuffer 28(i64vec4)
+             341:             TypeVector 27(int64_t) 3
+             381:     36(int) Constant 6
+             382:             TypePointer StorageBuffer 29(float16_t)
+             388:             TypeVector 29(float16_t) 2
+             389:             TypePointer StorageBuffer 30(f16vec4)
+             398:             TypeVector 29(float16_t) 3
+             437:             TypeVector 6(int) 3
+             438:      6(int) Constant 8
+             439:      6(int) Constant 1
+             440:  437(ivec3) ConstantComposite 438 439 439
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              35:      6(int) Load 8(invocation)
+              40:     39(ptr) AccessChain 34(data) 37 37 38
+              41:  17(int8_t) Load 40
+              43:  17(int8_t) GroupNonUniformBroadcast 42 41 42
+              44:     39(ptr) AccessChain 34(data) 35 37 38
+                              Store 44 43
+              45:      6(int) Load 8(invocation)
+              49:     48(ptr) AccessChain 34(data) 46 37
+              50:  18(i8vec4) Load 49
+              51:  47(i8vec2) VectorShuffle 50 50 0 1
+              52:  47(i8vec2) GroupNonUniformBroadcast 42 51 42
+              53:     48(ptr) AccessChain 34(data) 45 37
+              54:  18(i8vec4) Load 53
+              55:  18(i8vec4) VectorShuffle 54 52 4 5 2 3
+                              Store 53 55
+              56:      6(int) Load 8(invocation)
+              59:     48(ptr) AccessChain 34(data) 57 37
+              60:  18(i8vec4) Load 59
+              61:  58(i8vec3) VectorShuffle 60 60 0 1 2
+              62:  58(i8vec3) GroupNonUniformBroadcast 42 61 42
+              63:     48(ptr) AccessChain 34(data) 56 37
+              64:  18(i8vec4) Load 63
+              65:  18(i8vec4) VectorShuffle 64 62 4 5 6 3
+                              Store 63 65
+              66:      6(int) Load 8(invocation)
+              68:     48(ptr) AccessChain 34(data) 67 37
+              69:  18(i8vec4) Load 68
+              70:  18(i8vec4) GroupNonUniformBroadcast 42 69 42
+              71:     48(ptr) AccessChain 34(data) 66 37
+                              Store 71 70
+              72:      6(int) Load 8(invocation)
+              73:     39(ptr) AccessChain 34(data) 37 37 38
+              74:  17(int8_t) Load 73
+              75:  17(int8_t) GroupNonUniformBroadcastFirst 42 74
+              76:     39(ptr) AccessChain 34(data) 72 37 38
+                              Store 76 75
+              77:      6(int) Load 8(invocation)
+              78:     48(ptr) AccessChain 34(data) 46 37
+              79:  18(i8vec4) Load 78
+              80:  47(i8vec2) VectorShuffle 79 79 0 1
+              81:  47(i8vec2) GroupNonUniformBroadcastFirst 42 80
+              82:     48(ptr) AccessChain 34(data) 77 37
+              83:  18(i8vec4) Load 82
+              84:  18(i8vec4) VectorShuffle 83 81 4 5 2 3
+                              Store 82 84
+              85:      6(int) Load 8(invocation)
+              86:     48(ptr) AccessChain 34(data) 57 37
+              87:  18(i8vec4) Load 86
+              88:  58(i8vec3) VectorShuffle 87 87 0 1 2
+              89:  58(i8vec3) GroupNonUniformBroadcastFirst 42 88
+              90:     48(ptr) AccessChain 34(data) 85 37
+              91:  18(i8vec4) Load 90
+              92:  18(i8vec4) VectorShuffle 91 89 4 5 6 3
+                              Store 90 92
+              93:      6(int) Load 8(invocation)
+              94:     48(ptr) AccessChain 34(data) 67 37
+              95:  18(i8vec4) Load 94
+              96:  18(i8vec4) GroupNonUniformBroadcastFirst 42 95
+              97:     48(ptr) AccessChain 34(data) 93 37
+                              Store 97 96
+              98:      6(int) Load 8(invocation)
+             100:     99(ptr) AccessChain 34(data) 37 46 38
+             101:  19(int8_t) Load 100
+             102:  19(int8_t) GroupNonUniformBroadcast 42 101 42
+             103:     99(ptr) AccessChain 34(data) 98 46 38
+                              Store 103 102
+             104:      6(int) Load 8(invocation)
+             107:    106(ptr) AccessChain 34(data) 46 46
+             108:  20(i8vec4) Load 107
+             109: 105(i8vec2) VectorShuffle 108 108 0 1
+             110: 105(i8vec2) GroupNonUniformBroadcast 42 109 42
+             111:    106(ptr) AccessChain 34(data) 104 46
+             112:  20(i8vec4) Load 111
+             113:  20(i8vec4) VectorShuffle 112 110 4 5 2 3
+                              Store 111 113
+             114:      6(int) Load 8(invocation)
+             116:    106(ptr) AccessChain 34(data) 57 46
+             117:  20(i8vec4) Load 116
+             118: 115(i8vec3) VectorShuffle 117 117 0 1 2
+             119: 115(i8vec3) GroupNonUniformBroadcast 42 118 42
+             120:    106(ptr) AccessChain 34(data) 114 46
+             121:  20(i8vec4) Load 120
+             122:  20(i8vec4) VectorShuffle 121 119 4 5 6 3
+                              Store 120 122
+             123:      6(int) Load 8(invocation)
+             124:    106(ptr) AccessChain 34(data) 67 46
+             125:  20(i8vec4) Load 124
+             126:  20(i8vec4) GroupNonUniformBroadcast 42 125 42
+             127:    106(ptr) AccessChain 34(data) 123 46
+                              Store 127 126
+             128:      6(int) Load 8(invocation)
+             129:     99(ptr) AccessChain 34(data) 37 46 38
+             130:  19(int8_t) Load 129
+             131:  19(int8_t) GroupNonUniformBroadcastFirst 42 130
+             132:     99(ptr) AccessChain 34(data) 128 46 38
+                              Store 132 131
+             133:      6(int) Load 8(invocation)
+             134:    106(ptr) AccessChain 34(data) 46 46
+             135:  20(i8vec4) Load 134
+             136: 105(i8vec2) VectorShuffle 135 135 0 1
+             137: 105(i8vec2) GroupNonUniformBroadcastFirst 42 136
+             138:    106(ptr) AccessChain 34(data) 133 46
+             139:  20(i8vec4) Load 138
+             140:  20(i8vec4) VectorShuffle 139 137 4 5 2 3
+                              Store 138 140
+             141:      6(int) Load 8(invocation)
+             142:    106(ptr) AccessChain 34(data) 57 46
+             143:  20(i8vec4) Load 142
+             144: 115(i8vec3) VectorShuffle 143 143 0 1 2
+             145: 115(i8vec3) GroupNonUniformBroadcastFirst 42 144
+             146:    106(ptr) AccessChain 34(data) 141 46
+             147:  20(i8vec4) Load 146
+             148:  20(i8vec4) VectorShuffle 147 145 4 5 6 3
+                              Store 146 148
+             149:      6(int) Load 8(invocation)
+             150:    106(ptr) AccessChain 34(data) 67 46
+             151:  20(i8vec4) Load 150
+             152:  20(i8vec4) GroupNonUniformBroadcastFirst 42 151
+             153:    106(ptr) AccessChain 34(data) 149 46
+                              Store 153 152
+             154:      6(int) Load 8(invocation)
+             156:    155(ptr) AccessChain 34(data) 37 57 38
+             157: 21(int16_t) Load 156
+             158: 21(int16_t) GroupNonUniformBroadcast 42 157 42
+             159:    155(ptr) AccessChain 34(data) 154 57 38
+                              Store 159 158
+             160:      6(int) Load 8(invocation)
+             163:    162(ptr) AccessChain 34(data) 46 57
+             164: 22(i16vec4) Load 163
+             165:161(i16vec2) VectorShuffle 164 164 0 1
+             166:161(i16vec2) GroupNonUniformBroadcast 42 165 42
+             167:    162(ptr) AccessChain 34(data) 160 57
+             168: 22(i16vec4) Load 167
+             169: 22(i16vec4) VectorShuffle 168 166 4 5 2 3
+                              Store 167 169
+             170:      6(int) Load 8(invocation)
+             172:    162(ptr) AccessChain 34(data) 57 57
+             173: 22(i16vec4) Load 172
+             174:171(i16vec3) VectorShuffle 173 173 0 1 2
+             175:171(i16vec3) GroupNonUniformBroadcast 42 174 42
+             176:    162(ptr) AccessChain 34(data) 170 57
+             177: 22(i16vec4) Load 176
+             178: 22(i16vec4) VectorShuffle 177 175 4 5 6 3
+                              Store 176 178
+             179:      6(int) Load 8(invocation)
+             180:    162(ptr) AccessChain 34(data) 67 57
+             181: 22(i16vec4) Load 180
+             182: 22(i16vec4) GroupNonUniformBroadcast 42 181 42
+             183:    162(ptr) AccessChain 34(data) 179 57
+                              Store 183 182
+             184:      6(int) Load 8(invocation)
+             185:    155(ptr) AccessChain 34(data) 37 57 38
+             186: 21(int16_t) Load 185
+             187: 21(int16_t) GroupNonUniformBroadcastFirst 42 186
+             188:    155(ptr) AccessChain 34(data) 184 57 38
+                              Store 188 187
+             189:      6(int) Load 8(invocation)
+             190:    162(ptr) AccessChain 34(data) 46 57
+             191: 22(i16vec4) Load 190
+             192:161(i16vec2) VectorShuffle 191 191 0 1
+             193:161(i16vec2) GroupNonUniformBroadcastFirst 42 192
+             194:    162(ptr) AccessChain 34(data) 189 57
+             195: 22(i16vec4) Load 194
+             196: 22(i16vec4) VectorShuffle 195 193 4 5 2 3
+                              Store 194 196
+             197:      6(int) Load 8(invocation)
+             198:    162(ptr) AccessChain 34(data) 57 57
+             199: 22(i16vec4) Load 198
+             200:171(i16vec3) VectorShuffle 199 199 0 1 2
+             201:171(i16vec3) GroupNonUniformBroadcastFirst 42 200
+             202:    162(ptr) AccessChain 34(data) 197 57
+             203: 22(i16vec4) Load 202
+             204: 22(i16vec4) VectorShuffle 203 201 4 5 6 3
+                              Store 202 204
+             205:      6(int) Load 8(invocation)
+             206:    162(ptr) AccessChain 34(data) 67 57
+             207: 22(i16vec4) Load 206
+             208: 22(i16vec4) GroupNonUniformBroadcastFirst 42 207
+             209:    162(ptr) AccessChain 34(data) 205 57
+                              Store 209 208
+             210:      6(int) Load 8(invocation)
+             212:    211(ptr) AccessChain 34(data) 37 67 38
+             213: 23(int16_t) Load 212
+             214: 23(int16_t) GroupNonUniformBroadcast 42 213 42
+             215:    211(ptr) AccessChain 34(data) 210 67 38
+                              Store 215 214
+             216:      6(int) Load 8(invocation)
+             219:    218(ptr) AccessChain 34(data) 46 67
+             220: 24(i16vec4) Load 219
+             221:217(i16vec2) VectorShuffle 220 220 0 1
+             222:217(i16vec2) GroupNonUniformBroadcast 42 221 42
+             223:    218(ptr) AccessChain 34(data) 216 67
+             224: 24(i16vec4) Load 223
+             225: 24(i16vec4) VectorShuffle 224 222 4 5 2 3
+                              Store 223 225
+             226:      6(int) Load 8(invocation)
+             228:    218(ptr) AccessChain 34(data) 57 67
+             229: 24(i16vec4) Load 228
+             230:227(i16vec3) VectorShuffle 229 229 0 1 2
+             231:227(i16vec3) GroupNonUniformBroadcast 42 230 42
+             232:    218(ptr) AccessChain 34(data) 226 67
+             233: 24(i16vec4) Load 232
+             234: 24(i16vec4) VectorShuffle 233 231 4 5 6 3
+                              Store 232 234
+             235:      6(int) Load 8(invocation)
+             236:    218(ptr) AccessChain 34(data) 67 67
+             237: 24(i16vec4) Load 236
+             238: 24(i16vec4) GroupNonUniformBroadcast 42 237 42
+             239:    218(ptr) AccessChain 34(data) 235 67
+                              Store 239 238
+             240:      6(int) Load 8(invocation)
+             241:    211(ptr) AccessChain 34(data) 37 67 38
+             242: 23(int16_t) Load 241
+             243: 23(int16_t) GroupNonUniformBroadcastFirst 42 242
+             244:    211(ptr) AccessChain 34(data) 240 67 38
+                              Store 244 243
+             245:      6(int) Load 8(invocation)
+             246:    218(ptr) AccessChain 34(data) 46 67
+             247: 24(i16vec4) Load 246
+             248:217(i16vec2) VectorShuffle 247 247 0 1
+             249:217(i16vec2) GroupNonUniformBroadcastFirst 42 248
+             250:    218(ptr) AccessChain 34(data) 245 67
+             251: 24(i16vec4) Load 250
+             252: 24(i16vec4) VectorShuffle 251 249 4 5 2 3
+                              Store 250 252
+             253:      6(int) Load 8(invocation)
+             254:    218(ptr) AccessChain 34(data) 57 67
+             255: 24(i16vec4) Load 254
+             256:227(i16vec3) VectorShuffle 255 255 0 1 2
+             257:227(i16vec3) GroupNonUniformBroadcastFirst 42 256
+             258:    218(ptr) AccessChain 34(data) 253 67
+             259: 24(i16vec4) Load 258
+             260: 24(i16vec4) VectorShuffle 259 257 4 5 6 3
+                              Store 258 260
+             261:      6(int) Load 8(invocation)
+             262:    218(ptr) AccessChain 34(data) 67 67
+             263: 24(i16vec4) Load 262
+             264: 24(i16vec4) GroupNonUniformBroadcastFirst 42 263
+             265:    218(ptr) AccessChain 34(data) 261 67
+                              Store 265 264
+             266:      6(int) Load 8(invocation)
+             269:    268(ptr) AccessChain 34(data) 37 267 38
+             270: 25(int64_t) Load 269
+             271: 25(int64_t) GroupNonUniformBroadcast 42 270 42
+             272:    268(ptr) AccessChain 34(data) 266 267 38
+                              Store 272 271
+             273:      6(int) Load 8(invocation)
+             276:    275(ptr) AccessChain 34(data) 46 267
+             277: 26(i64vec4) Load 276
+             278:274(i64vec2) VectorShuffle 277 277 0 1
+             279:274(i64vec2) GroupNonUniformBroadcast 42 278 42
+             280:    275(ptr) AccessChain 34(data) 273 267
+             281: 26(i64vec4) Load 280
+             282: 26(i64vec4) VectorShuffle 281 279 4 5 2 3
+                              Store 280 282
+             283:      6(int) Load 8(invocation)
+             285:    275(ptr) AccessChain 34(data) 57 267
+             286: 26(i64vec4) Load 285
+             287:284(i64vec3) VectorShuffle 286 286 0 1 2
+             288:284(i64vec3) GroupNonUniformBroadcast 42 287 42
+             289:    275(ptr) AccessChain 34(data) 283 267
+             290: 26(i64vec4) Load 289
+             291: 26(i64vec4) VectorShuffle 290 288 4 5 6 3
+                              Store 289 291
+             292:      6(int) Load 8(invocation)
+             293:    275(ptr) AccessChain 34(data) 67 267
+             294: 26(i64vec4) Load 293
+             295: 26(i64vec4) GroupNonUniformBroadcast 42 294 42
+             296:    275(ptr) AccessChain 34(data) 292 267
+                              Store 296 295
+             297:      6(int) Load 8(invocation)
+             298:    268(ptr) AccessChain 34(data) 37 267 38
+             299: 25(int64_t) Load 298
+             300: 25(int64_t) GroupNonUniformBroadcastFirst 42 299
+             301:    268(ptr) AccessChain 34(data) 297 267 38
+                              Store 301 300
+             302:      6(int) Load 8(invocation)
+             303:    275(ptr) AccessChain 34(data) 46 267
+             304: 26(i64vec4) Load 303
+             305:274(i64vec2) VectorShuffle 304 304 0 1
+             306:274(i64vec2) GroupNonUniformBroadcastFirst 42 305
+             307:    275(ptr) AccessChain 34(data) 302 267
+             308: 26(i64vec4) Load 307
+             309: 26(i64vec4) VectorShuffle 308 306 4 5 2 3
+                              Store 307 309
+             310:      6(int) Load 8(invocation)
+             311:    275(ptr) AccessChain 34(data) 57 267
+             312: 26(i64vec4) Load 311
+             313:284(i64vec3) VectorShuffle 312 312 0 1 2
+             314:284(i64vec3) GroupNonUniformBroadcastFirst 42 313
+             315:    275(ptr) AccessChain 34(data) 310 267
+             316: 26(i64vec4) Load 315
+             317: 26(i64vec4) VectorShuffle 316 314 4 5 6 3
+                              Store 315 317
+             318:      6(int) Load 8(invocation)
+             319:    275(ptr) AccessChain 34(data) 67 267
+             320: 26(i64vec4) Load 319
+             321: 26(i64vec4) GroupNonUniformBroadcastFirst 42 320
+             322:    275(ptr) AccessChain 34(data) 318 267
+                              Store 322 321
+             323:      6(int) Load 8(invocation)
+             326:    325(ptr) AccessChain 34(data) 37 324 38
+             327: 27(int64_t) Load 326
+             328: 27(int64_t) GroupNonUniformBroadcast 42 327 42
+             329:    325(ptr) AccessChain 34(data) 323 324 38
+                              Store 329 328
+             330:      6(int) Load 8(invocation)
+             333:    332(ptr) AccessChain 34(data) 46 324
+             334: 28(i64vec4) Load 333
+             335:331(i64vec2) VectorShuffle 334 334 0 1
+             336:331(i64vec2) GroupNonUniformBroadcast 42 335 42
+             337:    332(ptr) AccessChain 34(data) 330 324
+             338: 28(i64vec4) Load 337
+             339: 28(i64vec4) VectorShuffle 338 336 4 5 2 3
+                              Store 337 339
+             340:      6(int) Load 8(invocation)
+             342:    332(ptr) AccessChain 34(data) 57 324
+             343: 28(i64vec4) Load 342
+             344:341(i64vec3) VectorShuffle 343 343 0 1 2
+             345:341(i64vec3) GroupNonUniformBroadcast 42 344 42
+             346:    332(ptr) AccessChain 34(data) 340 324
+             347: 28(i64vec4) Load 346
+             348: 28(i64vec4) VectorShuffle 347 345 4 5 6 3
+                              Store 346 348
+             349:      6(int) Load 8(invocation)
+             350:    332(ptr) AccessChain 34(data) 67 324
+             351: 28(i64vec4) Load 350
+             352: 28(i64vec4) GroupNonUniformBroadcast 42 351 42
+             353:    332(ptr) AccessChain 34(data) 349 324
+                              Store 353 352
+             354:      6(int) Load 8(invocation)
+             355:    325(ptr) AccessChain 34(data) 37 324 38
+             356: 27(int64_t) Load 355
+             357: 27(int64_t) GroupNonUniformBroadcastFirst 42 356
+             358:    325(ptr) AccessChain 34(data) 354 324 38
+                              Store 358 357
+             359:      6(int) Load 8(invocation)
+             360:    332(ptr) AccessChain 34(data) 46 324
+             361: 28(i64vec4) Load 360
+             362:331(i64vec2) VectorShuffle 361 361 0 1
+             363:331(i64vec2) GroupNonUniformBroadcastFirst 42 362
+             364:    332(ptr) AccessChain 34(data) 359 324
+             365: 28(i64vec4) Load 364
+             366: 28(i64vec4) VectorShuffle 365 363 4 5 2 3
+                              Store 364 366
+             367:      6(int) Load 8(invocation)
+             368:    332(ptr) AccessChain 34(data) 57 324
+             369: 28(i64vec4) Load 368
+             370:341(i64vec3) VectorShuffle 369 369 0 1 2
+             371:341(i64vec3) GroupNonUniformBroadcastFirst 42 370
+             372:    332(ptr) AccessChain 34(data) 367 324
+             373: 28(i64vec4) Load 372
+             374: 28(i64vec4) VectorShuffle 373 371 4 5 6 3
+                              Store 372 374
+             375:      6(int) Load 8(invocation)
+             376:    332(ptr) AccessChain 34(data) 67 324
+             377: 28(i64vec4) Load 376
+             378: 28(i64vec4) GroupNonUniformBroadcastFirst 42 377
+             379:    332(ptr) AccessChain 34(data) 375 324
+                              Store 379 378
+             380:      6(int) Load 8(invocation)
+             383:    382(ptr) AccessChain 34(data) 37 381 38
+             384:29(float16_t) Load 383
+             385:29(float16_t) GroupNonUniformBroadcast 42 384 42
+             386:    382(ptr) AccessChain 34(data) 380 381 38
+                              Store 386 385
+             387:      6(int) Load 8(invocation)
+             390:    389(ptr) AccessChain 34(data) 46 381
+             391: 30(f16vec4) Load 390
+             392:388(f16vec2) VectorShuffle 391 391 0 1
+             393:388(f16vec2) GroupNonUniformBroadcast 42 392 42
+             394:    389(ptr) AccessChain 34(data) 387 381
+             395: 30(f16vec4) Load 394
+             396: 30(f16vec4) VectorShuffle 395 393 4 5 2 3
+                              Store 394 396
+             397:      6(int) Load 8(invocation)
+             399:    389(ptr) AccessChain 34(data) 57 381
+             400: 30(f16vec4) Load 399
+             401:398(f16vec3) VectorShuffle 400 400 0 1 2
+             402:398(f16vec3) GroupNonUniformBroadcast 42 401 42
+             403:    389(ptr) AccessChain 34(data) 397 381
+             404: 30(f16vec4) Load 403
+             405: 30(f16vec4) VectorShuffle 404 402 4 5 6 3
+                              Store 403 405
+             406:      6(int) Load 8(invocation)
+             407:    389(ptr) AccessChain 34(data) 67 381
+             408: 30(f16vec4) Load 407
+             409: 30(f16vec4) GroupNonUniformBroadcast 42 408 42
+             410:    389(ptr) AccessChain 34(data) 406 381
+                              Store 410 409
+             411:      6(int) Load 8(invocation)
+             412:    382(ptr) AccessChain 34(data) 37 381 38
+             413:29(float16_t) Load 412
+             414:29(float16_t) GroupNonUniformBroadcastFirst 42 413
+             415:    382(ptr) AccessChain 34(data) 411 381 38
+                              Store 415 414
+             416:      6(int) Load 8(invocation)
+             417:    389(ptr) AccessChain 34(data) 46 381
+             418: 30(f16vec4) Load 417
+             419:388(f16vec2) VectorShuffle 418 418 0 1
+             420:388(f16vec2) GroupNonUniformBroadcastFirst 42 419
+             421:    389(ptr) AccessChain 34(data) 416 381
+             422: 30(f16vec4) Load 421
+             423: 30(f16vec4) VectorShuffle 422 420 4 5 2 3
+                              Store 421 423
+             424:      6(int) Load 8(invocation)
+             425:    389(ptr) AccessChain 34(data) 57 381
+             426: 30(f16vec4) Load 425
+             427:398(f16vec3) VectorShuffle 426 426 0 1 2
+             428:398(f16vec3) GroupNonUniformBroadcastFirst 42 427
+             429:    389(ptr) AccessChain 34(data) 424 381
+             430: 30(f16vec4) Load 429
+             431: 30(f16vec4) VectorShuffle 430 428 4 5 6 3
+                              Store 429 431
+             432:      6(int) Load 8(invocation)
+             433:    389(ptr) AccessChain 34(data) 67 381
+             434: 30(f16vec4) Load 433
+             435: 30(f16vec4) GroupNonUniformBroadcastFirst 42 434
+             436:    389(ptr) AccessChain 34(data) 432 381
+                              Store 436 435
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupExtendedTypesBallotNeg.comp.out b/Test/baseResults/spv.subgroupExtendedTypesBallotNeg.comp.out
new file mode 100644
index 0000000..534560d
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesBallotNeg.comp.out
@@ -0,0 +1,61 @@
+spv.subgroupExtendedTypesBallotNeg.comp
+ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:30: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:35: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:40: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:45: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:46: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:47: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:48: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:49: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:50: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:51: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:53: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:54: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:55: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:56: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:57: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:58: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:59: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:60: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:62: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:63: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:64: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:65: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:66: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:67: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:68: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:71: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:72: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:73: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:75: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:76: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:77: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:78: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:80: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:81: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:82: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:83: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:84: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:85: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:86: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:87: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 56 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.subgroupExtendedTypesBasic.comp.out b/Test/baseResults/spv.subgroupExtendedTypesBasic.comp.out
new file mode 100644
index 0000000..6319697
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesBasic.comp.out
@@ -0,0 +1,9 @@
+spv.subgroupExtendedTypesBasic.comp
+ERROR: #version: compute shaders require es profile with version 310 or above, or non-es profile with version 420 or above
+ERROR: #version: statement must appear first in es-profile shader; before comments or newlines
+ERROR: 1 compilation errors.  No code generated.
+
+
+ERROR: Linking compute stage: Missing entry point: Each stage requires one entry point
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
new file mode 100644
index 0000000..b0b94b5
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
@@ -0,0 +1,1520 @@
+spv.subgroupExtendedTypesClustered.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 1273
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformClustered
+                              Capability StorageUniformBufferBlock16
+                              Capability StorageBuffer8BitAccess
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_float16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int64"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int8"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_clustered"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 31  "Buffers"
+                              MemberName 31(Buffers) 0  "i8"
+                              MemberName 31(Buffers) 1  "u8"
+                              MemberName 31(Buffers) 2  "i16"
+                              MemberName 31(Buffers) 3  "u16"
+                              MemberName 31(Buffers) 4  "i64"
+                              MemberName 31(Buffers) 5  "u64"
+                              MemberName 31(Buffers) 6  "f16"
+                              Name 34  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 31(Buffers) 0 Offset 0
+                              MemberDecorate 31(Buffers) 1 Offset 4
+                              MemberDecorate 31(Buffers) 2 Offset 8
+                              MemberDecorate 31(Buffers) 3 Offset 16
+                              MemberDecorate 31(Buffers) 4 Offset 32
+                              MemberDecorate 31(Buffers) 5 Offset 64
+                              MemberDecorate 31(Buffers) 6 Offset 96
+                              Decorate 31(Buffers) Block
+                              Decorate 34(data) DescriptorSet 0
+                              Decorate 34(data) Binding 0
+                              Decorate 1272 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeInt 8 1
+              18:             TypeVector 17(int8_t) 4
+              19:             TypeInt 8 0
+              20:             TypeVector 19(int8_t) 4
+              21:             TypeInt 16 1
+              22:             TypeVector 21(int16_t) 4
+              23:             TypeInt 16 0
+              24:             TypeVector 23(int16_t) 4
+              25:             TypeInt 64 1
+              26:             TypeVector 25(int64_t) 4
+              27:             TypeInt 64 0
+              28:             TypeVector 27(int64_t) 4
+              29:             TypeFloat 16
+              30:             TypeVector 29(float16_t) 4
+     31(Buffers):             TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+              32:             TypeArray 31(Buffers) 15
+              33:             TypePointer StorageBuffer 32
+        34(data):     33(ptr) Variable StorageBuffer
+              36:             TypeInt 32 1
+              37:     36(int) Constant 0
+              38:      6(int) Constant 0
+              39:             TypePointer StorageBuffer 17(int8_t)
+              42:      6(int) Constant 1
+              43:      6(int) Constant 3
+              47:     36(int) Constant 1
+              48:             TypeVector 17(int8_t) 2
+              49:             TypePointer StorageBuffer 18(i8vec4)
+              58:     36(int) Constant 2
+              59:             TypeVector 17(int8_t) 3
+              68:     36(int) Constant 3
+             230:             TypePointer StorageBuffer 19(int8_t)
+             236:             TypeVector 19(int8_t) 2
+             237:             TypePointer StorageBuffer 20(i8vec4)
+             246:             TypeVector 19(int8_t) 3
+             416:             TypePointer StorageBuffer 21(int16_t)
+             422:             TypeVector 21(int16_t) 2
+             423:             TypePointer StorageBuffer 22(i16vec4)
+             432:             TypeVector 21(int16_t) 3
+             602:             TypePointer StorageBuffer 23(int16_t)
+             608:             TypeVector 23(int16_t) 2
+             609:             TypePointer StorageBuffer 24(i16vec4)
+             618:             TypeVector 23(int16_t) 3
+             788:     36(int) Constant 4
+             789:             TypePointer StorageBuffer 25(int64_t)
+             795:             TypeVector 25(int64_t) 2
+             796:             TypePointer StorageBuffer 26(i64vec4)
+             805:             TypeVector 25(int64_t) 3
+             975:     36(int) Constant 5
+             976:             TypePointer StorageBuffer 27(int64_t)
+             982:             TypeVector 27(int64_t) 2
+             983:             TypePointer StorageBuffer 28(i64vec4)
+             992:             TypeVector 27(int64_t) 3
+            1162:     36(int) Constant 6
+            1163:             TypePointer StorageBuffer 29(float16_t)
+            1169:             TypeVector 29(float16_t) 2
+            1170:             TypePointer StorageBuffer 30(f16vec4)
+            1179:             TypeVector 29(float16_t) 3
+            1270:             TypeVector 6(int) 3
+            1271:      6(int) Constant 8
+            1272: 1270(ivec3) ConstantComposite 1271 42 42
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              35:      6(int) Load 8(invocation)
+              40:     39(ptr) AccessChain 34(data) 37 37 38
+              41:  17(int8_t) Load 40
+              44:  17(int8_t) GroupNonUniformIAdd 43 ClusteredReduce 41 42
+              45:     39(ptr) AccessChain 34(data) 35 37 38
+                              Store 45 44
+              46:      6(int) Load 8(invocation)
+              50:     49(ptr) AccessChain 34(data) 47 37
+              51:  18(i8vec4) Load 50
+              52:  48(i8vec2) VectorShuffle 51 51 0 1
+              53:  48(i8vec2) GroupNonUniformIAdd 43 ClusteredReduce 52 42
+              54:     49(ptr) AccessChain 34(data) 46 37
+              55:  18(i8vec4) Load 54
+              56:  18(i8vec4) VectorShuffle 55 53 4 5 2 3
+                              Store 54 56
+              57:      6(int) Load 8(invocation)
+              60:     49(ptr) AccessChain 34(data) 58 37
+              61:  18(i8vec4) Load 60
+              62:  59(i8vec3) VectorShuffle 61 61 0 1 2
+              63:  59(i8vec3) GroupNonUniformIAdd 43 ClusteredReduce 62 42
+              64:     49(ptr) AccessChain 34(data) 57 37
+              65:  18(i8vec4) Load 64
+              66:  18(i8vec4) VectorShuffle 65 63 4 5 6 3
+                              Store 64 66
+              67:      6(int) Load 8(invocation)
+              69:     49(ptr) AccessChain 34(data) 68 37
+              70:  18(i8vec4) Load 69
+              71:  18(i8vec4) GroupNonUniformIAdd 43 ClusteredReduce 70 42
+              72:     49(ptr) AccessChain 34(data) 67 37
+                              Store 72 71
+              73:      6(int) Load 8(invocation)
+              74:     39(ptr) AccessChain 34(data) 37 37 38
+              75:  17(int8_t) Load 74
+              76:  17(int8_t) GroupNonUniformIMul 43 ClusteredReduce 75 42
+              77:     39(ptr) AccessChain 34(data) 73 37 38
+                              Store 77 76
+              78:      6(int) Load 8(invocation)
+              79:     49(ptr) AccessChain 34(data) 47 37
+              80:  18(i8vec4) Load 79
+              81:  48(i8vec2) VectorShuffle 80 80 0 1
+              82:  48(i8vec2) GroupNonUniformIMul 43 ClusteredReduce 81 42
+              83:     49(ptr) AccessChain 34(data) 78 37
+              84:  18(i8vec4) Load 83
+              85:  18(i8vec4) VectorShuffle 84 82 4 5 2 3
+                              Store 83 85
+              86:      6(int) Load 8(invocation)
+              87:     49(ptr) AccessChain 34(data) 58 37
+              88:  18(i8vec4) Load 87
+              89:  59(i8vec3) VectorShuffle 88 88 0 1 2
+              90:  59(i8vec3) GroupNonUniformIMul 43 ClusteredReduce 89 42
+              91:     49(ptr) AccessChain 34(data) 86 37
+              92:  18(i8vec4) Load 91
+              93:  18(i8vec4) VectorShuffle 92 90 4 5 6 3
+                              Store 91 93
+              94:      6(int) Load 8(invocation)
+              95:     49(ptr) AccessChain 34(data) 68 37
+              96:  18(i8vec4) Load 95
+              97:  18(i8vec4) GroupNonUniformIMul 43 ClusteredReduce 96 42
+              98:     49(ptr) AccessChain 34(data) 94 37
+                              Store 98 97
+              99:      6(int) Load 8(invocation)
+             100:     39(ptr) AccessChain 34(data) 37 37 38
+             101:  17(int8_t) Load 100
+             102:  17(int8_t) GroupNonUniformSMin 43 ClusteredReduce 101 42
+             103:     39(ptr) AccessChain 34(data) 99 37 38
+                              Store 103 102
+             104:      6(int) Load 8(invocation)
+             105:     49(ptr) AccessChain 34(data) 47 37
+             106:  18(i8vec4) Load 105
+             107:  48(i8vec2) VectorShuffle 106 106 0 1
+             108:  48(i8vec2) GroupNonUniformSMin 43 ClusteredReduce 107 42
+             109:     49(ptr) AccessChain 34(data) 104 37
+             110:  18(i8vec4) Load 109
+             111:  18(i8vec4) VectorShuffle 110 108 4 5 2 3
+                              Store 109 111
+             112:      6(int) Load 8(invocation)
+             113:     49(ptr) AccessChain 34(data) 58 37
+             114:  18(i8vec4) Load 113
+             115:  59(i8vec3) VectorShuffle 114 114 0 1 2
+             116:  59(i8vec3) GroupNonUniformSMin 43 ClusteredReduce 115 42
+             117:     49(ptr) AccessChain 34(data) 112 37
+             118:  18(i8vec4) Load 117
+             119:  18(i8vec4) VectorShuffle 118 116 4 5 6 3
+                              Store 117 119
+             120:      6(int) Load 8(invocation)
+             121:     49(ptr) AccessChain 34(data) 68 37
+             122:  18(i8vec4) Load 121
+             123:  18(i8vec4) GroupNonUniformSMin 43 ClusteredReduce 122 42
+             124:     49(ptr) AccessChain 34(data) 120 37
+                              Store 124 123
+             125:      6(int) Load 8(invocation)
+             126:     39(ptr) AccessChain 34(data) 37 37 38
+             127:  17(int8_t) Load 126
+             128:  17(int8_t) GroupNonUniformSMax 43 ClusteredReduce 127 42
+             129:     39(ptr) AccessChain 34(data) 125 37 38
+                              Store 129 128
+             130:      6(int) Load 8(invocation)
+             131:     49(ptr) AccessChain 34(data) 47 37
+             132:  18(i8vec4) Load 131
+             133:  48(i8vec2) VectorShuffle 132 132 0 1
+             134:  48(i8vec2) GroupNonUniformSMax 43 ClusteredReduce 133 42
+             135:     49(ptr) AccessChain 34(data) 130 37
+             136:  18(i8vec4) Load 135
+             137:  18(i8vec4) VectorShuffle 136 134 4 5 2 3
+                              Store 135 137
+             138:      6(int) Load 8(invocation)
+             139:     49(ptr) AccessChain 34(data) 58 37
+             140:  18(i8vec4) Load 139
+             141:  59(i8vec3) VectorShuffle 140 140 0 1 2
+             142:  59(i8vec3) GroupNonUniformSMax 43 ClusteredReduce 141 42
+             143:     49(ptr) AccessChain 34(data) 138 37
+             144:  18(i8vec4) Load 143
+             145:  18(i8vec4) VectorShuffle 144 142 4 5 6 3
+                              Store 143 145
+             146:      6(int) Load 8(invocation)
+             147:     49(ptr) AccessChain 34(data) 68 37
+             148:  18(i8vec4) Load 147
+             149:  18(i8vec4) GroupNonUniformSMax 43 ClusteredReduce 148 42
+             150:     49(ptr) AccessChain 34(data) 146 37
+                              Store 150 149
+             151:      6(int) Load 8(invocation)
+             152:     39(ptr) AccessChain 34(data) 37 37 38
+             153:  17(int8_t) Load 152
+             154:  17(int8_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 153 42
+             155:     39(ptr) AccessChain 34(data) 151 37 38
+                              Store 155 154
+             156:      6(int) Load 8(invocation)
+             157:     49(ptr) AccessChain 34(data) 47 37
+             158:  18(i8vec4) Load 157
+             159:  48(i8vec2) VectorShuffle 158 158 0 1
+             160:  48(i8vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 159 42
+             161:     49(ptr) AccessChain 34(data) 156 37
+             162:  18(i8vec4) Load 161
+             163:  18(i8vec4) VectorShuffle 162 160 4 5 2 3
+                              Store 161 163
+             164:      6(int) Load 8(invocation)
+             165:     49(ptr) AccessChain 34(data) 58 37
+             166:  18(i8vec4) Load 165
+             167:  59(i8vec3) VectorShuffle 166 166 0 1 2
+             168:  59(i8vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 167 42
+             169:     49(ptr) AccessChain 34(data) 164 37
+             170:  18(i8vec4) Load 169
+             171:  18(i8vec4) VectorShuffle 170 168 4 5 6 3
+                              Store 169 171
+             172:      6(int) Load 8(invocation)
+             173:     49(ptr) AccessChain 34(data) 68 37
+             174:  18(i8vec4) Load 173
+             175:  18(i8vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 174 42
+             176:     49(ptr) AccessChain 34(data) 172 37
+                              Store 176 175
+             177:      6(int) Load 8(invocation)
+             178:     39(ptr) AccessChain 34(data) 37 37 38
+             179:  17(int8_t) Load 178
+             180:  17(int8_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 179 42
+             181:     39(ptr) AccessChain 34(data) 177 37 38
+                              Store 181 180
+             182:      6(int) Load 8(invocation)
+             183:     49(ptr) AccessChain 34(data) 47 37
+             184:  18(i8vec4) Load 183
+             185:  48(i8vec2) VectorShuffle 184 184 0 1
+             186:  48(i8vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 185 42
+             187:     49(ptr) AccessChain 34(data) 182 37
+             188:  18(i8vec4) Load 187
+             189:  18(i8vec4) VectorShuffle 188 186 4 5 2 3
+                              Store 187 189
+             190:      6(int) Load 8(invocation)
+             191:     49(ptr) AccessChain 34(data) 58 37
+             192:  18(i8vec4) Load 191
+             193:  59(i8vec3) VectorShuffle 192 192 0 1 2
+             194:  59(i8vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 193 42
+             195:     49(ptr) AccessChain 34(data) 190 37
+             196:  18(i8vec4) Load 195
+             197:  18(i8vec4) VectorShuffle 196 194 4 5 6 3
+                              Store 195 197
+             198:      6(int) Load 8(invocation)
+             199:     49(ptr) AccessChain 34(data) 68 37
+             200:  18(i8vec4) Load 199
+             201:  18(i8vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 200 42
+             202:     49(ptr) AccessChain 34(data) 198 37
+                              Store 202 201
+             203:      6(int) Load 8(invocation)
+             204:     39(ptr) AccessChain 34(data) 37 37 38
+             205:  17(int8_t) Load 204
+             206:  17(int8_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 205 42
+             207:     39(ptr) AccessChain 34(data) 203 37 38
+                              Store 207 206
+             208:      6(int) Load 8(invocation)
+             209:     49(ptr) AccessChain 34(data) 47 37
+             210:  18(i8vec4) Load 209
+             211:  48(i8vec2) VectorShuffle 210 210 0 1
+             212:  48(i8vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 211 42
+             213:     49(ptr) AccessChain 34(data) 208 37
+             214:  18(i8vec4) Load 213
+             215:  18(i8vec4) VectorShuffle 214 212 4 5 2 3
+                              Store 213 215
+             216:      6(int) Load 8(invocation)
+             217:     49(ptr) AccessChain 34(data) 58 37
+             218:  18(i8vec4) Load 217
+             219:  59(i8vec3) VectorShuffle 218 218 0 1 2
+             220:  59(i8vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 219 42
+             221:     49(ptr) AccessChain 34(data) 216 37
+             222:  18(i8vec4) Load 221
+             223:  18(i8vec4) VectorShuffle 222 220 4 5 6 3
+                              Store 221 223
+             224:      6(int) Load 8(invocation)
+             225:     49(ptr) AccessChain 34(data) 68 37
+             226:  18(i8vec4) Load 225
+             227:  18(i8vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 226 42
+             228:     49(ptr) AccessChain 34(data) 224 37
+                              Store 228 227
+             229:      6(int) Load 8(invocation)
+             231:    230(ptr) AccessChain 34(data) 37 47 38
+             232:  19(int8_t) Load 231
+             233:  19(int8_t) GroupNonUniformIAdd 43 ClusteredReduce 232 42
+             234:    230(ptr) AccessChain 34(data) 229 47 38
+                              Store 234 233
+             235:      6(int) Load 8(invocation)
+             238:    237(ptr) AccessChain 34(data) 47 47
+             239:  20(i8vec4) Load 238
+             240: 236(i8vec2) VectorShuffle 239 239 0 1
+             241: 236(i8vec2) GroupNonUniformIAdd 43 ClusteredReduce 240 42
+             242:    237(ptr) AccessChain 34(data) 235 47
+             243:  20(i8vec4) Load 242
+             244:  20(i8vec4) VectorShuffle 243 241 4 5 2 3
+                              Store 242 244
+             245:      6(int) Load 8(invocation)
+             247:    237(ptr) AccessChain 34(data) 58 47
+             248:  20(i8vec4) Load 247
+             249: 246(i8vec3) VectorShuffle 248 248 0 1 2
+             250: 246(i8vec3) GroupNonUniformIAdd 43 ClusteredReduce 249 42
+             251:    237(ptr) AccessChain 34(data) 245 47
+             252:  20(i8vec4) Load 251
+             253:  20(i8vec4) VectorShuffle 252 250 4 5 6 3
+                              Store 251 253
+             254:      6(int) Load 8(invocation)
+             255:    237(ptr) AccessChain 34(data) 68 47
+             256:  20(i8vec4) Load 255
+             257:  20(i8vec4) GroupNonUniformIAdd 43 ClusteredReduce 256 42
+             258:    237(ptr) AccessChain 34(data) 254 47
+                              Store 258 257
+             259:      6(int) Load 8(invocation)
+             260:    230(ptr) AccessChain 34(data) 37 47 38
+             261:  19(int8_t) Load 260
+             262:  19(int8_t) GroupNonUniformIMul 43 ClusteredReduce 261 42
+             263:    230(ptr) AccessChain 34(data) 259 47 38
+                              Store 263 262
+             264:      6(int) Load 8(invocation)
+             265:    237(ptr) AccessChain 34(data) 47 47
+             266:  20(i8vec4) Load 265
+             267: 236(i8vec2) VectorShuffle 266 266 0 1
+             268: 236(i8vec2) GroupNonUniformIMul 43 ClusteredReduce 267 42
+             269:    237(ptr) AccessChain 34(data) 264 47
+             270:  20(i8vec4) Load 269
+             271:  20(i8vec4) VectorShuffle 270 268 4 5 2 3
+                              Store 269 271
+             272:      6(int) Load 8(invocation)
+             273:    237(ptr) AccessChain 34(data) 58 47
+             274:  20(i8vec4) Load 273
+             275: 246(i8vec3) VectorShuffle 274 274 0 1 2
+             276: 246(i8vec3) GroupNonUniformIMul 43 ClusteredReduce 275 42
+             277:    237(ptr) AccessChain 34(data) 272 47
+             278:  20(i8vec4) Load 277
+             279:  20(i8vec4) VectorShuffle 278 276 4 5 6 3
+                              Store 277 279
+             280:      6(int) Load 8(invocation)
+             281:    237(ptr) AccessChain 34(data) 68 47
+             282:  20(i8vec4) Load 281
+             283:  20(i8vec4) GroupNonUniformIMul 43 ClusteredReduce 282 42
+             284:    237(ptr) AccessChain 34(data) 280 47
+                              Store 284 283
+             285:      6(int) Load 8(invocation)
+             286:    230(ptr) AccessChain 34(data) 37 47 38
+             287:  19(int8_t) Load 286
+             288:  19(int8_t) GroupNonUniformUMin 43 ClusteredReduce 287 42
+             289:    230(ptr) AccessChain 34(data) 285 47 38
+                              Store 289 288
+             290:      6(int) Load 8(invocation)
+             291:    237(ptr) AccessChain 34(data) 47 47
+             292:  20(i8vec4) Load 291
+             293: 236(i8vec2) VectorShuffle 292 292 0 1
+             294: 236(i8vec2) GroupNonUniformUMin 43 ClusteredReduce 293 42
+             295:    237(ptr) AccessChain 34(data) 290 47
+             296:  20(i8vec4) Load 295
+             297:  20(i8vec4) VectorShuffle 296 294 4 5 2 3
+                              Store 295 297
+             298:      6(int) Load 8(invocation)
+             299:    237(ptr) AccessChain 34(data) 58 47
+             300:  20(i8vec4) Load 299
+             301: 246(i8vec3) VectorShuffle 300 300 0 1 2
+             302: 246(i8vec3) GroupNonUniformUMin 43 ClusteredReduce 301 42
+             303:    237(ptr) AccessChain 34(data) 298 47
+             304:  20(i8vec4) Load 303
+             305:  20(i8vec4) VectorShuffle 304 302 4 5 6 3
+                              Store 303 305
+             306:      6(int) Load 8(invocation)
+             307:    237(ptr) AccessChain 34(data) 68 47
+             308:  20(i8vec4) Load 307
+             309:  20(i8vec4) GroupNonUniformUMin 43 ClusteredReduce 308 42
+             310:    237(ptr) AccessChain 34(data) 306 47
+                              Store 310 309
+             311:      6(int) Load 8(invocation)
+             312:    230(ptr) AccessChain 34(data) 37 47 38
+             313:  19(int8_t) Load 312
+             314:  19(int8_t) GroupNonUniformUMax 43 ClusteredReduce 313 42
+             315:    230(ptr) AccessChain 34(data) 311 47 38
+                              Store 315 314
+             316:      6(int) Load 8(invocation)
+             317:    237(ptr) AccessChain 34(data) 47 47
+             318:  20(i8vec4) Load 317
+             319: 236(i8vec2) VectorShuffle 318 318 0 1
+             320: 236(i8vec2) GroupNonUniformUMax 43 ClusteredReduce 319 42
+             321:    237(ptr) AccessChain 34(data) 316 47
+             322:  20(i8vec4) Load 321
+             323:  20(i8vec4) VectorShuffle 322 320 4 5 2 3
+                              Store 321 323
+             324:      6(int) Load 8(invocation)
+             325:    237(ptr) AccessChain 34(data) 58 47
+             326:  20(i8vec4) Load 325
+             327: 246(i8vec3) VectorShuffle 326 326 0 1 2
+             328: 246(i8vec3) GroupNonUniformUMax 43 ClusteredReduce 327 42
+             329:    237(ptr) AccessChain 34(data) 324 47
+             330:  20(i8vec4) Load 329
+             331:  20(i8vec4) VectorShuffle 330 328 4 5 6 3
+                              Store 329 331
+             332:      6(int) Load 8(invocation)
+             333:    237(ptr) AccessChain 34(data) 68 47
+             334:  20(i8vec4) Load 333
+             335:  20(i8vec4) GroupNonUniformUMax 43 ClusteredReduce 334 42
+             336:    237(ptr) AccessChain 34(data) 332 47
+                              Store 336 335
+             337:      6(int) Load 8(invocation)
+             338:    230(ptr) AccessChain 34(data) 37 47 38
+             339:  19(int8_t) Load 338
+             340:  19(int8_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 339 42
+             341:    230(ptr) AccessChain 34(data) 337 47 38
+                              Store 341 340
+             342:      6(int) Load 8(invocation)
+             343:    237(ptr) AccessChain 34(data) 47 47
+             344:  20(i8vec4) Load 343
+             345: 236(i8vec2) VectorShuffle 344 344 0 1
+             346: 236(i8vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 345 42
+             347:    237(ptr) AccessChain 34(data) 342 47
+             348:  20(i8vec4) Load 347
+             349:  20(i8vec4) VectorShuffle 348 346 4 5 2 3
+                              Store 347 349
+             350:      6(int) Load 8(invocation)
+             351:    237(ptr) AccessChain 34(data) 58 47
+             352:  20(i8vec4) Load 351
+             353: 246(i8vec3) VectorShuffle 352 352 0 1 2
+             354: 246(i8vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 353 42
+             355:    237(ptr) AccessChain 34(data) 350 47
+             356:  20(i8vec4) Load 355
+             357:  20(i8vec4) VectorShuffle 356 354 4 5 6 3
+                              Store 355 357
+             358:      6(int) Load 8(invocation)
+             359:    237(ptr) AccessChain 34(data) 68 47
+             360:  20(i8vec4) Load 359
+             361:  20(i8vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 360 42
+             362:    237(ptr) AccessChain 34(data) 358 47
+                              Store 362 361
+             363:      6(int) Load 8(invocation)
+             364:    230(ptr) AccessChain 34(data) 37 47 38
+             365:  19(int8_t) Load 364
+             366:  19(int8_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 365 42
+             367:    230(ptr) AccessChain 34(data) 363 47 38
+                              Store 367 366
+             368:      6(int) Load 8(invocation)
+             369:    237(ptr) AccessChain 34(data) 47 47
+             370:  20(i8vec4) Load 369
+             371: 236(i8vec2) VectorShuffle 370 370 0 1
+             372: 236(i8vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 371 42
+             373:    237(ptr) AccessChain 34(data) 368 47
+             374:  20(i8vec4) Load 373
+             375:  20(i8vec4) VectorShuffle 374 372 4 5 2 3
+                              Store 373 375
+             376:      6(int) Load 8(invocation)
+             377:    237(ptr) AccessChain 34(data) 58 47
+             378:  20(i8vec4) Load 377
+             379: 246(i8vec3) VectorShuffle 378 378 0 1 2
+             380: 246(i8vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 379 42
+             381:    237(ptr) AccessChain 34(data) 376 47
+             382:  20(i8vec4) Load 381
+             383:  20(i8vec4) VectorShuffle 382 380 4 5 6 3
+                              Store 381 383
+             384:      6(int) Load 8(invocation)
+             385:    237(ptr) AccessChain 34(data) 68 47
+             386:  20(i8vec4) Load 385
+             387:  20(i8vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 386 42
+             388:    237(ptr) AccessChain 34(data) 384 47
+                              Store 388 387
+             389:      6(int) Load 8(invocation)
+             390:    230(ptr) AccessChain 34(data) 37 47 38
+             391:  19(int8_t) Load 390
+             392:  19(int8_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 391 42
+             393:    230(ptr) AccessChain 34(data) 389 47 38
+                              Store 393 392
+             394:      6(int) Load 8(invocation)
+             395:    237(ptr) AccessChain 34(data) 47 47
+             396:  20(i8vec4) Load 395
+             397: 236(i8vec2) VectorShuffle 396 396 0 1
+             398: 236(i8vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 397 42
+             399:    237(ptr) AccessChain 34(data) 394 47
+             400:  20(i8vec4) Load 399
+             401:  20(i8vec4) VectorShuffle 400 398 4 5 2 3
+                              Store 399 401
+             402:      6(int) Load 8(invocation)
+             403:    237(ptr) AccessChain 34(data) 58 47
+             404:  20(i8vec4) Load 403
+             405: 246(i8vec3) VectorShuffle 404 404 0 1 2
+             406: 246(i8vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 405 42
+             407:    237(ptr) AccessChain 34(data) 402 47
+             408:  20(i8vec4) Load 407
+             409:  20(i8vec4) VectorShuffle 408 406 4 5 6 3
+                              Store 407 409
+             410:      6(int) Load 8(invocation)
+             411:    237(ptr) AccessChain 34(data) 68 47
+             412:  20(i8vec4) Load 411
+             413:  20(i8vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 412 42
+             414:    237(ptr) AccessChain 34(data) 410 47
+                              Store 414 413
+             415:      6(int) Load 8(invocation)
+             417:    416(ptr) AccessChain 34(data) 37 58 38
+             418: 21(int16_t) Load 417
+             419: 21(int16_t) GroupNonUniformIAdd 43 ClusteredReduce 418 42
+             420:    416(ptr) AccessChain 34(data) 415 58 38
+                              Store 420 419
+             421:      6(int) Load 8(invocation)
+             424:    423(ptr) AccessChain 34(data) 47 58
+             425: 22(i16vec4) Load 424
+             426:422(i16vec2) VectorShuffle 425 425 0 1
+             427:422(i16vec2) GroupNonUniformIAdd 43 ClusteredReduce 426 42
+             428:    423(ptr) AccessChain 34(data) 421 58
+             429: 22(i16vec4) Load 428
+             430: 22(i16vec4) VectorShuffle 429 427 4 5 2 3
+                              Store 428 430
+             431:      6(int) Load 8(invocation)
+             433:    423(ptr) AccessChain 34(data) 58 58
+             434: 22(i16vec4) Load 433
+             435:432(i16vec3) VectorShuffle 434 434 0 1 2
+             436:432(i16vec3) GroupNonUniformIAdd 43 ClusteredReduce 435 42
+             437:    423(ptr) AccessChain 34(data) 431 58
+             438: 22(i16vec4) Load 437
+             439: 22(i16vec4) VectorShuffle 438 436 4 5 6 3
+                              Store 437 439
+             440:      6(int) Load 8(invocation)
+             441:    423(ptr) AccessChain 34(data) 68 58
+             442: 22(i16vec4) Load 441
+             443: 22(i16vec4) GroupNonUniformIAdd 43 ClusteredReduce 442 42
+             444:    423(ptr) AccessChain 34(data) 440 58
+                              Store 444 443
+             445:      6(int) Load 8(invocation)
+             446:    416(ptr) AccessChain 34(data) 37 58 38
+             447: 21(int16_t) Load 446
+             448: 21(int16_t) GroupNonUniformIMul 43 ClusteredReduce 447 42
+             449:    416(ptr) AccessChain 34(data) 445 58 38
+                              Store 449 448
+             450:      6(int) Load 8(invocation)
+             451:    423(ptr) AccessChain 34(data) 47 58
+             452: 22(i16vec4) Load 451
+             453:422(i16vec2) VectorShuffle 452 452 0 1
+             454:422(i16vec2) GroupNonUniformIMul 43 ClusteredReduce 453 42
+             455:    423(ptr) AccessChain 34(data) 450 58
+             456: 22(i16vec4) Load 455
+             457: 22(i16vec4) VectorShuffle 456 454 4 5 2 3
+                              Store 455 457
+             458:      6(int) Load 8(invocation)
+             459:    423(ptr) AccessChain 34(data) 58 58
+             460: 22(i16vec4) Load 459
+             461:432(i16vec3) VectorShuffle 460 460 0 1 2
+             462:432(i16vec3) GroupNonUniformIMul 43 ClusteredReduce 461 42
+             463:    423(ptr) AccessChain 34(data) 458 58
+             464: 22(i16vec4) Load 463
+             465: 22(i16vec4) VectorShuffle 464 462 4 5 6 3
+                              Store 463 465
+             466:      6(int) Load 8(invocation)
+             467:    423(ptr) AccessChain 34(data) 68 58
+             468: 22(i16vec4) Load 467
+             469: 22(i16vec4) GroupNonUniformIMul 43 ClusteredReduce 468 42
+             470:    423(ptr) AccessChain 34(data) 466 58
+                              Store 470 469
+             471:      6(int) Load 8(invocation)
+             472:    416(ptr) AccessChain 34(data) 37 58 38
+             473: 21(int16_t) Load 472
+             474: 21(int16_t) GroupNonUniformSMin 43 ClusteredReduce 473 42
+             475:    416(ptr) AccessChain 34(data) 471 58 38
+                              Store 475 474
+             476:      6(int) Load 8(invocation)
+             477:    423(ptr) AccessChain 34(data) 47 58
+             478: 22(i16vec4) Load 477
+             479:422(i16vec2) VectorShuffle 478 478 0 1
+             480:422(i16vec2) GroupNonUniformSMin 43 ClusteredReduce 479 42
+             481:    423(ptr) AccessChain 34(data) 476 58
+             482: 22(i16vec4) Load 481
+             483: 22(i16vec4) VectorShuffle 482 480 4 5 2 3
+                              Store 481 483
+             484:      6(int) Load 8(invocation)
+             485:    423(ptr) AccessChain 34(data) 58 58
+             486: 22(i16vec4) Load 485
+             487:432(i16vec3) VectorShuffle 486 486 0 1 2
+             488:432(i16vec3) GroupNonUniformSMin 43 ClusteredReduce 487 42
+             489:    423(ptr) AccessChain 34(data) 484 58
+             490: 22(i16vec4) Load 489
+             491: 22(i16vec4) VectorShuffle 490 488 4 5 6 3
+                              Store 489 491
+             492:      6(int) Load 8(invocation)
+             493:    423(ptr) AccessChain 34(data) 68 58
+             494: 22(i16vec4) Load 493
+             495: 22(i16vec4) GroupNonUniformSMin 43 ClusteredReduce 494 42
+             496:    423(ptr) AccessChain 34(data) 492 58
+                              Store 496 495
+             497:      6(int) Load 8(invocation)
+             498:    416(ptr) AccessChain 34(data) 37 58 38
+             499: 21(int16_t) Load 498
+             500: 21(int16_t) GroupNonUniformSMax 43 ClusteredReduce 499 42
+             501:    416(ptr) AccessChain 34(data) 497 58 38
+                              Store 501 500
+             502:      6(int) Load 8(invocation)
+             503:    423(ptr) AccessChain 34(data) 47 58
+             504: 22(i16vec4) Load 503
+             505:422(i16vec2) VectorShuffle 504 504 0 1
+             506:422(i16vec2) GroupNonUniformSMax 43 ClusteredReduce 505 42
+             507:    423(ptr) AccessChain 34(data) 502 58
+             508: 22(i16vec4) Load 507
+             509: 22(i16vec4) VectorShuffle 508 506 4 5 2 3
+                              Store 507 509
+             510:      6(int) Load 8(invocation)
+             511:    423(ptr) AccessChain 34(data) 58 58
+             512: 22(i16vec4) Load 511
+             513:432(i16vec3) VectorShuffle 512 512 0 1 2
+             514:432(i16vec3) GroupNonUniformSMax 43 ClusteredReduce 513 42
+             515:    423(ptr) AccessChain 34(data) 510 58
+             516: 22(i16vec4) Load 515
+             517: 22(i16vec4) VectorShuffle 516 514 4 5 6 3
+                              Store 515 517
+             518:      6(int) Load 8(invocation)
+             519:    423(ptr) AccessChain 34(data) 68 58
+             520: 22(i16vec4) Load 519
+             521: 22(i16vec4) GroupNonUniformSMax 43 ClusteredReduce 520 42
+             522:    423(ptr) AccessChain 34(data) 518 58
+                              Store 522 521
+             523:      6(int) Load 8(invocation)
+             524:    416(ptr) AccessChain 34(data) 37 58 38
+             525: 21(int16_t) Load 524
+             526: 21(int16_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 525 42
+             527:    416(ptr) AccessChain 34(data) 523 58 38
+                              Store 527 526
+             528:      6(int) Load 8(invocation)
+             529:    423(ptr) AccessChain 34(data) 47 58
+             530: 22(i16vec4) Load 529
+             531:422(i16vec2) VectorShuffle 530 530 0 1
+             532:422(i16vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 531 42
+             533:    423(ptr) AccessChain 34(data) 528 58
+             534: 22(i16vec4) Load 533
+             535: 22(i16vec4) VectorShuffle 534 532 4 5 2 3
+                              Store 533 535
+             536:      6(int) Load 8(invocation)
+             537:    423(ptr) AccessChain 34(data) 58 58
+             538: 22(i16vec4) Load 537
+             539:432(i16vec3) VectorShuffle 538 538 0 1 2
+             540:432(i16vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 539 42
+             541:    423(ptr) AccessChain 34(data) 536 58
+             542: 22(i16vec4) Load 541
+             543: 22(i16vec4) VectorShuffle 542 540 4 5 6 3
+                              Store 541 543
+             544:      6(int) Load 8(invocation)
+             545:    423(ptr) AccessChain 34(data) 68 58
+             546: 22(i16vec4) Load 545
+             547: 22(i16vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 546 42
+             548:    423(ptr) AccessChain 34(data) 544 58
+                              Store 548 547
+             549:      6(int) Load 8(invocation)
+             550:    416(ptr) AccessChain 34(data) 37 58 38
+             551: 21(int16_t) Load 550
+             552: 21(int16_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 551 42
+             553:    416(ptr) AccessChain 34(data) 549 58 38
+                              Store 553 552
+             554:      6(int) Load 8(invocation)
+             555:    423(ptr) AccessChain 34(data) 47 58
+             556: 22(i16vec4) Load 555
+             557:422(i16vec2) VectorShuffle 556 556 0 1
+             558:422(i16vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 557 42
+             559:    423(ptr) AccessChain 34(data) 554 58
+             560: 22(i16vec4) Load 559
+             561: 22(i16vec4) VectorShuffle 560 558 4 5 2 3
+                              Store 559 561
+             562:      6(int) Load 8(invocation)
+             563:    423(ptr) AccessChain 34(data) 58 58
+             564: 22(i16vec4) Load 563
+             565:432(i16vec3) VectorShuffle 564 564 0 1 2
+             566:432(i16vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 565 42
+             567:    423(ptr) AccessChain 34(data) 562 58
+             568: 22(i16vec4) Load 567
+             569: 22(i16vec4) VectorShuffle 568 566 4 5 6 3
+                              Store 567 569
+             570:      6(int) Load 8(invocation)
+             571:    423(ptr) AccessChain 34(data) 68 58
+             572: 22(i16vec4) Load 571
+             573: 22(i16vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 572 42
+             574:    423(ptr) AccessChain 34(data) 570 58
+                              Store 574 573
+             575:      6(int) Load 8(invocation)
+             576:    416(ptr) AccessChain 34(data) 37 58 38
+             577: 21(int16_t) Load 576
+             578: 21(int16_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 577 42
+             579:    416(ptr) AccessChain 34(data) 575 58 38
+                              Store 579 578
+             580:      6(int) Load 8(invocation)
+             581:    423(ptr) AccessChain 34(data) 47 58
+             582: 22(i16vec4) Load 581
+             583:422(i16vec2) VectorShuffle 582 582 0 1
+             584:422(i16vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 583 42
+             585:    423(ptr) AccessChain 34(data) 580 58
+             586: 22(i16vec4) Load 585
+             587: 22(i16vec4) VectorShuffle 586 584 4 5 2 3
+                              Store 585 587
+             588:      6(int) Load 8(invocation)
+             589:    423(ptr) AccessChain 34(data) 58 58
+             590: 22(i16vec4) Load 589
+             591:432(i16vec3) VectorShuffle 590 590 0 1 2
+             592:432(i16vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 591 42
+             593:    423(ptr) AccessChain 34(data) 588 58
+             594: 22(i16vec4) Load 593
+             595: 22(i16vec4) VectorShuffle 594 592 4 5 6 3
+                              Store 593 595
+             596:      6(int) Load 8(invocation)
+             597:    423(ptr) AccessChain 34(data) 68 58
+             598: 22(i16vec4) Load 597
+             599: 22(i16vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 598 42
+             600:    423(ptr) AccessChain 34(data) 596 58
+                              Store 600 599
+             601:      6(int) Load 8(invocation)
+             603:    602(ptr) AccessChain 34(data) 37 68 38
+             604: 23(int16_t) Load 603
+             605: 23(int16_t) GroupNonUniformIAdd 43 ClusteredReduce 604 42
+             606:    602(ptr) AccessChain 34(data) 601 68 38
+                              Store 606 605
+             607:      6(int) Load 8(invocation)
+             610:    609(ptr) AccessChain 34(data) 47 68
+             611: 24(i16vec4) Load 610
+             612:608(i16vec2) VectorShuffle 611 611 0 1
+             613:608(i16vec2) GroupNonUniformIAdd 43 ClusteredReduce 612 42
+             614:    609(ptr) AccessChain 34(data) 607 68
+             615: 24(i16vec4) Load 614
+             616: 24(i16vec4) VectorShuffle 615 613 4 5 2 3
+                              Store 614 616
+             617:      6(int) Load 8(invocation)
+             619:    609(ptr) AccessChain 34(data) 58 68
+             620: 24(i16vec4) Load 619
+             621:618(i16vec3) VectorShuffle 620 620 0 1 2
+             622:618(i16vec3) GroupNonUniformIAdd 43 ClusteredReduce 621 42
+             623:    609(ptr) AccessChain 34(data) 617 68
+             624: 24(i16vec4) Load 623
+             625: 24(i16vec4) VectorShuffle 624 622 4 5 6 3
+                              Store 623 625
+             626:      6(int) Load 8(invocation)
+             627:    609(ptr) AccessChain 34(data) 68 68
+             628: 24(i16vec4) Load 627
+             629: 24(i16vec4) GroupNonUniformIAdd 43 ClusteredReduce 628 42
+             630:    609(ptr) AccessChain 34(data) 626 68
+                              Store 630 629
+             631:      6(int) Load 8(invocation)
+             632:    602(ptr) AccessChain 34(data) 37 68 38
+             633: 23(int16_t) Load 632
+             634: 23(int16_t) GroupNonUniformIMul 43 ClusteredReduce 633 42
+             635:    602(ptr) AccessChain 34(data) 631 68 38
+                              Store 635 634
+             636:      6(int) Load 8(invocation)
+             637:    609(ptr) AccessChain 34(data) 47 68
+             638: 24(i16vec4) Load 637
+             639:608(i16vec2) VectorShuffle 638 638 0 1
+             640:608(i16vec2) GroupNonUniformIMul 43 ClusteredReduce 639 42
+             641:    609(ptr) AccessChain 34(data) 636 68
+             642: 24(i16vec4) Load 641
+             643: 24(i16vec4) VectorShuffle 642 640 4 5 2 3
+                              Store 641 643
+             644:      6(int) Load 8(invocation)
+             645:    609(ptr) AccessChain 34(data) 58 68
+             646: 24(i16vec4) Load 645
+             647:618(i16vec3) VectorShuffle 646 646 0 1 2
+             648:618(i16vec3) GroupNonUniformIMul 43 ClusteredReduce 647 42
+             649:    609(ptr) AccessChain 34(data) 644 68
+             650: 24(i16vec4) Load 649
+             651: 24(i16vec4) VectorShuffle 650 648 4 5 6 3
+                              Store 649 651
+             652:      6(int) Load 8(invocation)
+             653:    609(ptr) AccessChain 34(data) 68 68
+             654: 24(i16vec4) Load 653
+             655: 24(i16vec4) GroupNonUniformIMul 43 ClusteredReduce 654 42
+             656:    609(ptr) AccessChain 34(data) 652 68
+                              Store 656 655
+             657:      6(int) Load 8(invocation)
+             658:    602(ptr) AccessChain 34(data) 37 68 38
+             659: 23(int16_t) Load 658
+             660: 23(int16_t) GroupNonUniformUMin 43 ClusteredReduce 659 42
+             661:    602(ptr) AccessChain 34(data) 657 68 38
+                              Store 661 660
+             662:      6(int) Load 8(invocation)
+             663:    609(ptr) AccessChain 34(data) 47 68
+             664: 24(i16vec4) Load 663
+             665:608(i16vec2) VectorShuffle 664 664 0 1
+             666:608(i16vec2) GroupNonUniformUMin 43 ClusteredReduce 665 42
+             667:    609(ptr) AccessChain 34(data) 662 68
+             668: 24(i16vec4) Load 667
+             669: 24(i16vec4) VectorShuffle 668 666 4 5 2 3
+                              Store 667 669
+             670:      6(int) Load 8(invocation)
+             671:    609(ptr) AccessChain 34(data) 58 68
+             672: 24(i16vec4) Load 671
+             673:618(i16vec3) VectorShuffle 672 672 0 1 2
+             674:618(i16vec3) GroupNonUniformUMin 43 ClusteredReduce 673 42
+             675:    609(ptr) AccessChain 34(data) 670 68
+             676: 24(i16vec4) Load 675
+             677: 24(i16vec4) VectorShuffle 676 674 4 5 6 3
+                              Store 675 677
+             678:      6(int) Load 8(invocation)
+             679:    609(ptr) AccessChain 34(data) 68 68
+             680: 24(i16vec4) Load 679
+             681: 24(i16vec4) GroupNonUniformUMin 43 ClusteredReduce 680 42
+             682:    609(ptr) AccessChain 34(data) 678 68
+                              Store 682 681
+             683:      6(int) Load 8(invocation)
+             684:    602(ptr) AccessChain 34(data) 37 68 38
+             685: 23(int16_t) Load 684
+             686: 23(int16_t) GroupNonUniformUMax 43 ClusteredReduce 685 42
+             687:    602(ptr) AccessChain 34(data) 683 68 38
+                              Store 687 686
+             688:      6(int) Load 8(invocation)
+             689:    609(ptr) AccessChain 34(data) 47 68
+             690: 24(i16vec4) Load 689
+             691:608(i16vec2) VectorShuffle 690 690 0 1
+             692:608(i16vec2) GroupNonUniformUMax 43 ClusteredReduce 691 42
+             693:    609(ptr) AccessChain 34(data) 688 68
+             694: 24(i16vec4) Load 693
+             695: 24(i16vec4) VectorShuffle 694 692 4 5 2 3
+                              Store 693 695
+             696:      6(int) Load 8(invocation)
+             697:    609(ptr) AccessChain 34(data) 58 68
+             698: 24(i16vec4) Load 697
+             699:618(i16vec3) VectorShuffle 698 698 0 1 2
+             700:618(i16vec3) GroupNonUniformUMax 43 ClusteredReduce 699 42
+             701:    609(ptr) AccessChain 34(data) 696 68
+             702: 24(i16vec4) Load 701
+             703: 24(i16vec4) VectorShuffle 702 700 4 5 6 3
+                              Store 701 703
+             704:      6(int) Load 8(invocation)
+             705:    609(ptr) AccessChain 34(data) 68 68
+             706: 24(i16vec4) Load 705
+             707: 24(i16vec4) GroupNonUniformUMax 43 ClusteredReduce 706 42
+             708:    609(ptr) AccessChain 34(data) 704 68
+                              Store 708 707
+             709:      6(int) Load 8(invocation)
+             710:    602(ptr) AccessChain 34(data) 37 68 38
+             711: 23(int16_t) Load 710
+             712: 23(int16_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 711 42
+             713:    602(ptr) AccessChain 34(data) 709 68 38
+                              Store 713 712
+             714:      6(int) Load 8(invocation)
+             715:    609(ptr) AccessChain 34(data) 47 68
+             716: 24(i16vec4) Load 715
+             717:608(i16vec2) VectorShuffle 716 716 0 1
+             718:608(i16vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 717 42
+             719:    609(ptr) AccessChain 34(data) 714 68
+             720: 24(i16vec4) Load 719
+             721: 24(i16vec4) VectorShuffle 720 718 4 5 2 3
+                              Store 719 721
+             722:      6(int) Load 8(invocation)
+             723:    609(ptr) AccessChain 34(data) 58 68
+             724: 24(i16vec4) Load 723
+             725:618(i16vec3) VectorShuffle 724 724 0 1 2
+             726:618(i16vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 725 42
+             727:    609(ptr) AccessChain 34(data) 722 68
+             728: 24(i16vec4) Load 727
+             729: 24(i16vec4) VectorShuffle 728 726 4 5 6 3
+                              Store 727 729
+             730:      6(int) Load 8(invocation)
+             731:    609(ptr) AccessChain 34(data) 68 68
+             732: 24(i16vec4) Load 731
+             733: 24(i16vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 732 42
+             734:    609(ptr) AccessChain 34(data) 730 68
+                              Store 734 733
+             735:      6(int) Load 8(invocation)
+             736:    602(ptr) AccessChain 34(data) 37 68 38
+             737: 23(int16_t) Load 736
+             738: 23(int16_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 737 42
+             739:    602(ptr) AccessChain 34(data) 735 68 38
+                              Store 739 738
+             740:      6(int) Load 8(invocation)
+             741:    609(ptr) AccessChain 34(data) 47 68
+             742: 24(i16vec4) Load 741
+             743:608(i16vec2) VectorShuffle 742 742 0 1
+             744:608(i16vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 743 42
+             745:    609(ptr) AccessChain 34(data) 740 68
+             746: 24(i16vec4) Load 745
+             747: 24(i16vec4) VectorShuffle 746 744 4 5 2 3
+                              Store 745 747
+             748:      6(int) Load 8(invocation)
+             749:    609(ptr) AccessChain 34(data) 58 68
+             750: 24(i16vec4) Load 749
+             751:618(i16vec3) VectorShuffle 750 750 0 1 2
+             752:618(i16vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 751 42
+             753:    609(ptr) AccessChain 34(data) 748 68
+             754: 24(i16vec4) Load 753
+             755: 24(i16vec4) VectorShuffle 754 752 4 5 6 3
+                              Store 753 755
+             756:      6(int) Load 8(invocation)
+             757:    609(ptr) AccessChain 34(data) 68 68
+             758: 24(i16vec4) Load 757
+             759: 24(i16vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 758 42
+             760:    609(ptr) AccessChain 34(data) 756 68
+                              Store 760 759
+             761:      6(int) Load 8(invocation)
+             762:    602(ptr) AccessChain 34(data) 37 68 38
+             763: 23(int16_t) Load 762
+             764: 23(int16_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 763 42
+             765:    602(ptr) AccessChain 34(data) 761 68 38
+                              Store 765 764
+             766:      6(int) Load 8(invocation)
+             767:    609(ptr) AccessChain 34(data) 47 68
+             768: 24(i16vec4) Load 767
+             769:608(i16vec2) VectorShuffle 768 768 0 1
+             770:608(i16vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 769 42
+             771:    609(ptr) AccessChain 34(data) 766 68
+             772: 24(i16vec4) Load 771
+             773: 24(i16vec4) VectorShuffle 772 770 4 5 2 3
+                              Store 771 773
+             774:      6(int) Load 8(invocation)
+             775:    609(ptr) AccessChain 34(data) 58 68
+             776: 24(i16vec4) Load 775
+             777:618(i16vec3) VectorShuffle 776 776 0 1 2
+             778:618(i16vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 777 42
+             779:    609(ptr) AccessChain 34(data) 774 68
+             780: 24(i16vec4) Load 779
+             781: 24(i16vec4) VectorShuffle 780 778 4 5 6 3
+                              Store 779 781
+             782:      6(int) Load 8(invocation)
+             783:    609(ptr) AccessChain 34(data) 68 68
+             784: 24(i16vec4) Load 783
+             785: 24(i16vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 784 42
+             786:    609(ptr) AccessChain 34(data) 782 68
+                              Store 786 785
+             787:      6(int) Load 8(invocation)
+             790:    789(ptr) AccessChain 34(data) 37 788 38
+             791: 25(int64_t) Load 790
+             792: 25(int64_t) GroupNonUniformIAdd 43 ClusteredReduce 791 42
+             793:    789(ptr) AccessChain 34(data) 787 788 38
+                              Store 793 792
+             794:      6(int) Load 8(invocation)
+             797:    796(ptr) AccessChain 34(data) 47 788
+             798: 26(i64vec4) Load 797
+             799:795(i64vec2) VectorShuffle 798 798 0 1
+             800:795(i64vec2) GroupNonUniformIAdd 43 ClusteredReduce 799 42
+             801:    796(ptr) AccessChain 34(data) 794 788
+             802: 26(i64vec4) Load 801
+             803: 26(i64vec4) VectorShuffle 802 800 4 5 2 3
+                              Store 801 803
+             804:      6(int) Load 8(invocation)
+             806:    796(ptr) AccessChain 34(data) 58 788
+             807: 26(i64vec4) Load 806
+             808:805(i64vec3) VectorShuffle 807 807 0 1 2
+             809:805(i64vec3) GroupNonUniformIAdd 43 ClusteredReduce 808 42
+             810:    796(ptr) AccessChain 34(data) 804 788
+             811: 26(i64vec4) Load 810
+             812: 26(i64vec4) VectorShuffle 811 809 4 5 6 3
+                              Store 810 812
+             813:      6(int) Load 8(invocation)
+             814:    796(ptr) AccessChain 34(data) 68 788
+             815: 26(i64vec4) Load 814
+             816: 26(i64vec4) GroupNonUniformIAdd 43 ClusteredReduce 815 42
+             817:    796(ptr) AccessChain 34(data) 813 788
+                              Store 817 816
+             818:      6(int) Load 8(invocation)
+             819:    789(ptr) AccessChain 34(data) 37 788 38
+             820: 25(int64_t) Load 819
+             821: 25(int64_t) GroupNonUniformIMul 43 ClusteredReduce 820 42
+             822:    789(ptr) AccessChain 34(data) 818 788 38
+                              Store 822 821
+             823:      6(int) Load 8(invocation)
+             824:    796(ptr) AccessChain 34(data) 47 788
+             825: 26(i64vec4) Load 824
+             826:795(i64vec2) VectorShuffle 825 825 0 1
+             827:795(i64vec2) GroupNonUniformIMul 43 ClusteredReduce 826 42
+             828:    796(ptr) AccessChain 34(data) 823 788
+             829: 26(i64vec4) Load 828
+             830: 26(i64vec4) VectorShuffle 829 827 4 5 2 3
+                              Store 828 830
+             831:      6(int) Load 8(invocation)
+             832:    796(ptr) AccessChain 34(data) 58 788
+             833: 26(i64vec4) Load 832
+             834:805(i64vec3) VectorShuffle 833 833 0 1 2
+             835:805(i64vec3) GroupNonUniformIMul 43 ClusteredReduce 834 42
+             836:    796(ptr) AccessChain 34(data) 831 788
+             837: 26(i64vec4) Load 836
+             838: 26(i64vec4) VectorShuffle 837 835 4 5 6 3
+                              Store 836 838
+             839:      6(int) Load 8(invocation)
+             840:    796(ptr) AccessChain 34(data) 68 788
+             841: 26(i64vec4) Load 840
+             842: 26(i64vec4) GroupNonUniformIMul 43 ClusteredReduce 841 42
+             843:    796(ptr) AccessChain 34(data) 839 788
+                              Store 843 842
+             844:      6(int) Load 8(invocation)
+             845:    789(ptr) AccessChain 34(data) 37 788 38
+             846: 25(int64_t) Load 845
+             847: 25(int64_t) GroupNonUniformSMin 43 ClusteredReduce 846 42
+             848:    789(ptr) AccessChain 34(data) 844 788 38
+                              Store 848 847
+             849:      6(int) Load 8(invocation)
+             850:    796(ptr) AccessChain 34(data) 47 788
+             851: 26(i64vec4) Load 850
+             852:795(i64vec2) VectorShuffle 851 851 0 1
+             853:795(i64vec2) GroupNonUniformSMin 43 ClusteredReduce 852 42
+             854:    796(ptr) AccessChain 34(data) 849 788
+             855: 26(i64vec4) Load 854
+             856: 26(i64vec4) VectorShuffle 855 853 4 5 2 3
+                              Store 854 856
+             857:      6(int) Load 8(invocation)
+             858:    796(ptr) AccessChain 34(data) 58 788
+             859: 26(i64vec4) Load 858
+             860:805(i64vec3) VectorShuffle 859 859 0 1 2
+             861:805(i64vec3) GroupNonUniformSMin 43 ClusteredReduce 860 42
+             862:    796(ptr) AccessChain 34(data) 857 788
+             863: 26(i64vec4) Load 862
+             864: 26(i64vec4) VectorShuffle 863 861 4 5 6 3
+                              Store 862 864
+             865:      6(int) Load 8(invocation)
+             866:    796(ptr) AccessChain 34(data) 68 788
+             867: 26(i64vec4) Load 866
+             868: 26(i64vec4) GroupNonUniformSMin 43 ClusteredReduce 867 42
+             869:    796(ptr) AccessChain 34(data) 865 788
+                              Store 869 868
+             870:      6(int) Load 8(invocation)
+             871:    789(ptr) AccessChain 34(data) 37 788 38
+             872: 25(int64_t) Load 871
+             873: 25(int64_t) GroupNonUniformSMax 43 ClusteredReduce 872 42
+             874:    789(ptr) AccessChain 34(data) 870 788 38
+                              Store 874 873
+             875:      6(int) Load 8(invocation)
+             876:    796(ptr) AccessChain 34(data) 47 788
+             877: 26(i64vec4) Load 876
+             878:795(i64vec2) VectorShuffle 877 877 0 1
+             879:795(i64vec2) GroupNonUniformSMax 43 ClusteredReduce 878 42
+             880:    796(ptr) AccessChain 34(data) 875 788
+             881: 26(i64vec4) Load 880
+             882: 26(i64vec4) VectorShuffle 881 879 4 5 2 3
+                              Store 880 882
+             883:      6(int) Load 8(invocation)
+             884:    796(ptr) AccessChain 34(data) 58 788
+             885: 26(i64vec4) Load 884
+             886:805(i64vec3) VectorShuffle 885 885 0 1 2
+             887:805(i64vec3) GroupNonUniformSMax 43 ClusteredReduce 886 42
+             888:    796(ptr) AccessChain 34(data) 883 788
+             889: 26(i64vec4) Load 888
+             890: 26(i64vec4) VectorShuffle 889 887 4 5 6 3
+                              Store 888 890
+             891:      6(int) Load 8(invocation)
+             892:    796(ptr) AccessChain 34(data) 68 788
+             893: 26(i64vec4) Load 892
+             894: 26(i64vec4) GroupNonUniformSMax 43 ClusteredReduce 893 42
+             895:    796(ptr) AccessChain 34(data) 891 788
+                              Store 895 894
+             896:      6(int) Load 8(invocation)
+             897:    789(ptr) AccessChain 34(data) 37 788 38
+             898: 25(int64_t) Load 897
+             899: 25(int64_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 898 42
+             900:    789(ptr) AccessChain 34(data) 896 788 38
+                              Store 900 899
+             901:      6(int) Load 8(invocation)
+             902:    796(ptr) AccessChain 34(data) 47 788
+             903: 26(i64vec4) Load 902
+             904:795(i64vec2) VectorShuffle 903 903 0 1
+             905:795(i64vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 904 42
+             906:    796(ptr) AccessChain 34(data) 901 788
+             907: 26(i64vec4) Load 906
+             908: 26(i64vec4) VectorShuffle 907 905 4 5 2 3
+                              Store 906 908
+             909:      6(int) Load 8(invocation)
+             910:    796(ptr) AccessChain 34(data) 58 788
+             911: 26(i64vec4) Load 910
+             912:805(i64vec3) VectorShuffle 911 911 0 1 2
+             913:805(i64vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 912 42
+             914:    796(ptr) AccessChain 34(data) 909 788
+             915: 26(i64vec4) Load 914
+             916: 26(i64vec4) VectorShuffle 915 913 4 5 6 3
+                              Store 914 916
+             917:      6(int) Load 8(invocation)
+             918:    796(ptr) AccessChain 34(data) 68 788
+             919: 26(i64vec4) Load 918
+             920: 26(i64vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 919 42
+             921:    796(ptr) AccessChain 34(data) 917 788
+                              Store 921 920
+             922:      6(int) Load 8(invocation)
+             923:    789(ptr) AccessChain 34(data) 37 788 38
+             924: 25(int64_t) Load 923
+             925: 25(int64_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 924 42
+             926:    789(ptr) AccessChain 34(data) 922 788 38
+                              Store 926 925
+             927:      6(int) Load 8(invocation)
+             928:    796(ptr) AccessChain 34(data) 47 788
+             929: 26(i64vec4) Load 928
+             930:795(i64vec2) VectorShuffle 929 929 0 1
+             931:795(i64vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 930 42
+             932:    796(ptr) AccessChain 34(data) 927 788
+             933: 26(i64vec4) Load 932
+             934: 26(i64vec4) VectorShuffle 933 931 4 5 2 3
+                              Store 932 934
+             935:      6(int) Load 8(invocation)
+             936:    796(ptr) AccessChain 34(data) 58 788
+             937: 26(i64vec4) Load 936
+             938:805(i64vec3) VectorShuffle 937 937 0 1 2
+             939:805(i64vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 938 42
+             940:    796(ptr) AccessChain 34(data) 935 788
+             941: 26(i64vec4) Load 940
+             942: 26(i64vec4) VectorShuffle 941 939 4 5 6 3
+                              Store 940 942
+             943:      6(int) Load 8(invocation)
+             944:    796(ptr) AccessChain 34(data) 68 788
+             945: 26(i64vec4) Load 944
+             946: 26(i64vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 945 42
+             947:    796(ptr) AccessChain 34(data) 943 788
+                              Store 947 946
+             948:      6(int) Load 8(invocation)
+             949:    789(ptr) AccessChain 34(data) 37 788 38
+             950: 25(int64_t) Load 949
+             951: 25(int64_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 950 42
+             952:    789(ptr) AccessChain 34(data) 948 788 38
+                              Store 952 951
+             953:      6(int) Load 8(invocation)
+             954:    796(ptr) AccessChain 34(data) 47 788
+             955: 26(i64vec4) Load 954
+             956:795(i64vec2) VectorShuffle 955 955 0 1
+             957:795(i64vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 956 42
+             958:    796(ptr) AccessChain 34(data) 953 788
+             959: 26(i64vec4) Load 958
+             960: 26(i64vec4) VectorShuffle 959 957 4 5 2 3
+                              Store 958 960
+             961:      6(int) Load 8(invocation)
+             962:    796(ptr) AccessChain 34(data) 58 788
+             963: 26(i64vec4) Load 962
+             964:805(i64vec3) VectorShuffle 963 963 0 1 2
+             965:805(i64vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 964 42
+             966:    796(ptr) AccessChain 34(data) 961 788
+             967: 26(i64vec4) Load 966
+             968: 26(i64vec4) VectorShuffle 967 965 4 5 6 3
+                              Store 966 968
+             969:      6(int) Load 8(invocation)
+             970:    796(ptr) AccessChain 34(data) 68 788
+             971: 26(i64vec4) Load 970
+             972: 26(i64vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 971 42
+             973:    796(ptr) AccessChain 34(data) 969 788
+                              Store 973 972
+             974:      6(int) Load 8(invocation)
+             977:    976(ptr) AccessChain 34(data) 37 975 38
+             978: 27(int64_t) Load 977
+             979: 27(int64_t) GroupNonUniformIAdd 43 ClusteredReduce 978 42
+             980:    976(ptr) AccessChain 34(data) 974 975 38
+                              Store 980 979
+             981:      6(int) Load 8(invocation)
+             984:    983(ptr) AccessChain 34(data) 47 975
+             985: 28(i64vec4) Load 984
+             986:982(i64vec2) VectorShuffle 985 985 0 1
+             987:982(i64vec2) GroupNonUniformIAdd 43 ClusteredReduce 986 42
+             988:    983(ptr) AccessChain 34(data) 981 975
+             989: 28(i64vec4) Load 988
+             990: 28(i64vec4) VectorShuffle 989 987 4 5 2 3
+                              Store 988 990
+             991:      6(int) Load 8(invocation)
+             993:    983(ptr) AccessChain 34(data) 58 975
+             994: 28(i64vec4) Load 993
+             995:992(i64vec3) VectorShuffle 994 994 0 1 2
+             996:992(i64vec3) GroupNonUniformIAdd 43 ClusteredReduce 995 42
+             997:    983(ptr) AccessChain 34(data) 991 975
+             998: 28(i64vec4) Load 997
+             999: 28(i64vec4) VectorShuffle 998 996 4 5 6 3
+                              Store 997 999
+            1000:      6(int) Load 8(invocation)
+            1001:    983(ptr) AccessChain 34(data) 68 975
+            1002: 28(i64vec4) Load 1001
+            1003: 28(i64vec4) GroupNonUniformIAdd 43 ClusteredReduce 1002 42
+            1004:    983(ptr) AccessChain 34(data) 1000 975
+                              Store 1004 1003
+            1005:      6(int) Load 8(invocation)
+            1006:    976(ptr) AccessChain 34(data) 37 975 38
+            1007: 27(int64_t) Load 1006
+            1008: 27(int64_t) GroupNonUniformIMul 43 ClusteredReduce 1007 42
+            1009:    976(ptr) AccessChain 34(data) 1005 975 38
+                              Store 1009 1008
+            1010:      6(int) Load 8(invocation)
+            1011:    983(ptr) AccessChain 34(data) 47 975
+            1012: 28(i64vec4) Load 1011
+            1013:982(i64vec2) VectorShuffle 1012 1012 0 1
+            1014:982(i64vec2) GroupNonUniformIMul 43 ClusteredReduce 1013 42
+            1015:    983(ptr) AccessChain 34(data) 1010 975
+            1016: 28(i64vec4) Load 1015
+            1017: 28(i64vec4) VectorShuffle 1016 1014 4 5 2 3
+                              Store 1015 1017
+            1018:      6(int) Load 8(invocation)
+            1019:    983(ptr) AccessChain 34(data) 58 975
+            1020: 28(i64vec4) Load 1019
+            1021:992(i64vec3) VectorShuffle 1020 1020 0 1 2
+            1022:992(i64vec3) GroupNonUniformIMul 43 ClusteredReduce 1021 42
+            1023:    983(ptr) AccessChain 34(data) 1018 975
+            1024: 28(i64vec4) Load 1023
+            1025: 28(i64vec4) VectorShuffle 1024 1022 4 5 6 3
+                              Store 1023 1025
+            1026:      6(int) Load 8(invocation)
+            1027:    983(ptr) AccessChain 34(data) 68 975
+            1028: 28(i64vec4) Load 1027
+            1029: 28(i64vec4) GroupNonUniformIMul 43 ClusteredReduce 1028 42
+            1030:    983(ptr) AccessChain 34(data) 1026 975
+                              Store 1030 1029
+            1031:      6(int) Load 8(invocation)
+            1032:    976(ptr) AccessChain 34(data) 37 975 38
+            1033: 27(int64_t) Load 1032
+            1034: 27(int64_t) GroupNonUniformUMin 43 ClusteredReduce 1033 42
+            1035:    976(ptr) AccessChain 34(data) 1031 975 38
+                              Store 1035 1034
+            1036:      6(int) Load 8(invocation)
+            1037:    983(ptr) AccessChain 34(data) 47 975
+            1038: 28(i64vec4) Load 1037
+            1039:982(i64vec2) VectorShuffle 1038 1038 0 1
+            1040:982(i64vec2) GroupNonUniformUMin 43 ClusteredReduce 1039 42
+            1041:    983(ptr) AccessChain 34(data) 1036 975
+            1042: 28(i64vec4) Load 1041
+            1043: 28(i64vec4) VectorShuffle 1042 1040 4 5 2 3
+                              Store 1041 1043
+            1044:      6(int) Load 8(invocation)
+            1045:    983(ptr) AccessChain 34(data) 58 975
+            1046: 28(i64vec4) Load 1045
+            1047:992(i64vec3) VectorShuffle 1046 1046 0 1 2
+            1048:992(i64vec3) GroupNonUniformUMin 43 ClusteredReduce 1047 42
+            1049:    983(ptr) AccessChain 34(data) 1044 975
+            1050: 28(i64vec4) Load 1049
+            1051: 28(i64vec4) VectorShuffle 1050 1048 4 5 6 3
+                              Store 1049 1051
+            1052:      6(int) Load 8(invocation)
+            1053:    983(ptr) AccessChain 34(data) 68 975
+            1054: 28(i64vec4) Load 1053
+            1055: 28(i64vec4) GroupNonUniformUMin 43 ClusteredReduce 1054 42
+            1056:    983(ptr) AccessChain 34(data) 1052 975
+                              Store 1056 1055
+            1057:      6(int) Load 8(invocation)
+            1058:    976(ptr) AccessChain 34(data) 37 975 38
+            1059: 27(int64_t) Load 1058
+            1060: 27(int64_t) GroupNonUniformUMax 43 ClusteredReduce 1059 42
+            1061:    976(ptr) AccessChain 34(data) 1057 975 38
+                              Store 1061 1060
+            1062:      6(int) Load 8(invocation)
+            1063:    983(ptr) AccessChain 34(data) 47 975
+            1064: 28(i64vec4) Load 1063
+            1065:982(i64vec2) VectorShuffle 1064 1064 0 1
+            1066:982(i64vec2) GroupNonUniformUMax 43 ClusteredReduce 1065 42
+            1067:    983(ptr) AccessChain 34(data) 1062 975
+            1068: 28(i64vec4) Load 1067
+            1069: 28(i64vec4) VectorShuffle 1068 1066 4 5 2 3
+                              Store 1067 1069
+            1070:      6(int) Load 8(invocation)
+            1071:    983(ptr) AccessChain 34(data) 58 975
+            1072: 28(i64vec4) Load 1071
+            1073:992(i64vec3) VectorShuffle 1072 1072 0 1 2
+            1074:992(i64vec3) GroupNonUniformUMax 43 ClusteredReduce 1073 42
+            1075:    983(ptr) AccessChain 34(data) 1070 975
+            1076: 28(i64vec4) Load 1075
+            1077: 28(i64vec4) VectorShuffle 1076 1074 4 5 6 3
+                              Store 1075 1077
+            1078:      6(int) Load 8(invocation)
+            1079:    983(ptr) AccessChain 34(data) 68 975
+            1080: 28(i64vec4) Load 1079
+            1081: 28(i64vec4) GroupNonUniformUMax 43 ClusteredReduce 1080 42
+            1082:    983(ptr) AccessChain 34(data) 1078 975
+                              Store 1082 1081
+            1083:      6(int) Load 8(invocation)
+            1084:    976(ptr) AccessChain 34(data) 37 975 38
+            1085: 27(int64_t) Load 1084
+            1086: 27(int64_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1085 42
+            1087:    976(ptr) AccessChain 34(data) 1083 975 38
+                              Store 1087 1086
+            1088:      6(int) Load 8(invocation)
+            1089:    983(ptr) AccessChain 34(data) 47 975
+            1090: 28(i64vec4) Load 1089
+            1091:982(i64vec2) VectorShuffle 1090 1090 0 1
+            1092:982(i64vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1091 42
+            1093:    983(ptr) AccessChain 34(data) 1088 975
+            1094: 28(i64vec4) Load 1093
+            1095: 28(i64vec4) VectorShuffle 1094 1092 4 5 2 3
+                              Store 1093 1095
+            1096:      6(int) Load 8(invocation)
+            1097:    983(ptr) AccessChain 34(data) 58 975
+            1098: 28(i64vec4) Load 1097
+            1099:992(i64vec3) VectorShuffle 1098 1098 0 1 2
+            1100:992(i64vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1099 42
+            1101:    983(ptr) AccessChain 34(data) 1096 975
+            1102: 28(i64vec4) Load 1101
+            1103: 28(i64vec4) VectorShuffle 1102 1100 4 5 6 3
+                              Store 1101 1103
+            1104:      6(int) Load 8(invocation)
+            1105:    983(ptr) AccessChain 34(data) 68 975
+            1106: 28(i64vec4) Load 1105
+            1107: 28(i64vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1106 42
+            1108:    983(ptr) AccessChain 34(data) 1104 975
+                              Store 1108 1107
+            1109:      6(int) Load 8(invocation)
+            1110:    976(ptr) AccessChain 34(data) 37 975 38
+            1111: 27(int64_t) Load 1110
+            1112: 27(int64_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 1111 42
+            1113:    976(ptr) AccessChain 34(data) 1109 975 38
+                              Store 1113 1112
+            1114:      6(int) Load 8(invocation)
+            1115:    983(ptr) AccessChain 34(data) 47 975
+            1116: 28(i64vec4) Load 1115
+            1117:982(i64vec2) VectorShuffle 1116 1116 0 1
+            1118:982(i64vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 1117 42
+            1119:    983(ptr) AccessChain 34(data) 1114 975
+            1120: 28(i64vec4) Load 1119
+            1121: 28(i64vec4) VectorShuffle 1120 1118 4 5 2 3
+                              Store 1119 1121
+            1122:      6(int) Load 8(invocation)
+            1123:    983(ptr) AccessChain 34(data) 58 975
+            1124: 28(i64vec4) Load 1123
+            1125:992(i64vec3) VectorShuffle 1124 1124 0 1 2
+            1126:992(i64vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 1125 42
+            1127:    983(ptr) AccessChain 34(data) 1122 975
+            1128: 28(i64vec4) Load 1127
+            1129: 28(i64vec4) VectorShuffle 1128 1126 4 5 6 3
+                              Store 1127 1129
+            1130:      6(int) Load 8(invocation)
+            1131:    983(ptr) AccessChain 34(data) 68 975
+            1132: 28(i64vec4) Load 1131
+            1133: 28(i64vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 1132 42
+            1134:    983(ptr) AccessChain 34(data) 1130 975
+                              Store 1134 1133
+            1135:      6(int) Load 8(invocation)
+            1136:    976(ptr) AccessChain 34(data) 37 975 38
+            1137: 27(int64_t) Load 1136
+            1138: 27(int64_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 1137 42
+            1139:    976(ptr) AccessChain 34(data) 1135 975 38
+                              Store 1139 1138
+            1140:      6(int) Load 8(invocation)
+            1141:    983(ptr) AccessChain 34(data) 47 975
+            1142: 28(i64vec4) Load 1141
+            1143:982(i64vec2) VectorShuffle 1142 1142 0 1
+            1144:982(i64vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 1143 42
+            1145:    983(ptr) AccessChain 34(data) 1140 975
+            1146: 28(i64vec4) Load 1145
+            1147: 28(i64vec4) VectorShuffle 1146 1144 4 5 2 3
+                              Store 1145 1147
+            1148:      6(int) Load 8(invocation)
+            1149:    983(ptr) AccessChain 34(data) 58 975
+            1150: 28(i64vec4) Load 1149
+            1151:992(i64vec3) VectorShuffle 1150 1150 0 1 2
+            1152:992(i64vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 1151 42
+            1153:    983(ptr) AccessChain 34(data) 1148 975
+            1154: 28(i64vec4) Load 1153
+            1155: 28(i64vec4) VectorShuffle 1154 1152 4 5 6 3
+                              Store 1153 1155
+            1156:      6(int) Load 8(invocation)
+            1157:    983(ptr) AccessChain 34(data) 68 975
+            1158: 28(i64vec4) Load 1157
+            1159: 28(i64vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 1158 42
+            1160:    983(ptr) AccessChain 34(data) 1156 975
+                              Store 1160 1159
+            1161:      6(int) Load 8(invocation)
+            1164:   1163(ptr) AccessChain 34(data) 37 1162 38
+            1165:29(float16_t) Load 1164
+            1166:29(float16_t) GroupNonUniformFAdd 43 ClusteredReduce 1165 42
+            1167:   1163(ptr) AccessChain 34(data) 1161 1162 38
+                              Store 1167 1166
+            1168:      6(int) Load 8(invocation)
+            1171:   1170(ptr) AccessChain 34(data) 47 1162
+            1172: 30(f16vec4) Load 1171
+            1173:1169(f16vec2) VectorShuffle 1172 1172 0 1
+            1174:1169(f16vec2) GroupNonUniformFAdd 43 ClusteredReduce 1173 42
+            1175:   1170(ptr) AccessChain 34(data) 1168 1162
+            1176: 30(f16vec4) Load 1175
+            1177: 30(f16vec4) VectorShuffle 1176 1174 4 5 2 3
+                              Store 1175 1177
+            1178:      6(int) Load 8(invocation)
+            1180:   1170(ptr) AccessChain 34(data) 58 1162
+            1181: 30(f16vec4) Load 1180
+            1182:1179(f16vec3) VectorShuffle 1181 1181 0 1 2
+            1183:1179(f16vec3) GroupNonUniformFAdd 43 ClusteredReduce 1182 42
+            1184:   1170(ptr) AccessChain 34(data) 1178 1162
+            1185: 30(f16vec4) Load 1184
+            1186: 30(f16vec4) VectorShuffle 1185 1183 4 5 6 3
+                              Store 1184 1186
+            1187:      6(int) Load 8(invocation)
+            1188:   1170(ptr) AccessChain 34(data) 68 1162
+            1189: 30(f16vec4) Load 1188
+            1190: 30(f16vec4) GroupNonUniformFAdd 43 ClusteredReduce 1189 42
+            1191:   1170(ptr) AccessChain 34(data) 1187 1162
+                              Store 1191 1190
+            1192:      6(int) Load 8(invocation)
+            1193:   1163(ptr) AccessChain 34(data) 37 1162 38
+            1194:29(float16_t) Load 1193
+            1195:29(float16_t) GroupNonUniformFMul 43 ClusteredReduce 1194 42
+            1196:   1163(ptr) AccessChain 34(data) 1192 1162 38
+                              Store 1196 1195
+            1197:      6(int) Load 8(invocation)
+            1198:   1170(ptr) AccessChain 34(data) 47 1162
+            1199: 30(f16vec4) Load 1198
+            1200:1169(f16vec2) VectorShuffle 1199 1199 0 1
+            1201:1169(f16vec2) GroupNonUniformFMul 43 ClusteredReduce 1200 42
+            1202:   1170(ptr) AccessChain 34(data) 1197 1162
+            1203: 30(f16vec4) Load 1202
+            1204: 30(f16vec4) VectorShuffle 1203 1201 4 5 2 3
+                              Store 1202 1204
+            1205:      6(int) Load 8(invocation)
+            1206:   1170(ptr) AccessChain 34(data) 58 1162
+            1207: 30(f16vec4) Load 1206
+            1208:1179(f16vec3) VectorShuffle 1207 1207 0 1 2
+            1209:1179(f16vec3) GroupNonUniformFMul 43 ClusteredReduce 1208 42
+            1210:   1170(ptr) AccessChain 34(data) 1205 1162
+            1211: 30(f16vec4) Load 1210
+            1212: 30(f16vec4) VectorShuffle 1211 1209 4 5 6 3
+                              Store 1210 1212
+            1213:      6(int) Load 8(invocation)
+            1214:   1170(ptr) AccessChain 34(data) 68 1162
+            1215: 30(f16vec4) Load 1214
+            1216: 30(f16vec4) GroupNonUniformFMul 43 ClusteredReduce 1215 42
+            1217:   1170(ptr) AccessChain 34(data) 1213 1162
+                              Store 1217 1216
+            1218:      6(int) Load 8(invocation)
+            1219:   1163(ptr) AccessChain 34(data) 37 1162 38
+            1220:29(float16_t) Load 1219
+            1221:29(float16_t) GroupNonUniformFMin 43 ClusteredReduce 1220 42
+            1222:   1163(ptr) AccessChain 34(data) 1218 1162 38
+                              Store 1222 1221
+            1223:      6(int) Load 8(invocation)
+            1224:   1170(ptr) AccessChain 34(data) 47 1162
+            1225: 30(f16vec4) Load 1224
+            1226:1169(f16vec2) VectorShuffle 1225 1225 0 1
+            1227:1169(f16vec2) GroupNonUniformFMin 43 ClusteredReduce 1226 42
+            1228:   1170(ptr) AccessChain 34(data) 1223 1162
+            1229: 30(f16vec4) Load 1228
+            1230: 30(f16vec4) VectorShuffle 1229 1227 4 5 2 3
+                              Store 1228 1230
+            1231:      6(int) Load 8(invocation)
+            1232:   1170(ptr) AccessChain 34(data) 58 1162
+            1233: 30(f16vec4) Load 1232
+            1234:1179(f16vec3) VectorShuffle 1233 1233 0 1 2
+            1235:1179(f16vec3) GroupNonUniformFMin 43 ClusteredReduce 1234 42
+            1236:   1170(ptr) AccessChain 34(data) 1231 1162
+            1237: 30(f16vec4) Load 1236
+            1238: 30(f16vec4) VectorShuffle 1237 1235 4 5 6 3
+                              Store 1236 1238
+            1239:      6(int) Load 8(invocation)
+            1240:   1170(ptr) AccessChain 34(data) 68 1162
+            1241: 30(f16vec4) Load 1240
+            1242: 30(f16vec4) GroupNonUniformFMin 43 ClusteredReduce 1241 42
+            1243:   1170(ptr) AccessChain 34(data) 1239 1162
+                              Store 1243 1242
+            1244:      6(int) Load 8(invocation)
+            1245:   1163(ptr) AccessChain 34(data) 37 1162 38
+            1246:29(float16_t) Load 1245
+            1247:29(float16_t) GroupNonUniformFMax 43 ClusteredReduce 1246 42
+            1248:   1163(ptr) AccessChain 34(data) 1244 1162 38
+                              Store 1248 1247
+            1249:      6(int) Load 8(invocation)
+            1250:   1170(ptr) AccessChain 34(data) 47 1162
+            1251: 30(f16vec4) Load 1250
+            1252:1169(f16vec2) VectorShuffle 1251 1251 0 1
+            1253:1169(f16vec2) GroupNonUniformFMax 43 ClusteredReduce 1252 42
+            1254:   1170(ptr) AccessChain 34(data) 1249 1162
+            1255: 30(f16vec4) Load 1254
+            1256: 30(f16vec4) VectorShuffle 1255 1253 4 5 2 3
+                              Store 1254 1256
+            1257:      6(int) Load 8(invocation)
+            1258:   1170(ptr) AccessChain 34(data) 58 1162
+            1259: 30(f16vec4) Load 1258
+            1260:1179(f16vec3) VectorShuffle 1259 1259 0 1 2
+            1261:1179(f16vec3) GroupNonUniformFMax 43 ClusteredReduce 1260 42
+            1262:   1170(ptr) AccessChain 34(data) 1257 1162
+            1263: 30(f16vec4) Load 1262
+            1264: 30(f16vec4) VectorShuffle 1263 1261 4 5 6 3
+                              Store 1262 1264
+            1265:      6(int) Load 8(invocation)
+            1266:   1170(ptr) AccessChain 34(data) 68 1162
+            1267: 30(f16vec4) Load 1266
+            1268: 30(f16vec4) GroupNonUniformFMax 43 ClusteredReduce 1267 42
+            1269:   1170(ptr) AccessChain 34(data) 1265 1162
+                              Store 1269 1268
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupExtendedTypesClusteredNeg.comp.out b/Test/baseResults/spv.subgroupExtendedTypesClusteredNeg.comp.out
new file mode 100644
index 0000000..fd01ef3
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesClusteredNeg.comp.out
@@ -0,0 +1,189 @@
+spv.subgroupExtendedTypesClusteredNeg.comp
+ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:43: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:46: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:47: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:48: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:51: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:52: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:53: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:56: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:57: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:58: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:61: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:62: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:63: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:66: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:67: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:68: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:71: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:72: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:73: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:76: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:77: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:78: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:81: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:82: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:83: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:86: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:87: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:88: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:89: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:91: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:92: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:93: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:94: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:96: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:97: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:98: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:99: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:101: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:102: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:103: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:104: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:106: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:107: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:108: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:109: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:111: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:112: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:113: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:114: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:116: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:117: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:118: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:119: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:121: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:122: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:123: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:124: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:126: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:127: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:128: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:129: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:131: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:132: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:133: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:134: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:136: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:137: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:138: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:139: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:141: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:142: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:143: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:144: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:146: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:147: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:148: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:149: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:151: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:152: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:153: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:154: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:156: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:157: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:158: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:159: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:161: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:162: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:163: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:164: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:166: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:167: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:168: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:169: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:171: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:172: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:173: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:174: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:176: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:177: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:178: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:179: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:181: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:182: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:183: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:184: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:186: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:187: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:188: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:189: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:191: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:192: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:193: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:194: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:196: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:197: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:198: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:199: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:201: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:202: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:203: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:204: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:206: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:207: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:208: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:209: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:211: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:212: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:213: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:214: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:216: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:217: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:218: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:219: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:221: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:222: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:223: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:224: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:226: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:227: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:228: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:229: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:231: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:232: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:233: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:234: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:236: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:237: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:238: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:239: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:241: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:242: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:243: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:244: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:246: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:247: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:248: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:249: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:251: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:252: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:253: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:254: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 184 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
new file mode 100644
index 0000000..2f5a570
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
@@ -0,0 +1,1835 @@
+spv.subgroupExtendedTypesPartitioned.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 1558
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability GroupNonUniform
+                              Capability StorageUniformBufferBlock16
+                              Capability StorageBuffer8BitAccess
+                              Capability GroupNonUniformPartitionedNV
+                              Extension  "SPV_KHR_8bit_storage"
+                              Extension  "SPV_NV_shader_subgroup_partitioned"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_float16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int64"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int8"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_NV_shader_subgroup_partitioned"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 19  "ballot"
+                              Name 34  "Buffers"
+                              MemberName 34(Buffers) 0  "i8"
+                              MemberName 34(Buffers) 1  "u8"
+                              MemberName 34(Buffers) 2  "i16"
+                              MemberName 34(Buffers) 3  "u16"
+                              MemberName 34(Buffers) 4  "i64"
+                              MemberName 34(Buffers) 5  "u64"
+                              MemberName 34(Buffers) 6  "f16"
+                              Name 37  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 34(Buffers) 0 Offset 0
+                              MemberDecorate 34(Buffers) 1 Offset 4
+                              MemberDecorate 34(Buffers) 2 Offset 8
+                              MemberDecorate 34(Buffers) 3 Offset 16
+                              MemberDecorate 34(Buffers) 4 Offset 32
+                              MemberDecorate 34(Buffers) 5 Offset 64
+                              MemberDecorate 34(Buffers) 6 Offset 96
+                              Decorate 34(Buffers) Block
+                              Decorate 37(data) DescriptorSet 0
+                              Decorate 37(data) Binding 0
+                              Decorate 1557 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeVector 6(int) 4
+              18:             TypePointer Function 17(ivec4)
+              20:             TypeInt 8 1
+              21:             TypeVector 20(int8_t) 4
+              22:             TypeInt 8 0
+              23:             TypeVector 22(int8_t) 4
+              24:             TypeInt 16 1
+              25:             TypeVector 24(int16_t) 4
+              26:             TypeInt 16 0
+              27:             TypeVector 26(int16_t) 4
+              28:             TypeInt 64 1
+              29:             TypeVector 28(int64_t) 4
+              30:             TypeInt 64 0
+              31:             TypeVector 30(int64_t) 4
+              32:             TypeFloat 16
+              33:             TypeVector 32(float16_t) 4
+     34(Buffers):             TypeStruct 21(i8vec4) 23(i8vec4) 25(i16vec4) 27(i16vec4) 29(i64vec4) 31(i64vec4) 33(f16vec4)
+              35:             TypeArray 34(Buffers) 15
+              36:             TypePointer StorageBuffer 35
+        37(data):     36(ptr) Variable StorageBuffer
+              38:             TypeInt 32 1
+              39:     38(int) Constant 0
+              40:      6(int) Constant 0
+              41:             TypePointer StorageBuffer 20(int8_t)
+              45:     38(int) Constant 1
+              46:             TypeVector 20(int8_t) 2
+              47:             TypePointer StorageBuffer 21(i8vec4)
+              52:     38(int) Constant 2
+              53:             TypeVector 20(int8_t) 3
+              58:     38(int) Constant 3
+              62:             TypePointer StorageBuffer 22(int8_t)
+              66:             TypeVector 22(int8_t) 2
+              67:             TypePointer StorageBuffer 23(i8vec4)
+              72:             TypeVector 22(int8_t) 3
+              80:             TypePointer StorageBuffer 24(int16_t)
+              84:             TypeVector 24(int16_t) 2
+              85:             TypePointer StorageBuffer 25(i16vec4)
+              90:             TypeVector 24(int16_t) 3
+              98:             TypePointer StorageBuffer 26(int16_t)
+             102:             TypeVector 26(int16_t) 2
+             103:             TypePointer StorageBuffer 27(i16vec4)
+             108:             TypeVector 26(int16_t) 3
+             116:     38(int) Constant 4
+             117:             TypePointer StorageBuffer 28(int64_t)
+             121:             TypeVector 28(int64_t) 2
+             122:             TypePointer StorageBuffer 29(i64vec4)
+             127:             TypeVector 28(int64_t) 3
+             135:     38(int) Constant 5
+             136:             TypePointer StorageBuffer 30(int64_t)
+             140:             TypeVector 30(int64_t) 2
+             141:             TypePointer StorageBuffer 31(i64vec4)
+             146:             TypeVector 30(int64_t) 3
+             154:     38(int) Constant 6
+             155:             TypePointer StorageBuffer 32(float16_t)
+             159:             TypeVector 32(float16_t) 2
+             160:             TypePointer StorageBuffer 33(f16vec4)
+             165:             TypeVector 32(float16_t) 3
+             177:      6(int) Constant 3
+            1554:             TypeVector 6(int) 3
+            1555:      6(int) Constant 8
+            1556:      6(int) Constant 1
+            1557: 1554(ivec3) ConstantComposite 1555 1556 1556
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+      19(ballot):     18(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              42:     41(ptr) AccessChain 37(data) 39 39 40
+              43:  20(int8_t) Load 42
+              44:   17(ivec4) GroupNonUniformPartitionNV 43
+                              Store 19(ballot) 44
+              48:     47(ptr) AccessChain 37(data) 45 39
+              49:  21(i8vec4) Load 48
+              50:  46(i8vec2) VectorShuffle 49 49 0 1
+              51:   17(ivec4) GroupNonUniformPartitionNV 50
+                              Store 19(ballot) 51
+              54:     47(ptr) AccessChain 37(data) 52 39
+              55:  21(i8vec4) Load 54
+              56:  53(i8vec3) VectorShuffle 55 55 0 1 2
+              57:   17(ivec4) GroupNonUniformPartitionNV 56
+                              Store 19(ballot) 57
+              59:     47(ptr) AccessChain 37(data) 58 39
+              60:  21(i8vec4) Load 59
+              61:   17(ivec4) GroupNonUniformPartitionNV 60
+                              Store 19(ballot) 61
+              63:     62(ptr) AccessChain 37(data) 39 45 40
+              64:  22(int8_t) Load 63
+              65:   17(ivec4) GroupNonUniformPartitionNV 64
+                              Store 19(ballot) 65
+              68:     67(ptr) AccessChain 37(data) 45 45
+              69:  23(i8vec4) Load 68
+              70:  66(i8vec2) VectorShuffle 69 69 0 1
+              71:   17(ivec4) GroupNonUniformPartitionNV 70
+                              Store 19(ballot) 71
+              73:     67(ptr) AccessChain 37(data) 52 45
+              74:  23(i8vec4) Load 73
+              75:  72(i8vec3) VectorShuffle 74 74 0 1 2
+              76:   17(ivec4) GroupNonUniformPartitionNV 75
+                              Store 19(ballot) 76
+              77:     67(ptr) AccessChain 37(data) 58 45
+              78:  23(i8vec4) Load 77
+              79:   17(ivec4) GroupNonUniformPartitionNV 78
+                              Store 19(ballot) 79
+              81:     80(ptr) AccessChain 37(data) 39 52 40
+              82: 24(int16_t) Load 81
+              83:   17(ivec4) GroupNonUniformPartitionNV 82
+                              Store 19(ballot) 83
+              86:     85(ptr) AccessChain 37(data) 45 52
+              87: 25(i16vec4) Load 86
+              88: 84(i16vec2) VectorShuffle 87 87 0 1
+              89:   17(ivec4) GroupNonUniformPartitionNV 88
+                              Store 19(ballot) 89
+              91:     85(ptr) AccessChain 37(data) 52 52
+              92: 25(i16vec4) Load 91
+              93: 90(i16vec3) VectorShuffle 92 92 0 1 2
+              94:   17(ivec4) GroupNonUniformPartitionNV 93
+                              Store 19(ballot) 94
+              95:     85(ptr) AccessChain 37(data) 58 52
+              96: 25(i16vec4) Load 95
+              97:   17(ivec4) GroupNonUniformPartitionNV 96
+                              Store 19(ballot) 97
+              99:     98(ptr) AccessChain 37(data) 39 58 40
+             100: 26(int16_t) Load 99
+             101:   17(ivec4) GroupNonUniformPartitionNV 100
+                              Store 19(ballot) 101
+             104:    103(ptr) AccessChain 37(data) 45 58
+             105: 27(i16vec4) Load 104
+             106:102(i16vec2) VectorShuffle 105 105 0 1
+             107:   17(ivec4) GroupNonUniformPartitionNV 106
+                              Store 19(ballot) 107
+             109:    103(ptr) AccessChain 37(data) 52 58
+             110: 27(i16vec4) Load 109
+             111:108(i16vec3) VectorShuffle 110 110 0 1 2
+             112:   17(ivec4) GroupNonUniformPartitionNV 111
+                              Store 19(ballot) 112
+             113:    103(ptr) AccessChain 37(data) 58 58
+             114: 27(i16vec4) Load 113
+             115:   17(ivec4) GroupNonUniformPartitionNV 114
+                              Store 19(ballot) 115
+             118:    117(ptr) AccessChain 37(data) 39 116 40
+             119: 28(int64_t) Load 118
+             120:   17(ivec4) GroupNonUniformPartitionNV 119
+                              Store 19(ballot) 120
+             123:    122(ptr) AccessChain 37(data) 45 116
+             124: 29(i64vec4) Load 123
+             125:121(i64vec2) VectorShuffle 124 124 0 1
+             126:   17(ivec4) GroupNonUniformPartitionNV 125
+                              Store 19(ballot) 126
+             128:    122(ptr) AccessChain 37(data) 52 116
+             129: 29(i64vec4) Load 128
+             130:127(i64vec3) VectorShuffle 129 129 0 1 2
+             131:   17(ivec4) GroupNonUniformPartitionNV 130
+                              Store 19(ballot) 131
+             132:    122(ptr) AccessChain 37(data) 58 116
+             133: 29(i64vec4) Load 132
+             134:   17(ivec4) GroupNonUniformPartitionNV 133
+                              Store 19(ballot) 134
+             137:    136(ptr) AccessChain 37(data) 39 135 40
+             138: 30(int64_t) Load 137
+             139:   17(ivec4) GroupNonUniformPartitionNV 138
+                              Store 19(ballot) 139
+             142:    141(ptr) AccessChain 37(data) 45 135
+             143: 31(i64vec4) Load 142
+             144:140(i64vec2) VectorShuffle 143 143 0 1
+             145:   17(ivec4) GroupNonUniformPartitionNV 144
+                              Store 19(ballot) 145
+             147:    141(ptr) AccessChain 37(data) 52 135
+             148: 31(i64vec4) Load 147
+             149:146(i64vec3) VectorShuffle 148 148 0 1 2
+             150:   17(ivec4) GroupNonUniformPartitionNV 149
+                              Store 19(ballot) 150
+             151:    141(ptr) AccessChain 37(data) 58 135
+             152: 31(i64vec4) Load 151
+             153:   17(ivec4) GroupNonUniformPartitionNV 152
+                              Store 19(ballot) 153
+             156:    155(ptr) AccessChain 37(data) 39 154 40
+             157:32(float16_t) Load 156
+             158:   17(ivec4) GroupNonUniformPartitionNV 157
+                              Store 19(ballot) 158
+             161:    160(ptr) AccessChain 37(data) 45 154
+             162: 33(f16vec4) Load 161
+             163:159(f16vec2) VectorShuffle 162 162 0 1
+             164:   17(ivec4) GroupNonUniformPartitionNV 163
+                              Store 19(ballot) 164
+             166:    160(ptr) AccessChain 37(data) 52 154
+             167: 33(f16vec4) Load 166
+             168:165(f16vec3) VectorShuffle 167 167 0 1 2
+             169:   17(ivec4) GroupNonUniformPartitionNV 168
+                              Store 19(ballot) 169
+             170:    160(ptr) AccessChain 37(data) 58 154
+             171: 33(f16vec4) Load 170
+             172:   17(ivec4) GroupNonUniformPartitionNV 171
+                              Store 19(ballot) 172
+             173:      6(int) Load 8(invocation)
+             174:     41(ptr) AccessChain 37(data) 39 39 40
+             175:  20(int8_t) Load 174
+             176:   17(ivec4) Load 19(ballot)
+             178:  20(int8_t) GroupNonUniformIAdd 177 PartitionedReduceNV 175 176
+             179:     41(ptr) AccessChain 37(data) 173 39 40
+                              Store 179 178
+             180:      6(int) Load 8(invocation)
+             181:     47(ptr) AccessChain 37(data) 45 39
+             182:  21(i8vec4) Load 181
+             183:  46(i8vec2) VectorShuffle 182 182 0 1
+             184:   17(ivec4) Load 19(ballot)
+             185:  46(i8vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 183 184
+             186:     47(ptr) AccessChain 37(data) 180 39
+             187:  21(i8vec4) Load 186
+             188:  21(i8vec4) VectorShuffle 187 185 4 5 2 3
+                              Store 186 188
+             189:      6(int) Load 8(invocation)
+             190:     47(ptr) AccessChain 37(data) 52 39
+             191:  21(i8vec4) Load 190
+             192:  53(i8vec3) VectorShuffle 191 191 0 1 2
+             193:   17(ivec4) Load 19(ballot)
+             194:  53(i8vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 192 193
+             195:     47(ptr) AccessChain 37(data) 189 39
+             196:  21(i8vec4) Load 195
+             197:  21(i8vec4) VectorShuffle 196 194 4 5 6 3
+                              Store 195 197
+             198:      6(int) Load 8(invocation)
+             199:     47(ptr) AccessChain 37(data) 58 39
+             200:  21(i8vec4) Load 199
+             201:   17(ivec4) Load 19(ballot)
+             202:  21(i8vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 200 201
+             203:     47(ptr) AccessChain 37(data) 198 39
+                              Store 203 202
+             204:      6(int) Load 8(invocation)
+             205:     41(ptr) AccessChain 37(data) 39 39 40
+             206:  20(int8_t) Load 205
+             207:   17(ivec4) Load 19(ballot)
+             208:  20(int8_t) GroupNonUniformIMul 177 PartitionedReduceNV 206 207
+             209:     41(ptr) AccessChain 37(data) 204 39 40
+                              Store 209 208
+             210:      6(int) Load 8(invocation)
+             211:     47(ptr) AccessChain 37(data) 45 39
+             212:  21(i8vec4) Load 211
+             213:  46(i8vec2) VectorShuffle 212 212 0 1
+             214:   17(ivec4) Load 19(ballot)
+             215:  46(i8vec2) GroupNonUniformIMul 177 PartitionedReduceNV 213 214
+             216:     47(ptr) AccessChain 37(data) 210 39
+             217:  21(i8vec4) Load 216
+             218:  21(i8vec4) VectorShuffle 217 215 4 5 2 3
+                              Store 216 218
+             219:      6(int) Load 8(invocation)
+             220:     47(ptr) AccessChain 37(data) 52 39
+             221:  21(i8vec4) Load 220
+             222:  53(i8vec3) VectorShuffle 221 221 0 1 2
+             223:   17(ivec4) Load 19(ballot)
+             224:  53(i8vec3) GroupNonUniformIMul 177 PartitionedReduceNV 222 223
+             225:     47(ptr) AccessChain 37(data) 219 39
+             226:  21(i8vec4) Load 225
+             227:  21(i8vec4) VectorShuffle 226 224 4 5 6 3
+                              Store 225 227
+             228:      6(int) Load 8(invocation)
+             229:     47(ptr) AccessChain 37(data) 58 39
+             230:  21(i8vec4) Load 229
+             231:   17(ivec4) Load 19(ballot)
+             232:  21(i8vec4) GroupNonUniformIMul 177 PartitionedReduceNV 230 231
+             233:     47(ptr) AccessChain 37(data) 228 39
+                              Store 233 232
+             234:      6(int) Load 8(invocation)
+             235:     41(ptr) AccessChain 37(data) 39 39 40
+             236:  20(int8_t) Load 235
+             237:   17(ivec4) Load 19(ballot)
+             238:  20(int8_t) GroupNonUniformSMin 177 PartitionedReduceNV 236 237
+             239:     41(ptr) AccessChain 37(data) 234 39 40
+                              Store 239 238
+             240:      6(int) Load 8(invocation)
+             241:     47(ptr) AccessChain 37(data) 45 39
+             242:  21(i8vec4) Load 241
+             243:  46(i8vec2) VectorShuffle 242 242 0 1
+             244:   17(ivec4) Load 19(ballot)
+             245:  46(i8vec2) GroupNonUniformSMin 177 PartitionedReduceNV 243 244
+             246:     47(ptr) AccessChain 37(data) 240 39
+             247:  21(i8vec4) Load 246
+             248:  21(i8vec4) VectorShuffle 247 245 4 5 2 3
+                              Store 246 248
+             249:      6(int) Load 8(invocation)
+             250:     47(ptr) AccessChain 37(data) 52 39
+             251:  21(i8vec4) Load 250
+             252:  53(i8vec3) VectorShuffle 251 251 0 1 2
+             253:   17(ivec4) Load 19(ballot)
+             254:  53(i8vec3) GroupNonUniformSMin 177 PartitionedReduceNV 252 253
+             255:     47(ptr) AccessChain 37(data) 249 39
+             256:  21(i8vec4) Load 255
+             257:  21(i8vec4) VectorShuffle 256 254 4 5 6 3
+                              Store 255 257
+             258:      6(int) Load 8(invocation)
+             259:     47(ptr) AccessChain 37(data) 58 39
+             260:  21(i8vec4) Load 259
+             261:   17(ivec4) Load 19(ballot)
+             262:  21(i8vec4) GroupNonUniformSMin 177 PartitionedReduceNV 260 261
+             263:     47(ptr) AccessChain 37(data) 258 39
+                              Store 263 262
+             264:      6(int) Load 8(invocation)
+             265:     41(ptr) AccessChain 37(data) 39 39 40
+             266:  20(int8_t) Load 265
+             267:   17(ivec4) Load 19(ballot)
+             268:  20(int8_t) GroupNonUniformSMax 177 PartitionedReduceNV 266 267
+             269:     41(ptr) AccessChain 37(data) 264 39 40
+                              Store 269 268
+             270:      6(int) Load 8(invocation)
+             271:     47(ptr) AccessChain 37(data) 45 39
+             272:  21(i8vec4) Load 271
+             273:  46(i8vec2) VectorShuffle 272 272 0 1
+             274:   17(ivec4) Load 19(ballot)
+             275:  46(i8vec2) GroupNonUniformSMax 177 PartitionedReduceNV 273 274
+             276:     47(ptr) AccessChain 37(data) 270 39
+             277:  21(i8vec4) Load 276
+             278:  21(i8vec4) VectorShuffle 277 275 4 5 2 3
+                              Store 276 278
+             279:      6(int) Load 8(invocation)
+             280:     47(ptr) AccessChain 37(data) 52 39
+             281:  21(i8vec4) Load 280
+             282:  53(i8vec3) VectorShuffle 281 281 0 1 2
+             283:   17(ivec4) Load 19(ballot)
+             284:  53(i8vec3) GroupNonUniformSMax 177 PartitionedReduceNV 282 283
+             285:     47(ptr) AccessChain 37(data) 279 39
+             286:  21(i8vec4) Load 285
+             287:  21(i8vec4) VectorShuffle 286 284 4 5 6 3
+                              Store 285 287
+             288:      6(int) Load 8(invocation)
+             289:     47(ptr) AccessChain 37(data) 58 39
+             290:  21(i8vec4) Load 289
+             291:   17(ivec4) Load 19(ballot)
+             292:  21(i8vec4) GroupNonUniformSMax 177 PartitionedReduceNV 290 291
+             293:     47(ptr) AccessChain 37(data) 288 39
+                              Store 293 292
+             294:      6(int) Load 8(invocation)
+             295:     41(ptr) AccessChain 37(data) 39 39 40
+             296:  20(int8_t) Load 295
+             297:   17(ivec4) Load 19(ballot)
+             298:  20(int8_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 296 297
+             299:     41(ptr) AccessChain 37(data) 294 39 40
+                              Store 299 298
+             300:      6(int) Load 8(invocation)
+             301:     47(ptr) AccessChain 37(data) 45 39
+             302:  21(i8vec4) Load 301
+             303:  46(i8vec2) VectorShuffle 302 302 0 1
+             304:   17(ivec4) Load 19(ballot)
+             305:  46(i8vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 303 304
+             306:     47(ptr) AccessChain 37(data) 300 39
+             307:  21(i8vec4) Load 306
+             308:  21(i8vec4) VectorShuffle 307 305 4 5 2 3
+                              Store 306 308
+             309:      6(int) Load 8(invocation)
+             310:     47(ptr) AccessChain 37(data) 52 39
+             311:  21(i8vec4) Load 310
+             312:  53(i8vec3) VectorShuffle 311 311 0 1 2
+             313:   17(ivec4) Load 19(ballot)
+             314:  53(i8vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 312 313
+             315:     47(ptr) AccessChain 37(data) 309 39
+             316:  21(i8vec4) Load 315
+             317:  21(i8vec4) VectorShuffle 316 314 4 5 6 3
+                              Store 315 317
+             318:      6(int) Load 8(invocation)
+             319:     47(ptr) AccessChain 37(data) 58 39
+             320:  21(i8vec4) Load 319
+             321:   17(ivec4) Load 19(ballot)
+             322:  21(i8vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 320 321
+             323:     47(ptr) AccessChain 37(data) 318 39
+                              Store 323 322
+             324:      6(int) Load 8(invocation)
+             325:     41(ptr) AccessChain 37(data) 39 39 40
+             326:  20(int8_t) Load 325
+             327:   17(ivec4) Load 19(ballot)
+             328:  20(int8_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 326 327
+             329:     41(ptr) AccessChain 37(data) 324 39 40
+                              Store 329 328
+             330:      6(int) Load 8(invocation)
+             331:     47(ptr) AccessChain 37(data) 45 39
+             332:  21(i8vec4) Load 331
+             333:  46(i8vec2) VectorShuffle 332 332 0 1
+             334:   17(ivec4) Load 19(ballot)
+             335:  46(i8vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 333 334
+             336:     47(ptr) AccessChain 37(data) 330 39
+             337:  21(i8vec4) Load 336
+             338:  21(i8vec4) VectorShuffle 337 335 4 5 2 3
+                              Store 336 338
+             339:      6(int) Load 8(invocation)
+             340:     47(ptr) AccessChain 37(data) 52 39
+             341:  21(i8vec4) Load 340
+             342:  53(i8vec3) VectorShuffle 341 341 0 1 2
+             343:   17(ivec4) Load 19(ballot)
+             344:  53(i8vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 342 343
+             345:     47(ptr) AccessChain 37(data) 339 39
+             346:  21(i8vec4) Load 345
+             347:  21(i8vec4) VectorShuffle 346 344 4 5 6 3
+                              Store 345 347
+             348:      6(int) Load 8(invocation)
+             349:     47(ptr) AccessChain 37(data) 58 39
+             350:  21(i8vec4) Load 349
+             351:   17(ivec4) Load 19(ballot)
+             352:  21(i8vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 350 351
+             353:     47(ptr) AccessChain 37(data) 348 39
+                              Store 353 352
+             354:      6(int) Load 8(invocation)
+             355:     41(ptr) AccessChain 37(data) 39 39 40
+             356:  20(int8_t) Load 355
+             357:   17(ivec4) Load 19(ballot)
+             358:  20(int8_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 356 357
+             359:     41(ptr) AccessChain 37(data) 354 39 40
+                              Store 359 358
+             360:      6(int) Load 8(invocation)
+             361:     47(ptr) AccessChain 37(data) 45 39
+             362:  21(i8vec4) Load 361
+             363:  46(i8vec2) VectorShuffle 362 362 0 1
+             364:   17(ivec4) Load 19(ballot)
+             365:  46(i8vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 363 364
+             366:     47(ptr) AccessChain 37(data) 360 39
+             367:  21(i8vec4) Load 366
+             368:  21(i8vec4) VectorShuffle 367 365 4 5 2 3
+                              Store 366 368
+             369:      6(int) Load 8(invocation)
+             370:     47(ptr) AccessChain 37(data) 52 39
+             371:  21(i8vec4) Load 370
+             372:  53(i8vec3) VectorShuffle 371 371 0 1 2
+             373:   17(ivec4) Load 19(ballot)
+             374:  53(i8vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 372 373
+             375:     47(ptr) AccessChain 37(data) 369 39
+             376:  21(i8vec4) Load 375
+             377:  21(i8vec4) VectorShuffle 376 374 4 5 6 3
+                              Store 375 377
+             378:      6(int) Load 8(invocation)
+             379:     47(ptr) AccessChain 37(data) 58 39
+             380:  21(i8vec4) Load 379
+             381:   17(ivec4) Load 19(ballot)
+             382:  21(i8vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 380 381
+             383:     47(ptr) AccessChain 37(data) 378 39
+                              Store 383 382
+             384:      6(int) Load 8(invocation)
+             385:     62(ptr) AccessChain 37(data) 39 45 40
+             386:  22(int8_t) Load 385
+             387:   17(ivec4) Load 19(ballot)
+             388:  22(int8_t) GroupNonUniformIAdd 177 PartitionedReduceNV 386 387
+             389:     62(ptr) AccessChain 37(data) 384 45 40
+                              Store 389 388
+             390:      6(int) Load 8(invocation)
+             391:     67(ptr) AccessChain 37(data) 45 45
+             392:  23(i8vec4) Load 391
+             393:  66(i8vec2) VectorShuffle 392 392 0 1
+             394:   17(ivec4) Load 19(ballot)
+             395:  66(i8vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 393 394
+             396:     67(ptr) AccessChain 37(data) 390 45
+             397:  23(i8vec4) Load 396
+             398:  23(i8vec4) VectorShuffle 397 395 4 5 2 3
+                              Store 396 398
+             399:      6(int) Load 8(invocation)
+             400:     67(ptr) AccessChain 37(data) 52 45
+             401:  23(i8vec4) Load 400
+             402:  72(i8vec3) VectorShuffle 401 401 0 1 2
+             403:   17(ivec4) Load 19(ballot)
+             404:  72(i8vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 402 403
+             405:     67(ptr) AccessChain 37(data) 399 45
+             406:  23(i8vec4) Load 405
+             407:  23(i8vec4) VectorShuffle 406 404 4 5 6 3
+                              Store 405 407
+             408:      6(int) Load 8(invocation)
+             409:     67(ptr) AccessChain 37(data) 58 45
+             410:  23(i8vec4) Load 409
+             411:   17(ivec4) Load 19(ballot)
+             412:  23(i8vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 410 411
+             413:     67(ptr) AccessChain 37(data) 408 45
+                              Store 413 412
+             414:      6(int) Load 8(invocation)
+             415:     62(ptr) AccessChain 37(data) 39 45 40
+             416:  22(int8_t) Load 415
+             417:   17(ivec4) Load 19(ballot)
+             418:  22(int8_t) GroupNonUniformIMul 177 PartitionedReduceNV 416 417
+             419:     62(ptr) AccessChain 37(data) 414 45 40
+                              Store 419 418
+             420:      6(int) Load 8(invocation)
+             421:     67(ptr) AccessChain 37(data) 45 45
+             422:  23(i8vec4) Load 421
+             423:  66(i8vec2) VectorShuffle 422 422 0 1
+             424:   17(ivec4) Load 19(ballot)
+             425:  66(i8vec2) GroupNonUniformIMul 177 PartitionedReduceNV 423 424
+             426:     67(ptr) AccessChain 37(data) 420 45
+             427:  23(i8vec4) Load 426
+             428:  23(i8vec4) VectorShuffle 427 425 4 5 2 3
+                              Store 426 428
+             429:      6(int) Load 8(invocation)
+             430:     67(ptr) AccessChain 37(data) 52 45
+             431:  23(i8vec4) Load 430
+             432:  72(i8vec3) VectorShuffle 431 431 0 1 2
+             433:   17(ivec4) Load 19(ballot)
+             434:  72(i8vec3) GroupNonUniformIMul 177 PartitionedReduceNV 432 433
+             435:     67(ptr) AccessChain 37(data) 429 45
+             436:  23(i8vec4) Load 435
+             437:  23(i8vec4) VectorShuffle 436 434 4 5 6 3
+                              Store 435 437
+             438:      6(int) Load 8(invocation)
+             439:     67(ptr) AccessChain 37(data) 58 45
+             440:  23(i8vec4) Load 439
+             441:   17(ivec4) Load 19(ballot)
+             442:  23(i8vec4) GroupNonUniformIMul 177 PartitionedReduceNV 440 441
+             443:     67(ptr) AccessChain 37(data) 438 45
+                              Store 443 442
+             444:      6(int) Load 8(invocation)
+             445:     62(ptr) AccessChain 37(data) 39 45 40
+             446:  22(int8_t) Load 445
+             447:   17(ivec4) Load 19(ballot)
+             448:  22(int8_t) GroupNonUniformUMin 177 PartitionedReduceNV 446 447
+             449:     62(ptr) AccessChain 37(data) 444 45 40
+                              Store 449 448
+             450:      6(int) Load 8(invocation)
+             451:     67(ptr) AccessChain 37(data) 45 45
+             452:  23(i8vec4) Load 451
+             453:  66(i8vec2) VectorShuffle 452 452 0 1
+             454:   17(ivec4) Load 19(ballot)
+             455:  66(i8vec2) GroupNonUniformUMin 177 PartitionedReduceNV 453 454
+             456:     67(ptr) AccessChain 37(data) 450 45
+             457:  23(i8vec4) Load 456
+             458:  23(i8vec4) VectorShuffle 457 455 4 5 2 3
+                              Store 456 458
+             459:      6(int) Load 8(invocation)
+             460:     67(ptr) AccessChain 37(data) 52 45
+             461:  23(i8vec4) Load 460
+             462:  72(i8vec3) VectorShuffle 461 461 0 1 2
+             463:   17(ivec4) Load 19(ballot)
+             464:  72(i8vec3) GroupNonUniformUMin 177 PartitionedReduceNV 462 463
+             465:     67(ptr) AccessChain 37(data) 459 45
+             466:  23(i8vec4) Load 465
+             467:  23(i8vec4) VectorShuffle 466 464 4 5 6 3
+                              Store 465 467
+             468:      6(int) Load 8(invocation)
+             469:     67(ptr) AccessChain 37(data) 58 45
+             470:  23(i8vec4) Load 469
+             471:   17(ivec4) Load 19(ballot)
+             472:  23(i8vec4) GroupNonUniformUMin 177 PartitionedReduceNV 470 471
+             473:     67(ptr) AccessChain 37(data) 468 45
+                              Store 473 472
+             474:      6(int) Load 8(invocation)
+             475:     62(ptr) AccessChain 37(data) 39 45 40
+             476:  22(int8_t) Load 475
+             477:   17(ivec4) Load 19(ballot)
+             478:  22(int8_t) GroupNonUniformUMax 177 PartitionedReduceNV 476 477
+             479:     62(ptr) AccessChain 37(data) 474 45 40
+                              Store 479 478
+             480:      6(int) Load 8(invocation)
+             481:     67(ptr) AccessChain 37(data) 45 45
+             482:  23(i8vec4) Load 481
+             483:  66(i8vec2) VectorShuffle 482 482 0 1
+             484:   17(ivec4) Load 19(ballot)
+             485:  66(i8vec2) GroupNonUniformUMax 177 PartitionedReduceNV 483 484
+             486:     67(ptr) AccessChain 37(data) 480 45
+             487:  23(i8vec4) Load 486
+             488:  23(i8vec4) VectorShuffle 487 485 4 5 2 3
+                              Store 486 488
+             489:      6(int) Load 8(invocation)
+             490:     67(ptr) AccessChain 37(data) 52 45
+             491:  23(i8vec4) Load 490
+             492:  72(i8vec3) VectorShuffle 491 491 0 1 2
+             493:   17(ivec4) Load 19(ballot)
+             494:  72(i8vec3) GroupNonUniformUMax 177 PartitionedReduceNV 492 493
+             495:     67(ptr) AccessChain 37(data) 489 45
+             496:  23(i8vec4) Load 495
+             497:  23(i8vec4) VectorShuffle 496 494 4 5 6 3
+                              Store 495 497
+             498:      6(int) Load 8(invocation)
+             499:     67(ptr) AccessChain 37(data) 58 45
+             500:  23(i8vec4) Load 499
+             501:   17(ivec4) Load 19(ballot)
+             502:  23(i8vec4) GroupNonUniformUMax 177 PartitionedReduceNV 500 501
+             503:     67(ptr) AccessChain 37(data) 498 45
+                              Store 503 502
+             504:      6(int) Load 8(invocation)
+             505:     62(ptr) AccessChain 37(data) 39 45 40
+             506:  22(int8_t) Load 505
+             507:   17(ivec4) Load 19(ballot)
+             508:  22(int8_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 506 507
+             509:     62(ptr) AccessChain 37(data) 504 45 40
+                              Store 509 508
+             510:      6(int) Load 8(invocation)
+             511:     67(ptr) AccessChain 37(data) 45 45
+             512:  23(i8vec4) Load 511
+             513:  66(i8vec2) VectorShuffle 512 512 0 1
+             514:   17(ivec4) Load 19(ballot)
+             515:  66(i8vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 513 514
+             516:     67(ptr) AccessChain 37(data) 510 45
+             517:  23(i8vec4) Load 516
+             518:  23(i8vec4) VectorShuffle 517 515 4 5 2 3
+                              Store 516 518
+             519:      6(int) Load 8(invocation)
+             520:     67(ptr) AccessChain 37(data) 52 45
+             521:  23(i8vec4) Load 520
+             522:  72(i8vec3) VectorShuffle 521 521 0 1 2
+             523:   17(ivec4) Load 19(ballot)
+             524:  72(i8vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 522 523
+             525:     67(ptr) AccessChain 37(data) 519 45
+             526:  23(i8vec4) Load 525
+             527:  23(i8vec4) VectorShuffle 526 524 4 5 6 3
+                              Store 525 527
+             528:      6(int) Load 8(invocation)
+             529:     67(ptr) AccessChain 37(data) 58 45
+             530:  23(i8vec4) Load 529
+             531:   17(ivec4) Load 19(ballot)
+             532:  23(i8vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 530 531
+             533:     67(ptr) AccessChain 37(data) 528 45
+                              Store 533 532
+             534:      6(int) Load 8(invocation)
+             535:     62(ptr) AccessChain 37(data) 39 45 40
+             536:  22(int8_t) Load 535
+             537:   17(ivec4) Load 19(ballot)
+             538:  22(int8_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 536 537
+             539:     62(ptr) AccessChain 37(data) 534 45 40
+                              Store 539 538
+             540:      6(int) Load 8(invocation)
+             541:     67(ptr) AccessChain 37(data) 45 45
+             542:  23(i8vec4) Load 541
+             543:  66(i8vec2) VectorShuffle 542 542 0 1
+             544:   17(ivec4) Load 19(ballot)
+             545:  66(i8vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 543 544
+             546:     67(ptr) AccessChain 37(data) 540 45
+             547:  23(i8vec4) Load 546
+             548:  23(i8vec4) VectorShuffle 547 545 4 5 2 3
+                              Store 546 548
+             549:      6(int) Load 8(invocation)
+             550:     67(ptr) AccessChain 37(data) 52 45
+             551:  23(i8vec4) Load 550
+             552:  72(i8vec3) VectorShuffle 551 551 0 1 2
+             553:   17(ivec4) Load 19(ballot)
+             554:  72(i8vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 552 553
+             555:     67(ptr) AccessChain 37(data) 549 45
+             556:  23(i8vec4) Load 555
+             557:  23(i8vec4) VectorShuffle 556 554 4 5 6 3
+                              Store 555 557
+             558:      6(int) Load 8(invocation)
+             559:     67(ptr) AccessChain 37(data) 58 45
+             560:  23(i8vec4) Load 559
+             561:   17(ivec4) Load 19(ballot)
+             562:  23(i8vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 560 561
+             563:     67(ptr) AccessChain 37(data) 558 45
+                              Store 563 562
+             564:      6(int) Load 8(invocation)
+             565:     62(ptr) AccessChain 37(data) 39 45 40
+             566:  22(int8_t) Load 565
+             567:   17(ivec4) Load 19(ballot)
+             568:  22(int8_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 566 567
+             569:     62(ptr) AccessChain 37(data) 564 45 40
+                              Store 569 568
+             570:      6(int) Load 8(invocation)
+             571:     67(ptr) AccessChain 37(data) 45 45
+             572:  23(i8vec4) Load 571
+             573:  66(i8vec2) VectorShuffle 572 572 0 1
+             574:   17(ivec4) Load 19(ballot)
+             575:  66(i8vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 573 574
+             576:     67(ptr) AccessChain 37(data) 570 45
+             577:  23(i8vec4) Load 576
+             578:  23(i8vec4) VectorShuffle 577 575 4 5 2 3
+                              Store 576 578
+             579:      6(int) Load 8(invocation)
+             580:     67(ptr) AccessChain 37(data) 52 45
+             581:  23(i8vec4) Load 580
+             582:  72(i8vec3) VectorShuffle 581 581 0 1 2
+             583:   17(ivec4) Load 19(ballot)
+             584:  72(i8vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 582 583
+             585:     67(ptr) AccessChain 37(data) 579 45
+             586:  23(i8vec4) Load 585
+             587:  23(i8vec4) VectorShuffle 586 584 4 5 6 3
+                              Store 585 587
+             588:      6(int) Load 8(invocation)
+             589:     67(ptr) AccessChain 37(data) 58 45
+             590:  23(i8vec4) Load 589
+             591:   17(ivec4) Load 19(ballot)
+             592:  23(i8vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 590 591
+             593:     67(ptr) AccessChain 37(data) 588 45
+                              Store 593 592
+             594:      6(int) Load 8(invocation)
+             595:     80(ptr) AccessChain 37(data) 39 52 40
+             596: 24(int16_t) Load 595
+             597:   17(ivec4) Load 19(ballot)
+             598: 24(int16_t) GroupNonUniformIAdd 177 PartitionedReduceNV 596 597
+             599:     80(ptr) AccessChain 37(data) 594 52 40
+                              Store 599 598
+             600:      6(int) Load 8(invocation)
+             601:     85(ptr) AccessChain 37(data) 45 52
+             602: 25(i16vec4) Load 601
+             603: 84(i16vec2) VectorShuffle 602 602 0 1
+             604:   17(ivec4) Load 19(ballot)
+             605: 84(i16vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 603 604
+             606:     85(ptr) AccessChain 37(data) 600 52
+             607: 25(i16vec4) Load 606
+             608: 25(i16vec4) VectorShuffle 607 605 4 5 2 3
+                              Store 606 608
+             609:      6(int) Load 8(invocation)
+             610:     85(ptr) AccessChain 37(data) 52 52
+             611: 25(i16vec4) Load 610
+             612: 90(i16vec3) VectorShuffle 611 611 0 1 2
+             613:   17(ivec4) Load 19(ballot)
+             614: 90(i16vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 612 613
+             615:     85(ptr) AccessChain 37(data) 609 52
+             616: 25(i16vec4) Load 615
+             617: 25(i16vec4) VectorShuffle 616 614 4 5 6 3
+                              Store 615 617
+             618:      6(int) Load 8(invocation)
+             619:     85(ptr) AccessChain 37(data) 58 52
+             620: 25(i16vec4) Load 619
+             621:   17(ivec4) Load 19(ballot)
+             622: 25(i16vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 620 621
+             623:     85(ptr) AccessChain 37(data) 618 52
+                              Store 623 622
+             624:      6(int) Load 8(invocation)
+             625:     80(ptr) AccessChain 37(data) 39 52 40
+             626: 24(int16_t) Load 625
+             627:   17(ivec4) Load 19(ballot)
+             628: 24(int16_t) GroupNonUniformIMul 177 PartitionedReduceNV 626 627
+             629:     80(ptr) AccessChain 37(data) 624 52 40
+                              Store 629 628
+             630:      6(int) Load 8(invocation)
+             631:     85(ptr) AccessChain 37(data) 45 52
+             632: 25(i16vec4) Load 631
+             633: 84(i16vec2) VectorShuffle 632 632 0 1
+             634:   17(ivec4) Load 19(ballot)
+             635: 84(i16vec2) GroupNonUniformIMul 177 PartitionedReduceNV 633 634
+             636:     85(ptr) AccessChain 37(data) 630 52
+             637: 25(i16vec4) Load 636
+             638: 25(i16vec4) VectorShuffle 637 635 4 5 2 3
+                              Store 636 638
+             639:      6(int) Load 8(invocation)
+             640:     85(ptr) AccessChain 37(data) 52 52
+             641: 25(i16vec4) Load 640
+             642: 90(i16vec3) VectorShuffle 641 641 0 1 2
+             643:   17(ivec4) Load 19(ballot)
+             644: 90(i16vec3) GroupNonUniformIMul 177 PartitionedReduceNV 642 643
+             645:     85(ptr) AccessChain 37(data) 639 52
+             646: 25(i16vec4) Load 645
+             647: 25(i16vec4) VectorShuffle 646 644 4 5 6 3
+                              Store 645 647
+             648:      6(int) Load 8(invocation)
+             649:     85(ptr) AccessChain 37(data) 58 52
+             650: 25(i16vec4) Load 649
+             651:   17(ivec4) Load 19(ballot)
+             652: 25(i16vec4) GroupNonUniformIMul 177 PartitionedReduceNV 650 651
+             653:     85(ptr) AccessChain 37(data) 648 52
+                              Store 653 652
+             654:      6(int) Load 8(invocation)
+             655:     80(ptr) AccessChain 37(data) 39 52 40
+             656: 24(int16_t) Load 655
+             657:   17(ivec4) Load 19(ballot)
+             658: 24(int16_t) GroupNonUniformSMin 177 PartitionedReduceNV 656 657
+             659:     80(ptr) AccessChain 37(data) 654 52 40
+                              Store 659 658
+             660:      6(int) Load 8(invocation)
+             661:     85(ptr) AccessChain 37(data) 45 52
+             662: 25(i16vec4) Load 661
+             663: 84(i16vec2) VectorShuffle 662 662 0 1
+             664:   17(ivec4) Load 19(ballot)
+             665: 84(i16vec2) GroupNonUniformSMin 177 PartitionedReduceNV 663 664
+             666:     85(ptr) AccessChain 37(data) 660 52
+             667: 25(i16vec4) Load 666
+             668: 25(i16vec4) VectorShuffle 667 665 4 5 2 3
+                              Store 666 668
+             669:      6(int) Load 8(invocation)
+             670:     85(ptr) AccessChain 37(data) 52 52
+             671: 25(i16vec4) Load 670
+             672: 90(i16vec3) VectorShuffle 671 671 0 1 2
+             673:   17(ivec4) Load 19(ballot)
+             674: 90(i16vec3) GroupNonUniformSMin 177 PartitionedReduceNV 672 673
+             675:     85(ptr) AccessChain 37(data) 669 52
+             676: 25(i16vec4) Load 675
+             677: 25(i16vec4) VectorShuffle 676 674 4 5 6 3
+                              Store 675 677
+             678:      6(int) Load 8(invocation)
+             679:     85(ptr) AccessChain 37(data) 58 52
+             680: 25(i16vec4) Load 679
+             681:   17(ivec4) Load 19(ballot)
+             682: 25(i16vec4) GroupNonUniformSMin 177 PartitionedReduceNV 680 681
+             683:     85(ptr) AccessChain 37(data) 678 52
+                              Store 683 682
+             684:      6(int) Load 8(invocation)
+             685:     80(ptr) AccessChain 37(data) 39 52 40
+             686: 24(int16_t) Load 685
+             687:   17(ivec4) Load 19(ballot)
+             688: 24(int16_t) GroupNonUniformSMax 177 PartitionedReduceNV 686 687
+             689:     80(ptr) AccessChain 37(data) 684 52 40
+                              Store 689 688
+             690:      6(int) Load 8(invocation)
+             691:     85(ptr) AccessChain 37(data) 45 52
+             692: 25(i16vec4) Load 691
+             693: 84(i16vec2) VectorShuffle 692 692 0 1
+             694:   17(ivec4) Load 19(ballot)
+             695: 84(i16vec2) GroupNonUniformSMax 177 PartitionedReduceNV 693 694
+             696:     85(ptr) AccessChain 37(data) 690 52
+             697: 25(i16vec4) Load 696
+             698: 25(i16vec4) VectorShuffle 697 695 4 5 2 3
+                              Store 696 698
+             699:      6(int) Load 8(invocation)
+             700:     85(ptr) AccessChain 37(data) 52 52
+             701: 25(i16vec4) Load 700
+             702: 90(i16vec3) VectorShuffle 701 701 0 1 2
+             703:   17(ivec4) Load 19(ballot)
+             704: 90(i16vec3) GroupNonUniformSMax 177 PartitionedReduceNV 702 703
+             705:     85(ptr) AccessChain 37(data) 699 52
+             706: 25(i16vec4) Load 705
+             707: 25(i16vec4) VectorShuffle 706 704 4 5 6 3
+                              Store 705 707
+             708:      6(int) Load 8(invocation)
+             709:     85(ptr) AccessChain 37(data) 58 52
+             710: 25(i16vec4) Load 709
+             711:   17(ivec4) Load 19(ballot)
+             712: 25(i16vec4) GroupNonUniformSMax 177 PartitionedReduceNV 710 711
+             713:     85(ptr) AccessChain 37(data) 708 52
+                              Store 713 712
+             714:      6(int) Load 8(invocation)
+             715:     80(ptr) AccessChain 37(data) 39 52 40
+             716: 24(int16_t) Load 715
+             717:   17(ivec4) Load 19(ballot)
+             718: 24(int16_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 716 717
+             719:     80(ptr) AccessChain 37(data) 714 52 40
+                              Store 719 718
+             720:      6(int) Load 8(invocation)
+             721:     85(ptr) AccessChain 37(data) 45 52
+             722: 25(i16vec4) Load 721
+             723: 84(i16vec2) VectorShuffle 722 722 0 1
+             724:   17(ivec4) Load 19(ballot)
+             725: 84(i16vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 723 724
+             726:     85(ptr) AccessChain 37(data) 720 52
+             727: 25(i16vec4) Load 726
+             728: 25(i16vec4) VectorShuffle 727 725 4 5 2 3
+                              Store 726 728
+             729:      6(int) Load 8(invocation)
+             730:     85(ptr) AccessChain 37(data) 52 52
+             731: 25(i16vec4) Load 730
+             732: 90(i16vec3) VectorShuffle 731 731 0 1 2
+             733:   17(ivec4) Load 19(ballot)
+             734: 90(i16vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 732 733
+             735:     85(ptr) AccessChain 37(data) 729 52
+             736: 25(i16vec4) Load 735
+             737: 25(i16vec4) VectorShuffle 736 734 4 5 6 3
+                              Store 735 737
+             738:      6(int) Load 8(invocation)
+             739:     85(ptr) AccessChain 37(data) 58 52
+             740: 25(i16vec4) Load 739
+             741:   17(ivec4) Load 19(ballot)
+             742: 25(i16vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 740 741
+             743:     85(ptr) AccessChain 37(data) 738 52
+                              Store 743 742
+             744:      6(int) Load 8(invocation)
+             745:     80(ptr) AccessChain 37(data) 39 52 40
+             746: 24(int16_t) Load 745
+             747:   17(ivec4) Load 19(ballot)
+             748: 24(int16_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 746 747
+             749:     80(ptr) AccessChain 37(data) 744 52 40
+                              Store 749 748
+             750:      6(int) Load 8(invocation)
+             751:     85(ptr) AccessChain 37(data) 45 52
+             752: 25(i16vec4) Load 751
+             753: 84(i16vec2) VectorShuffle 752 752 0 1
+             754:   17(ivec4) Load 19(ballot)
+             755: 84(i16vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 753 754
+             756:     85(ptr) AccessChain 37(data) 750 52
+             757: 25(i16vec4) Load 756
+             758: 25(i16vec4) VectorShuffle 757 755 4 5 2 3
+                              Store 756 758
+             759:      6(int) Load 8(invocation)
+             760:     85(ptr) AccessChain 37(data) 52 52
+             761: 25(i16vec4) Load 760
+             762: 90(i16vec3) VectorShuffle 761 761 0 1 2
+             763:   17(ivec4) Load 19(ballot)
+             764: 90(i16vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 762 763
+             765:     85(ptr) AccessChain 37(data) 759 52
+             766: 25(i16vec4) Load 765
+             767: 25(i16vec4) VectorShuffle 766 764 4 5 6 3
+                              Store 765 767
+             768:      6(int) Load 8(invocation)
+             769:     85(ptr) AccessChain 37(data) 58 52
+             770: 25(i16vec4) Load 769
+             771:   17(ivec4) Load 19(ballot)
+             772: 25(i16vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 770 771
+             773:     85(ptr) AccessChain 37(data) 768 52
+                              Store 773 772
+             774:      6(int) Load 8(invocation)
+             775:     80(ptr) AccessChain 37(data) 39 52 40
+             776: 24(int16_t) Load 775
+             777:   17(ivec4) Load 19(ballot)
+             778: 24(int16_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 776 777
+             779:     80(ptr) AccessChain 37(data) 774 52 40
+                              Store 779 778
+             780:      6(int) Load 8(invocation)
+             781:     85(ptr) AccessChain 37(data) 45 52
+             782: 25(i16vec4) Load 781
+             783: 84(i16vec2) VectorShuffle 782 782 0 1
+             784:   17(ivec4) Load 19(ballot)
+             785: 84(i16vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 783 784
+             786:     85(ptr) AccessChain 37(data) 780 52
+             787: 25(i16vec4) Load 786
+             788: 25(i16vec4) VectorShuffle 787 785 4 5 2 3
+                              Store 786 788
+             789:      6(int) Load 8(invocation)
+             790:     85(ptr) AccessChain 37(data) 52 52
+             791: 25(i16vec4) Load 790
+             792: 90(i16vec3) VectorShuffle 791 791 0 1 2
+             793:   17(ivec4) Load 19(ballot)
+             794: 90(i16vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 792 793
+             795:     85(ptr) AccessChain 37(data) 789 52
+             796: 25(i16vec4) Load 795
+             797: 25(i16vec4) VectorShuffle 796 794 4 5 6 3
+                              Store 795 797
+             798:      6(int) Load 8(invocation)
+             799:     85(ptr) AccessChain 37(data) 58 52
+             800: 25(i16vec4) Load 799
+             801:   17(ivec4) Load 19(ballot)
+             802: 25(i16vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 800 801
+             803:     85(ptr) AccessChain 37(data) 798 52
+                              Store 803 802
+             804:      6(int) Load 8(invocation)
+             805:     98(ptr) AccessChain 37(data) 39 58 40
+             806: 26(int16_t) Load 805
+             807:   17(ivec4) Load 19(ballot)
+             808: 26(int16_t) GroupNonUniformIAdd 177 PartitionedReduceNV 806 807
+             809:     98(ptr) AccessChain 37(data) 804 58 40
+                              Store 809 808
+             810:      6(int) Load 8(invocation)
+             811:    103(ptr) AccessChain 37(data) 45 58
+             812: 27(i16vec4) Load 811
+             813:102(i16vec2) VectorShuffle 812 812 0 1
+             814:   17(ivec4) Load 19(ballot)
+             815:102(i16vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 813 814
+             816:    103(ptr) AccessChain 37(data) 810 58
+             817: 27(i16vec4) Load 816
+             818: 27(i16vec4) VectorShuffle 817 815 4 5 2 3
+                              Store 816 818
+             819:      6(int) Load 8(invocation)
+             820:    103(ptr) AccessChain 37(data) 52 58
+             821: 27(i16vec4) Load 820
+             822:108(i16vec3) VectorShuffle 821 821 0 1 2
+             823:   17(ivec4) Load 19(ballot)
+             824:108(i16vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 822 823
+             825:    103(ptr) AccessChain 37(data) 819 58
+             826: 27(i16vec4) Load 825
+             827: 27(i16vec4) VectorShuffle 826 824 4 5 6 3
+                              Store 825 827
+             828:      6(int) Load 8(invocation)
+             829:    103(ptr) AccessChain 37(data) 58 58
+             830: 27(i16vec4) Load 829
+             831:   17(ivec4) Load 19(ballot)
+             832: 27(i16vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 830 831
+             833:    103(ptr) AccessChain 37(data) 828 58
+                              Store 833 832
+             834:      6(int) Load 8(invocation)
+             835:     98(ptr) AccessChain 37(data) 39 58 40
+             836: 26(int16_t) Load 835
+             837:   17(ivec4) Load 19(ballot)
+             838: 26(int16_t) GroupNonUniformIMul 177 PartitionedReduceNV 836 837
+             839:     98(ptr) AccessChain 37(data) 834 58 40
+                              Store 839 838
+             840:      6(int) Load 8(invocation)
+             841:    103(ptr) AccessChain 37(data) 45 58
+             842: 27(i16vec4) Load 841
+             843:102(i16vec2) VectorShuffle 842 842 0 1
+             844:   17(ivec4) Load 19(ballot)
+             845:102(i16vec2) GroupNonUniformIMul 177 PartitionedReduceNV 843 844
+             846:    103(ptr) AccessChain 37(data) 840 58
+             847: 27(i16vec4) Load 846
+             848: 27(i16vec4) VectorShuffle 847 845 4 5 2 3
+                              Store 846 848
+             849:      6(int) Load 8(invocation)
+             850:    103(ptr) AccessChain 37(data) 52 58
+             851: 27(i16vec4) Load 850
+             852:108(i16vec3) VectorShuffle 851 851 0 1 2
+             853:   17(ivec4) Load 19(ballot)
+             854:108(i16vec3) GroupNonUniformIMul 177 PartitionedReduceNV 852 853
+             855:    103(ptr) AccessChain 37(data) 849 58
+             856: 27(i16vec4) Load 855
+             857: 27(i16vec4) VectorShuffle 856 854 4 5 6 3
+                              Store 855 857
+             858:      6(int) Load 8(invocation)
+             859:    103(ptr) AccessChain 37(data) 58 58
+             860: 27(i16vec4) Load 859
+             861:   17(ivec4) Load 19(ballot)
+             862: 27(i16vec4) GroupNonUniformIMul 177 PartitionedReduceNV 860 861
+             863:    103(ptr) AccessChain 37(data) 858 58
+                              Store 863 862
+             864:      6(int) Load 8(invocation)
+             865:     98(ptr) AccessChain 37(data) 39 58 40
+             866: 26(int16_t) Load 865
+             867:   17(ivec4) Load 19(ballot)
+             868: 26(int16_t) GroupNonUniformUMin 177 PartitionedReduceNV 866 867
+             869:     98(ptr) AccessChain 37(data) 864 58 40
+                              Store 869 868
+             870:      6(int) Load 8(invocation)
+             871:    103(ptr) AccessChain 37(data) 45 58
+             872: 27(i16vec4) Load 871
+             873:102(i16vec2) VectorShuffle 872 872 0 1
+             874:   17(ivec4) Load 19(ballot)
+             875:102(i16vec2) GroupNonUniformUMin 177 PartitionedReduceNV 873 874
+             876:    103(ptr) AccessChain 37(data) 870 58
+             877: 27(i16vec4) Load 876
+             878: 27(i16vec4) VectorShuffle 877 875 4 5 2 3
+                              Store 876 878
+             879:      6(int) Load 8(invocation)
+             880:    103(ptr) AccessChain 37(data) 52 58
+             881: 27(i16vec4) Load 880
+             882:108(i16vec3) VectorShuffle 881 881 0 1 2
+             883:   17(ivec4) Load 19(ballot)
+             884:108(i16vec3) GroupNonUniformUMin 177 PartitionedReduceNV 882 883
+             885:    103(ptr) AccessChain 37(data) 879 58
+             886: 27(i16vec4) Load 885
+             887: 27(i16vec4) VectorShuffle 886 884 4 5 6 3
+                              Store 885 887
+             888:      6(int) Load 8(invocation)
+             889:    103(ptr) AccessChain 37(data) 58 58
+             890: 27(i16vec4) Load 889
+             891:   17(ivec4) Load 19(ballot)
+             892: 27(i16vec4) GroupNonUniformUMin 177 PartitionedReduceNV 890 891
+             893:    103(ptr) AccessChain 37(data) 888 58
+                              Store 893 892
+             894:      6(int) Load 8(invocation)
+             895:     98(ptr) AccessChain 37(data) 39 58 40
+             896: 26(int16_t) Load 895
+             897:   17(ivec4) Load 19(ballot)
+             898: 26(int16_t) GroupNonUniformUMax 177 PartitionedReduceNV 896 897
+             899:     98(ptr) AccessChain 37(data) 894 58 40
+                              Store 899 898
+             900:      6(int) Load 8(invocation)
+             901:    103(ptr) AccessChain 37(data) 45 58
+             902: 27(i16vec4) Load 901
+             903:102(i16vec2) VectorShuffle 902 902 0 1
+             904:   17(ivec4) Load 19(ballot)
+             905:102(i16vec2) GroupNonUniformUMax 177 PartitionedReduceNV 903 904
+             906:    103(ptr) AccessChain 37(data) 900 58
+             907: 27(i16vec4) Load 906
+             908: 27(i16vec4) VectorShuffle 907 905 4 5 2 3
+                              Store 906 908
+             909:      6(int) Load 8(invocation)
+             910:    103(ptr) AccessChain 37(data) 52 58
+             911: 27(i16vec4) Load 910
+             912:108(i16vec3) VectorShuffle 911 911 0 1 2
+             913:   17(ivec4) Load 19(ballot)
+             914:108(i16vec3) GroupNonUniformUMax 177 PartitionedReduceNV 912 913
+             915:    103(ptr) AccessChain 37(data) 909 58
+             916: 27(i16vec4) Load 915
+             917: 27(i16vec4) VectorShuffle 916 914 4 5 6 3
+                              Store 915 917
+             918:      6(int) Load 8(invocation)
+             919:    103(ptr) AccessChain 37(data) 58 58
+             920: 27(i16vec4) Load 919
+             921:   17(ivec4) Load 19(ballot)
+             922: 27(i16vec4) GroupNonUniformUMax 177 PartitionedReduceNV 920 921
+             923:    103(ptr) AccessChain 37(data) 918 58
+                              Store 923 922
+             924:      6(int) Load 8(invocation)
+             925:     98(ptr) AccessChain 37(data) 39 58 40
+             926: 26(int16_t) Load 925
+             927:   17(ivec4) Load 19(ballot)
+             928: 26(int16_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 926 927
+             929:     98(ptr) AccessChain 37(data) 924 58 40
+                              Store 929 928
+             930:      6(int) Load 8(invocation)
+             931:    103(ptr) AccessChain 37(data) 45 58
+             932: 27(i16vec4) Load 931
+             933:102(i16vec2) VectorShuffle 932 932 0 1
+             934:   17(ivec4) Load 19(ballot)
+             935:102(i16vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 933 934
+             936:    103(ptr) AccessChain 37(data) 930 58
+             937: 27(i16vec4) Load 936
+             938: 27(i16vec4) VectorShuffle 937 935 4 5 2 3
+                              Store 936 938
+             939:      6(int) Load 8(invocation)
+             940:    103(ptr) AccessChain 37(data) 52 58
+             941: 27(i16vec4) Load 940
+             942:108(i16vec3) VectorShuffle 941 941 0 1 2
+             943:   17(ivec4) Load 19(ballot)
+             944:108(i16vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 942 943
+             945:    103(ptr) AccessChain 37(data) 939 58
+             946: 27(i16vec4) Load 945
+             947: 27(i16vec4) VectorShuffle 946 944 4 5 6 3
+                              Store 945 947
+             948:      6(int) Load 8(invocation)
+             949:    103(ptr) AccessChain 37(data) 58 58
+             950: 27(i16vec4) Load 949
+             951:   17(ivec4) Load 19(ballot)
+             952: 27(i16vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 950 951
+             953:    103(ptr) AccessChain 37(data) 948 58
+                              Store 953 952
+             954:      6(int) Load 8(invocation)
+             955:     98(ptr) AccessChain 37(data) 39 58 40
+             956: 26(int16_t) Load 955
+             957:   17(ivec4) Load 19(ballot)
+             958: 26(int16_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 956 957
+             959:     98(ptr) AccessChain 37(data) 954 58 40
+                              Store 959 958
+             960:      6(int) Load 8(invocation)
+             961:    103(ptr) AccessChain 37(data) 45 58
+             962: 27(i16vec4) Load 961
+             963:102(i16vec2) VectorShuffle 962 962 0 1
+             964:   17(ivec4) Load 19(ballot)
+             965:102(i16vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 963 964
+             966:    103(ptr) AccessChain 37(data) 960 58
+             967: 27(i16vec4) Load 966
+             968: 27(i16vec4) VectorShuffle 967 965 4 5 2 3
+                              Store 966 968
+             969:      6(int) Load 8(invocation)
+             970:    103(ptr) AccessChain 37(data) 52 58
+             971: 27(i16vec4) Load 970
+             972:108(i16vec3) VectorShuffle 971 971 0 1 2
+             973:   17(ivec4) Load 19(ballot)
+             974:108(i16vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 972 973
+             975:    103(ptr) AccessChain 37(data) 969 58
+             976: 27(i16vec4) Load 975
+             977: 27(i16vec4) VectorShuffle 976 974 4 5 6 3
+                              Store 975 977
+             978:      6(int) Load 8(invocation)
+             979:    103(ptr) AccessChain 37(data) 58 58
+             980: 27(i16vec4) Load 979
+             981:   17(ivec4) Load 19(ballot)
+             982: 27(i16vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 980 981
+             983:    103(ptr) AccessChain 37(data) 978 58
+                              Store 983 982
+             984:      6(int) Load 8(invocation)
+             985:     98(ptr) AccessChain 37(data) 39 58 40
+             986: 26(int16_t) Load 985
+             987:   17(ivec4) Load 19(ballot)
+             988: 26(int16_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 986 987
+             989:     98(ptr) AccessChain 37(data) 984 58 40
+                              Store 989 988
+             990:      6(int) Load 8(invocation)
+             991:    103(ptr) AccessChain 37(data) 45 58
+             992: 27(i16vec4) Load 991
+             993:102(i16vec2) VectorShuffle 992 992 0 1
+             994:   17(ivec4) Load 19(ballot)
+             995:102(i16vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 993 994
+             996:    103(ptr) AccessChain 37(data) 990 58
+             997: 27(i16vec4) Load 996
+             998: 27(i16vec4) VectorShuffle 997 995 4 5 2 3
+                              Store 996 998
+             999:      6(int) Load 8(invocation)
+            1000:    103(ptr) AccessChain 37(data) 52 58
+            1001: 27(i16vec4) Load 1000
+            1002:108(i16vec3) VectorShuffle 1001 1001 0 1 2
+            1003:   17(ivec4) Load 19(ballot)
+            1004:108(i16vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1002 1003
+            1005:    103(ptr) AccessChain 37(data) 999 58
+            1006: 27(i16vec4) Load 1005
+            1007: 27(i16vec4) VectorShuffle 1006 1004 4 5 6 3
+                              Store 1005 1007
+            1008:      6(int) Load 8(invocation)
+            1009:    103(ptr) AccessChain 37(data) 58 58
+            1010: 27(i16vec4) Load 1009
+            1011:   17(ivec4) Load 19(ballot)
+            1012: 27(i16vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1010 1011
+            1013:    103(ptr) AccessChain 37(data) 1008 58
+                              Store 1013 1012
+            1014:      6(int) Load 8(invocation)
+            1015:    117(ptr) AccessChain 37(data) 39 116 40
+            1016: 28(int64_t) Load 1015
+            1017:   17(ivec4) Load 19(ballot)
+            1018: 28(int64_t) GroupNonUniformIAdd 177 PartitionedReduceNV 1016 1017
+            1019:    117(ptr) AccessChain 37(data) 1014 116 40
+                              Store 1019 1018
+            1020:      6(int) Load 8(invocation)
+            1021:    122(ptr) AccessChain 37(data) 45 116
+            1022: 29(i64vec4) Load 1021
+            1023:121(i64vec2) VectorShuffle 1022 1022 0 1
+            1024:   17(ivec4) Load 19(ballot)
+            1025:121(i64vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 1023 1024
+            1026:    122(ptr) AccessChain 37(data) 1020 116
+            1027: 29(i64vec4) Load 1026
+            1028: 29(i64vec4) VectorShuffle 1027 1025 4 5 2 3
+                              Store 1026 1028
+            1029:      6(int) Load 8(invocation)
+            1030:    122(ptr) AccessChain 37(data) 52 116
+            1031: 29(i64vec4) Load 1030
+            1032:127(i64vec3) VectorShuffle 1031 1031 0 1 2
+            1033:   17(ivec4) Load 19(ballot)
+            1034:127(i64vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 1032 1033
+            1035:    122(ptr) AccessChain 37(data) 1029 116
+            1036: 29(i64vec4) Load 1035
+            1037: 29(i64vec4) VectorShuffle 1036 1034 4 5 6 3
+                              Store 1035 1037
+            1038:      6(int) Load 8(invocation)
+            1039:    122(ptr) AccessChain 37(data) 58 116
+            1040: 29(i64vec4) Load 1039
+            1041:   17(ivec4) Load 19(ballot)
+            1042: 29(i64vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 1040 1041
+            1043:    122(ptr) AccessChain 37(data) 1038 116
+                              Store 1043 1042
+            1044:      6(int) Load 8(invocation)
+            1045:    117(ptr) AccessChain 37(data) 39 116 40
+            1046: 28(int64_t) Load 1045
+            1047:   17(ivec4) Load 19(ballot)
+            1048: 28(int64_t) GroupNonUniformIMul 177 PartitionedReduceNV 1046 1047
+            1049:    117(ptr) AccessChain 37(data) 1044 116 40
+                              Store 1049 1048
+            1050:      6(int) Load 8(invocation)
+            1051:    122(ptr) AccessChain 37(data) 45 116
+            1052: 29(i64vec4) Load 1051
+            1053:121(i64vec2) VectorShuffle 1052 1052 0 1
+            1054:   17(ivec4) Load 19(ballot)
+            1055:121(i64vec2) GroupNonUniformIMul 177 PartitionedReduceNV 1053 1054
+            1056:    122(ptr) AccessChain 37(data) 1050 116
+            1057: 29(i64vec4) Load 1056
+            1058: 29(i64vec4) VectorShuffle 1057 1055 4 5 2 3
+                              Store 1056 1058
+            1059:      6(int) Load 8(invocation)
+            1060:    122(ptr) AccessChain 37(data) 52 116
+            1061: 29(i64vec4) Load 1060
+            1062:127(i64vec3) VectorShuffle 1061 1061 0 1 2
+            1063:   17(ivec4) Load 19(ballot)
+            1064:127(i64vec3) GroupNonUniformIMul 177 PartitionedReduceNV 1062 1063
+            1065:    122(ptr) AccessChain 37(data) 1059 116
+            1066: 29(i64vec4) Load 1065
+            1067: 29(i64vec4) VectorShuffle 1066 1064 4 5 6 3
+                              Store 1065 1067
+            1068:      6(int) Load 8(invocation)
+            1069:    122(ptr) AccessChain 37(data) 58 116
+            1070: 29(i64vec4) Load 1069
+            1071:   17(ivec4) Load 19(ballot)
+            1072: 29(i64vec4) GroupNonUniformIMul 177 PartitionedReduceNV 1070 1071
+            1073:    122(ptr) AccessChain 37(data) 1068 116
+                              Store 1073 1072
+            1074:      6(int) Load 8(invocation)
+            1075:    117(ptr) AccessChain 37(data) 39 116 40
+            1076: 28(int64_t) Load 1075
+            1077:   17(ivec4) Load 19(ballot)
+            1078: 28(int64_t) GroupNonUniformSMin 177 PartitionedReduceNV 1076 1077
+            1079:    117(ptr) AccessChain 37(data) 1074 116 40
+                              Store 1079 1078
+            1080:      6(int) Load 8(invocation)
+            1081:    122(ptr) AccessChain 37(data) 45 116
+            1082: 29(i64vec4) Load 1081
+            1083:121(i64vec2) VectorShuffle 1082 1082 0 1
+            1084:   17(ivec4) Load 19(ballot)
+            1085:121(i64vec2) GroupNonUniformSMin 177 PartitionedReduceNV 1083 1084
+            1086:    122(ptr) AccessChain 37(data) 1080 116
+            1087: 29(i64vec4) Load 1086
+            1088: 29(i64vec4) VectorShuffle 1087 1085 4 5 2 3
+                              Store 1086 1088
+            1089:      6(int) Load 8(invocation)
+            1090:    122(ptr) AccessChain 37(data) 52 116
+            1091: 29(i64vec4) Load 1090
+            1092:127(i64vec3) VectorShuffle 1091 1091 0 1 2
+            1093:   17(ivec4) Load 19(ballot)
+            1094:127(i64vec3) GroupNonUniformSMin 177 PartitionedReduceNV 1092 1093
+            1095:    122(ptr) AccessChain 37(data) 1089 116
+            1096: 29(i64vec4) Load 1095
+            1097: 29(i64vec4) VectorShuffle 1096 1094 4 5 6 3
+                              Store 1095 1097
+            1098:      6(int) Load 8(invocation)
+            1099:    122(ptr) AccessChain 37(data) 58 116
+            1100: 29(i64vec4) Load 1099
+            1101:   17(ivec4) Load 19(ballot)
+            1102: 29(i64vec4) GroupNonUniformSMin 177 PartitionedReduceNV 1100 1101
+            1103:    122(ptr) AccessChain 37(data) 1098 116
+                              Store 1103 1102
+            1104:      6(int) Load 8(invocation)
+            1105:    117(ptr) AccessChain 37(data) 39 116 40
+            1106: 28(int64_t) Load 1105
+            1107:   17(ivec4) Load 19(ballot)
+            1108: 28(int64_t) GroupNonUniformSMax 177 PartitionedReduceNV 1106 1107
+            1109:    117(ptr) AccessChain 37(data) 1104 116 40
+                              Store 1109 1108
+            1110:      6(int) Load 8(invocation)
+            1111:    122(ptr) AccessChain 37(data) 45 116
+            1112: 29(i64vec4) Load 1111
+            1113:121(i64vec2) VectorShuffle 1112 1112 0 1
+            1114:   17(ivec4) Load 19(ballot)
+            1115:121(i64vec2) GroupNonUniformSMax 177 PartitionedReduceNV 1113 1114
+            1116:    122(ptr) AccessChain 37(data) 1110 116
+            1117: 29(i64vec4) Load 1116
+            1118: 29(i64vec4) VectorShuffle 1117 1115 4 5 2 3
+                              Store 1116 1118
+            1119:      6(int) Load 8(invocation)
+            1120:    122(ptr) AccessChain 37(data) 52 116
+            1121: 29(i64vec4) Load 1120
+            1122:127(i64vec3) VectorShuffle 1121 1121 0 1 2
+            1123:   17(ivec4) Load 19(ballot)
+            1124:127(i64vec3) GroupNonUniformSMax 177 PartitionedReduceNV 1122 1123
+            1125:    122(ptr) AccessChain 37(data) 1119 116
+            1126: 29(i64vec4) Load 1125
+            1127: 29(i64vec4) VectorShuffle 1126 1124 4 5 6 3
+                              Store 1125 1127
+            1128:      6(int) Load 8(invocation)
+            1129:    122(ptr) AccessChain 37(data) 58 116
+            1130: 29(i64vec4) Load 1129
+            1131:   17(ivec4) Load 19(ballot)
+            1132: 29(i64vec4) GroupNonUniformSMax 177 PartitionedReduceNV 1130 1131
+            1133:    122(ptr) AccessChain 37(data) 1128 116
+                              Store 1133 1132
+            1134:      6(int) Load 8(invocation)
+            1135:    117(ptr) AccessChain 37(data) 39 116 40
+            1136: 28(int64_t) Load 1135
+            1137:   17(ivec4) Load 19(ballot)
+            1138: 28(int64_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1136 1137
+            1139:    117(ptr) AccessChain 37(data) 1134 116 40
+                              Store 1139 1138
+            1140:      6(int) Load 8(invocation)
+            1141:    122(ptr) AccessChain 37(data) 45 116
+            1142: 29(i64vec4) Load 1141
+            1143:121(i64vec2) VectorShuffle 1142 1142 0 1
+            1144:   17(ivec4) Load 19(ballot)
+            1145:121(i64vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1143 1144
+            1146:    122(ptr) AccessChain 37(data) 1140 116
+            1147: 29(i64vec4) Load 1146
+            1148: 29(i64vec4) VectorShuffle 1147 1145 4 5 2 3
+                              Store 1146 1148
+            1149:      6(int) Load 8(invocation)
+            1150:    122(ptr) AccessChain 37(data) 52 116
+            1151: 29(i64vec4) Load 1150
+            1152:127(i64vec3) VectorShuffle 1151 1151 0 1 2
+            1153:   17(ivec4) Load 19(ballot)
+            1154:127(i64vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1152 1153
+            1155:    122(ptr) AccessChain 37(data) 1149 116
+            1156: 29(i64vec4) Load 1155
+            1157: 29(i64vec4) VectorShuffle 1156 1154 4 5 6 3
+                              Store 1155 1157
+            1158:      6(int) Load 8(invocation)
+            1159:    122(ptr) AccessChain 37(data) 58 116
+            1160: 29(i64vec4) Load 1159
+            1161:   17(ivec4) Load 19(ballot)
+            1162: 29(i64vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1160 1161
+            1163:    122(ptr) AccessChain 37(data) 1158 116
+                              Store 1163 1162
+            1164:      6(int) Load 8(invocation)
+            1165:    117(ptr) AccessChain 37(data) 39 116 40
+            1166: 28(int64_t) Load 1165
+            1167:   17(ivec4) Load 19(ballot)
+            1168: 28(int64_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1166 1167
+            1169:    117(ptr) AccessChain 37(data) 1164 116 40
+                              Store 1169 1168
+            1170:      6(int) Load 8(invocation)
+            1171:    122(ptr) AccessChain 37(data) 45 116
+            1172: 29(i64vec4) Load 1171
+            1173:121(i64vec2) VectorShuffle 1172 1172 0 1
+            1174:   17(ivec4) Load 19(ballot)
+            1175:121(i64vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1173 1174
+            1176:    122(ptr) AccessChain 37(data) 1170 116
+            1177: 29(i64vec4) Load 1176
+            1178: 29(i64vec4) VectorShuffle 1177 1175 4 5 2 3
+                              Store 1176 1178
+            1179:      6(int) Load 8(invocation)
+            1180:    122(ptr) AccessChain 37(data) 52 116
+            1181: 29(i64vec4) Load 1180
+            1182:127(i64vec3) VectorShuffle 1181 1181 0 1 2
+            1183:   17(ivec4) Load 19(ballot)
+            1184:127(i64vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1182 1183
+            1185:    122(ptr) AccessChain 37(data) 1179 116
+            1186: 29(i64vec4) Load 1185
+            1187: 29(i64vec4) VectorShuffle 1186 1184 4 5 6 3
+                              Store 1185 1187
+            1188:      6(int) Load 8(invocation)
+            1189:    122(ptr) AccessChain 37(data) 58 116
+            1190: 29(i64vec4) Load 1189
+            1191:   17(ivec4) Load 19(ballot)
+            1192: 29(i64vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1190 1191
+            1193:    122(ptr) AccessChain 37(data) 1188 116
+                              Store 1193 1192
+            1194:      6(int) Load 8(invocation)
+            1195:    117(ptr) AccessChain 37(data) 39 116 40
+            1196: 28(int64_t) Load 1195
+            1197:   17(ivec4) Load 19(ballot)
+            1198: 28(int64_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1196 1197
+            1199:    117(ptr) AccessChain 37(data) 1194 116 40
+                              Store 1199 1198
+            1200:      6(int) Load 8(invocation)
+            1201:    122(ptr) AccessChain 37(data) 45 116
+            1202: 29(i64vec4) Load 1201
+            1203:121(i64vec2) VectorShuffle 1202 1202 0 1
+            1204:   17(ivec4) Load 19(ballot)
+            1205:121(i64vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1203 1204
+            1206:    122(ptr) AccessChain 37(data) 1200 116
+            1207: 29(i64vec4) Load 1206
+            1208: 29(i64vec4) VectorShuffle 1207 1205 4 5 2 3
+                              Store 1206 1208
+            1209:      6(int) Load 8(invocation)
+            1210:    122(ptr) AccessChain 37(data) 52 116
+            1211: 29(i64vec4) Load 1210
+            1212:127(i64vec3) VectorShuffle 1211 1211 0 1 2
+            1213:   17(ivec4) Load 19(ballot)
+            1214:127(i64vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1212 1213
+            1215:    122(ptr) AccessChain 37(data) 1209 116
+            1216: 29(i64vec4) Load 1215
+            1217: 29(i64vec4) VectorShuffle 1216 1214 4 5 6 3
+                              Store 1215 1217
+            1218:      6(int) Load 8(invocation)
+            1219:    122(ptr) AccessChain 37(data) 58 116
+            1220: 29(i64vec4) Load 1219
+            1221:   17(ivec4) Load 19(ballot)
+            1222: 29(i64vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1220 1221
+            1223:    122(ptr) AccessChain 37(data) 1218 116
+                              Store 1223 1222
+            1224:      6(int) Load 8(invocation)
+            1225:    136(ptr) AccessChain 37(data) 39 135 40
+            1226: 30(int64_t) Load 1225
+            1227:   17(ivec4) Load 19(ballot)
+            1228: 30(int64_t) GroupNonUniformIAdd 177 PartitionedReduceNV 1226 1227
+            1229:    136(ptr) AccessChain 37(data) 1224 135 40
+                              Store 1229 1228
+            1230:      6(int) Load 8(invocation)
+            1231:    141(ptr) AccessChain 37(data) 45 135
+            1232: 31(i64vec4) Load 1231
+            1233:140(i64vec2) VectorShuffle 1232 1232 0 1
+            1234:   17(ivec4) Load 19(ballot)
+            1235:140(i64vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 1233 1234
+            1236:    141(ptr) AccessChain 37(data) 1230 135
+            1237: 31(i64vec4) Load 1236
+            1238: 31(i64vec4) VectorShuffle 1237 1235 4 5 2 3
+                              Store 1236 1238
+            1239:      6(int) Load 8(invocation)
+            1240:    141(ptr) AccessChain 37(data) 52 135
+            1241: 31(i64vec4) Load 1240
+            1242:146(i64vec3) VectorShuffle 1241 1241 0 1 2
+            1243:   17(ivec4) Load 19(ballot)
+            1244:146(i64vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 1242 1243
+            1245:    141(ptr) AccessChain 37(data) 1239 135
+            1246: 31(i64vec4) Load 1245
+            1247: 31(i64vec4) VectorShuffle 1246 1244 4 5 6 3
+                              Store 1245 1247
+            1248:      6(int) Load 8(invocation)
+            1249:    141(ptr) AccessChain 37(data) 58 135
+            1250: 31(i64vec4) Load 1249
+            1251:   17(ivec4) Load 19(ballot)
+            1252: 31(i64vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 1250 1251
+            1253:    141(ptr) AccessChain 37(data) 1248 135
+                              Store 1253 1252
+            1254:      6(int) Load 8(invocation)
+            1255:    136(ptr) AccessChain 37(data) 39 135 40
+            1256: 30(int64_t) Load 1255
+            1257:   17(ivec4) Load 19(ballot)
+            1258: 30(int64_t) GroupNonUniformIMul 177 PartitionedReduceNV 1256 1257
+            1259:    136(ptr) AccessChain 37(data) 1254 135 40
+                              Store 1259 1258
+            1260:      6(int) Load 8(invocation)
+            1261:    141(ptr) AccessChain 37(data) 45 135
+            1262: 31(i64vec4) Load 1261
+            1263:140(i64vec2) VectorShuffle 1262 1262 0 1
+            1264:   17(ivec4) Load 19(ballot)
+            1265:140(i64vec2) GroupNonUniformIMul 177 PartitionedReduceNV 1263 1264
+            1266:    141(ptr) AccessChain 37(data) 1260 135
+            1267: 31(i64vec4) Load 1266
+            1268: 31(i64vec4) VectorShuffle 1267 1265 4 5 2 3
+                              Store 1266 1268
+            1269:      6(int) Load 8(invocation)
+            1270:    141(ptr) AccessChain 37(data) 52 135
+            1271: 31(i64vec4) Load 1270
+            1272:146(i64vec3) VectorShuffle 1271 1271 0 1 2
+            1273:   17(ivec4) Load 19(ballot)
+            1274:146(i64vec3) GroupNonUniformIMul 177 PartitionedReduceNV 1272 1273
+            1275:    141(ptr) AccessChain 37(data) 1269 135
+            1276: 31(i64vec4) Load 1275
+            1277: 31(i64vec4) VectorShuffle 1276 1274 4 5 6 3
+                              Store 1275 1277
+            1278:      6(int) Load 8(invocation)
+            1279:    141(ptr) AccessChain 37(data) 58 135
+            1280: 31(i64vec4) Load 1279
+            1281:   17(ivec4) Load 19(ballot)
+            1282: 31(i64vec4) GroupNonUniformIMul 177 PartitionedReduceNV 1280 1281
+            1283:    141(ptr) AccessChain 37(data) 1278 135
+                              Store 1283 1282
+            1284:      6(int) Load 8(invocation)
+            1285:    136(ptr) AccessChain 37(data) 39 135 40
+            1286: 30(int64_t) Load 1285
+            1287:   17(ivec4) Load 19(ballot)
+            1288: 30(int64_t) GroupNonUniformUMin 177 PartitionedReduceNV 1286 1287
+            1289:    136(ptr) AccessChain 37(data) 1284 135 40
+                              Store 1289 1288
+            1290:      6(int) Load 8(invocation)
+            1291:    141(ptr) AccessChain 37(data) 45 135
+            1292: 31(i64vec4) Load 1291
+            1293:140(i64vec2) VectorShuffle 1292 1292 0 1
+            1294:   17(ivec4) Load 19(ballot)
+            1295:140(i64vec2) GroupNonUniformUMin 177 PartitionedReduceNV 1293 1294
+            1296:    141(ptr) AccessChain 37(data) 1290 135
+            1297: 31(i64vec4) Load 1296
+            1298: 31(i64vec4) VectorShuffle 1297 1295 4 5 2 3
+                              Store 1296 1298
+            1299:      6(int) Load 8(invocation)
+            1300:    141(ptr) AccessChain 37(data) 52 135
+            1301: 31(i64vec4) Load 1300
+            1302:146(i64vec3) VectorShuffle 1301 1301 0 1 2
+            1303:   17(ivec4) Load 19(ballot)
+            1304:146(i64vec3) GroupNonUniformUMin 177 PartitionedReduceNV 1302 1303
+            1305:    141(ptr) AccessChain 37(data) 1299 135
+            1306: 31(i64vec4) Load 1305
+            1307: 31(i64vec4) VectorShuffle 1306 1304 4 5 6 3
+                              Store 1305 1307
+            1308:      6(int) Load 8(invocation)
+            1309:    141(ptr) AccessChain 37(data) 58 135
+            1310: 31(i64vec4) Load 1309
+            1311:   17(ivec4) Load 19(ballot)
+            1312: 31(i64vec4) GroupNonUniformUMin 177 PartitionedReduceNV 1310 1311
+            1313:    141(ptr) AccessChain 37(data) 1308 135
+                              Store 1313 1312
+            1314:      6(int) Load 8(invocation)
+            1315:    136(ptr) AccessChain 37(data) 39 135 40
+            1316: 30(int64_t) Load 1315
+            1317:   17(ivec4) Load 19(ballot)
+            1318: 30(int64_t) GroupNonUniformUMax 177 PartitionedReduceNV 1316 1317
+            1319:    136(ptr) AccessChain 37(data) 1314 135 40
+                              Store 1319 1318
+            1320:      6(int) Load 8(invocation)
+            1321:    141(ptr) AccessChain 37(data) 45 135
+            1322: 31(i64vec4) Load 1321
+            1323:140(i64vec2) VectorShuffle 1322 1322 0 1
+            1324:   17(ivec4) Load 19(ballot)
+            1325:140(i64vec2) GroupNonUniformUMax 177 PartitionedReduceNV 1323 1324
+            1326:    141(ptr) AccessChain 37(data) 1320 135
+            1327: 31(i64vec4) Load 1326
+            1328: 31(i64vec4) VectorShuffle 1327 1325 4 5 2 3
+                              Store 1326 1328
+            1329:      6(int) Load 8(invocation)
+            1330:    141(ptr) AccessChain 37(data) 52 135
+            1331: 31(i64vec4) Load 1330
+            1332:146(i64vec3) VectorShuffle 1331 1331 0 1 2
+            1333:   17(ivec4) Load 19(ballot)
+            1334:146(i64vec3) GroupNonUniformUMax 177 PartitionedReduceNV 1332 1333
+            1335:    141(ptr) AccessChain 37(data) 1329 135
+            1336: 31(i64vec4) Load 1335
+            1337: 31(i64vec4) VectorShuffle 1336 1334 4 5 6 3
+                              Store 1335 1337
+            1338:      6(int) Load 8(invocation)
+            1339:    141(ptr) AccessChain 37(data) 58 135
+            1340: 31(i64vec4) Load 1339
+            1341:   17(ivec4) Load 19(ballot)
+            1342: 31(i64vec4) GroupNonUniformUMax 177 PartitionedReduceNV 1340 1341
+            1343:    141(ptr) AccessChain 37(data) 1338 135
+                              Store 1343 1342
+            1344:      6(int) Load 8(invocation)
+            1345:    136(ptr) AccessChain 37(data) 39 135 40
+            1346: 30(int64_t) Load 1345
+            1347:   17(ivec4) Load 19(ballot)
+            1348: 30(int64_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1346 1347
+            1349:    136(ptr) AccessChain 37(data) 1344 135 40
+                              Store 1349 1348
+            1350:      6(int) Load 8(invocation)
+            1351:    141(ptr) AccessChain 37(data) 45 135
+            1352: 31(i64vec4) Load 1351
+            1353:140(i64vec2) VectorShuffle 1352 1352 0 1
+            1354:   17(ivec4) Load 19(ballot)
+            1355:140(i64vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1353 1354
+            1356:    141(ptr) AccessChain 37(data) 1350 135
+            1357: 31(i64vec4) Load 1356
+            1358: 31(i64vec4) VectorShuffle 1357 1355 4 5 2 3
+                              Store 1356 1358
+            1359:      6(int) Load 8(invocation)
+            1360:    141(ptr) AccessChain 37(data) 52 135
+            1361: 31(i64vec4) Load 1360
+            1362:146(i64vec3) VectorShuffle 1361 1361 0 1 2
+            1363:   17(ivec4) Load 19(ballot)
+            1364:146(i64vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1362 1363
+            1365:    141(ptr) AccessChain 37(data) 1359 135
+            1366: 31(i64vec4) Load 1365
+            1367: 31(i64vec4) VectorShuffle 1366 1364 4 5 6 3
+                              Store 1365 1367
+            1368:      6(int) Load 8(invocation)
+            1369:    141(ptr) AccessChain 37(data) 58 135
+            1370: 31(i64vec4) Load 1369
+            1371:   17(ivec4) Load 19(ballot)
+            1372: 31(i64vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1370 1371
+            1373:    141(ptr) AccessChain 37(data) 1368 135
+                              Store 1373 1372
+            1374:      6(int) Load 8(invocation)
+            1375:    136(ptr) AccessChain 37(data) 39 135 40
+            1376: 30(int64_t) Load 1375
+            1377:   17(ivec4) Load 19(ballot)
+            1378: 30(int64_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1376 1377
+            1379:    136(ptr) AccessChain 37(data) 1374 135 40
+                              Store 1379 1378
+            1380:      6(int) Load 8(invocation)
+            1381:    141(ptr) AccessChain 37(data) 45 135
+            1382: 31(i64vec4) Load 1381
+            1383:140(i64vec2) VectorShuffle 1382 1382 0 1
+            1384:   17(ivec4) Load 19(ballot)
+            1385:140(i64vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1383 1384
+            1386:    141(ptr) AccessChain 37(data) 1380 135
+            1387: 31(i64vec4) Load 1386
+            1388: 31(i64vec4) VectorShuffle 1387 1385 4 5 2 3
+                              Store 1386 1388
+            1389:      6(int) Load 8(invocation)
+            1390:    141(ptr) AccessChain 37(data) 52 135
+            1391: 31(i64vec4) Load 1390
+            1392:146(i64vec3) VectorShuffle 1391 1391 0 1 2
+            1393:   17(ivec4) Load 19(ballot)
+            1394:146(i64vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1392 1393
+            1395:    141(ptr) AccessChain 37(data) 1389 135
+            1396: 31(i64vec4) Load 1395
+            1397: 31(i64vec4) VectorShuffle 1396 1394 4 5 6 3
+                              Store 1395 1397
+            1398:      6(int) Load 8(invocation)
+            1399:    141(ptr) AccessChain 37(data) 58 135
+            1400: 31(i64vec4) Load 1399
+            1401:   17(ivec4) Load 19(ballot)
+            1402: 31(i64vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1400 1401
+            1403:    141(ptr) AccessChain 37(data) 1398 135
+                              Store 1403 1402
+            1404:      6(int) Load 8(invocation)
+            1405:    136(ptr) AccessChain 37(data) 39 135 40
+            1406: 30(int64_t) Load 1405
+            1407:   17(ivec4) Load 19(ballot)
+            1408: 30(int64_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1406 1407
+            1409:    136(ptr) AccessChain 37(data) 1404 135 40
+                              Store 1409 1408
+            1410:      6(int) Load 8(invocation)
+            1411:    141(ptr) AccessChain 37(data) 45 135
+            1412: 31(i64vec4) Load 1411
+            1413:140(i64vec2) VectorShuffle 1412 1412 0 1
+            1414:   17(ivec4) Load 19(ballot)
+            1415:140(i64vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1413 1414
+            1416:    141(ptr) AccessChain 37(data) 1410 135
+            1417: 31(i64vec4) Load 1416
+            1418: 31(i64vec4) VectorShuffle 1417 1415 4 5 2 3
+                              Store 1416 1418
+            1419:      6(int) Load 8(invocation)
+            1420:    141(ptr) AccessChain 37(data) 52 135
+            1421: 31(i64vec4) Load 1420
+            1422:146(i64vec3) VectorShuffle 1421 1421 0 1 2
+            1423:   17(ivec4) Load 19(ballot)
+            1424:146(i64vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1422 1423
+            1425:    141(ptr) AccessChain 37(data) 1419 135
+            1426: 31(i64vec4) Load 1425
+            1427: 31(i64vec4) VectorShuffle 1426 1424 4 5 6 3
+                              Store 1425 1427
+            1428:      6(int) Load 8(invocation)
+            1429:    141(ptr) AccessChain 37(data) 58 135
+            1430: 31(i64vec4) Load 1429
+            1431:   17(ivec4) Load 19(ballot)
+            1432: 31(i64vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1430 1431
+            1433:    141(ptr) AccessChain 37(data) 1428 135
+                              Store 1433 1432
+            1434:      6(int) Load 8(invocation)
+            1435:    155(ptr) AccessChain 37(data) 39 154 40
+            1436:32(float16_t) Load 1435
+            1437:   17(ivec4) Load 19(ballot)
+            1438:32(float16_t) GroupNonUniformFAdd 177 PartitionedReduceNV 1436 1437
+            1439:    155(ptr) AccessChain 37(data) 1434 154 40
+                              Store 1439 1438
+            1440:      6(int) Load 8(invocation)
+            1441:    160(ptr) AccessChain 37(data) 45 154
+            1442: 33(f16vec4) Load 1441
+            1443:159(f16vec2) VectorShuffle 1442 1442 0 1
+            1444:   17(ivec4) Load 19(ballot)
+            1445:159(f16vec2) GroupNonUniformFAdd 177 PartitionedReduceNV 1443 1444
+            1446:    160(ptr) AccessChain 37(data) 1440 154
+            1447: 33(f16vec4) Load 1446
+            1448: 33(f16vec4) VectorShuffle 1447 1445 4 5 2 3
+                              Store 1446 1448
+            1449:      6(int) Load 8(invocation)
+            1450:    160(ptr) AccessChain 37(data) 52 154
+            1451: 33(f16vec4) Load 1450
+            1452:165(f16vec3) VectorShuffle 1451 1451 0 1 2
+            1453:   17(ivec4) Load 19(ballot)
+            1454:165(f16vec3) GroupNonUniformFAdd 177 PartitionedReduceNV 1452 1453
+            1455:    160(ptr) AccessChain 37(data) 1449 154
+            1456: 33(f16vec4) Load 1455
+            1457: 33(f16vec4) VectorShuffle 1456 1454 4 5 6 3
+                              Store 1455 1457
+            1458:      6(int) Load 8(invocation)
+            1459:    160(ptr) AccessChain 37(data) 58 154
+            1460: 33(f16vec4) Load 1459
+            1461:   17(ivec4) Load 19(ballot)
+            1462: 33(f16vec4) GroupNonUniformFAdd 177 PartitionedReduceNV 1460 1461
+            1463:    160(ptr) AccessChain 37(data) 1458 154
+                              Store 1463 1462
+            1464:      6(int) Load 8(invocation)
+            1465:    155(ptr) AccessChain 37(data) 39 154 40
+            1466:32(float16_t) Load 1465
+            1467:   17(ivec4) Load 19(ballot)
+            1468:32(float16_t) GroupNonUniformFMul 177 PartitionedReduceNV 1466 1467
+            1469:    155(ptr) AccessChain 37(data) 1464 154 40
+                              Store 1469 1468
+            1470:      6(int) Load 8(invocation)
+            1471:    160(ptr) AccessChain 37(data) 45 154
+            1472: 33(f16vec4) Load 1471
+            1473:159(f16vec2) VectorShuffle 1472 1472 0 1
+            1474:   17(ivec4) Load 19(ballot)
+            1475:159(f16vec2) GroupNonUniformFMul 177 PartitionedReduceNV 1473 1474
+            1476:    160(ptr) AccessChain 37(data) 1470 154
+            1477: 33(f16vec4) Load 1476
+            1478: 33(f16vec4) VectorShuffle 1477 1475 4 5 2 3
+                              Store 1476 1478
+            1479:      6(int) Load 8(invocation)
+            1480:    160(ptr) AccessChain 37(data) 52 154
+            1481: 33(f16vec4) Load 1480
+            1482:165(f16vec3) VectorShuffle 1481 1481 0 1 2
+            1483:   17(ivec4) Load 19(ballot)
+            1484:165(f16vec3) GroupNonUniformFMul 177 PartitionedReduceNV 1482 1483
+            1485:    160(ptr) AccessChain 37(data) 1479 154
+            1486: 33(f16vec4) Load 1485
+            1487: 33(f16vec4) VectorShuffle 1486 1484 4 5 6 3
+                              Store 1485 1487
+            1488:      6(int) Load 8(invocation)
+            1489:    160(ptr) AccessChain 37(data) 58 154
+            1490: 33(f16vec4) Load 1489
+            1491:   17(ivec4) Load 19(ballot)
+            1492: 33(f16vec4) GroupNonUniformFMul 177 PartitionedReduceNV 1490 1491
+            1493:    160(ptr) AccessChain 37(data) 1488 154
+                              Store 1493 1492
+            1494:      6(int) Load 8(invocation)
+            1495:    155(ptr) AccessChain 37(data) 39 154 40
+            1496:32(float16_t) Load 1495
+            1497:   17(ivec4) Load 19(ballot)
+            1498:32(float16_t) GroupNonUniformFMin 177 PartitionedReduceNV 1496 1497
+            1499:    155(ptr) AccessChain 37(data) 1494 154 40
+                              Store 1499 1498
+            1500:      6(int) Load 8(invocation)
+            1501:    160(ptr) AccessChain 37(data) 45 154
+            1502: 33(f16vec4) Load 1501
+            1503:159(f16vec2) VectorShuffle 1502 1502 0 1
+            1504:   17(ivec4) Load 19(ballot)
+            1505:159(f16vec2) GroupNonUniformFMin 177 PartitionedReduceNV 1503 1504
+            1506:    160(ptr) AccessChain 37(data) 1500 154
+            1507: 33(f16vec4) Load 1506
+            1508: 33(f16vec4) VectorShuffle 1507 1505 4 5 2 3
+                              Store 1506 1508
+            1509:      6(int) Load 8(invocation)
+            1510:    160(ptr) AccessChain 37(data) 52 154
+            1511: 33(f16vec4) Load 1510
+            1512:165(f16vec3) VectorShuffle 1511 1511 0 1 2
+            1513:   17(ivec4) Load 19(ballot)
+            1514:165(f16vec3) GroupNonUniformFMin 177 PartitionedReduceNV 1512 1513
+            1515:    160(ptr) AccessChain 37(data) 1509 154
+            1516: 33(f16vec4) Load 1515
+            1517: 33(f16vec4) VectorShuffle 1516 1514 4 5 6 3
+                              Store 1515 1517
+            1518:      6(int) Load 8(invocation)
+            1519:    160(ptr) AccessChain 37(data) 58 154
+            1520: 33(f16vec4) Load 1519
+            1521:   17(ivec4) Load 19(ballot)
+            1522: 33(f16vec4) GroupNonUniformFMin 177 PartitionedReduceNV 1520 1521
+            1523:    160(ptr) AccessChain 37(data) 1518 154
+                              Store 1523 1522
+            1524:      6(int) Load 8(invocation)
+            1525:    155(ptr) AccessChain 37(data) 39 154 40
+            1526:32(float16_t) Load 1525
+            1527:   17(ivec4) Load 19(ballot)
+            1528:32(float16_t) GroupNonUniformFMax 177 PartitionedReduceNV 1526 1527
+            1529:    155(ptr) AccessChain 37(data) 1524 154 40
+                              Store 1529 1528
+            1530:      6(int) Load 8(invocation)
+            1531:    160(ptr) AccessChain 37(data) 45 154
+            1532: 33(f16vec4) Load 1531
+            1533:159(f16vec2) VectorShuffle 1532 1532 0 1
+            1534:   17(ivec4) Load 19(ballot)
+            1535:159(f16vec2) GroupNonUniformFMax 177 PartitionedReduceNV 1533 1534
+            1536:    160(ptr) AccessChain 37(data) 1530 154
+            1537: 33(f16vec4) Load 1536
+            1538: 33(f16vec4) VectorShuffle 1537 1535 4 5 2 3
+                              Store 1536 1538
+            1539:      6(int) Load 8(invocation)
+            1540:    160(ptr) AccessChain 37(data) 52 154
+            1541: 33(f16vec4) Load 1540
+            1542:165(f16vec3) VectorShuffle 1541 1541 0 1 2
+            1543:   17(ivec4) Load 19(ballot)
+            1544:165(f16vec3) GroupNonUniformFMax 177 PartitionedReduceNV 1542 1543
+            1545:    160(ptr) AccessChain 37(data) 1539 154
+            1546: 33(f16vec4) Load 1545
+            1547: 33(f16vec4) VectorShuffle 1546 1544 4 5 6 3
+                              Store 1545 1547
+            1548:      6(int) Load 8(invocation)
+            1549:    160(ptr) AccessChain 37(data) 58 154
+            1550: 33(f16vec4) Load 1549
+            1551:   17(ivec4) Load 19(ballot)
+            1552: 33(f16vec4) GroupNonUniformFMax 177 PartitionedReduceNV 1550 1551
+            1553:    160(ptr) AccessChain 37(data) 1548 154
+                              Store 1553 1552
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupExtendedTypesPartitionedNeg.comp.out b/Test/baseResults/spv.subgroupExtendedTypesPartitionedNeg.comp.out
new file mode 100644
index 0000000..c029617
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesPartitionedNeg.comp.out
@@ -0,0 +1,217 @@
+spv.subgroupExtendedTypesPartitionedNeg.comp
+ERROR: 0:27: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:30: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:35: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:38: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:39: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:40: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:42: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:43: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:44: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:45: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:47: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:48: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:49: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:50: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:52: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:53: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:54: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:55: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:57: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:58: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:59: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:60: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:62: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:63: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:64: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:65: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:67: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:68: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:69: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:70: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:72: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:73: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:74: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:75: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:77: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:78: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:79: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:80: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:82: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:83: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:84: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:85: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:87: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:88: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:89: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:90: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:92: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:93: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:94: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:95: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:97: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:98: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:99: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:100: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:102: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:103: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:104: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:105: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:107: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:108: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:109: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:110: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:112: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:113: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:114: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:115: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:117: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:118: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:119: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:120: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:122: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:123: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:124: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:125: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:127: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:128: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:129: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:130: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:132: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:133: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:134: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:135: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:137: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:138: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:139: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:140: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:142: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:143: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:144: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:145: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:147: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:148: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:149: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:150: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:152: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:153: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:154: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:155: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:157: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:158: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:159: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:160: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:162: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:163: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:164: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:165: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:167: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:168: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:169: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:170: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:172: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:173: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:174: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:175: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:177: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:178: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:179: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:180: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:182: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:183: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:184: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:185: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:187: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:188: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:189: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:190: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:192: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:193: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:194: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:195: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:197: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:198: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:199: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:200: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:202: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:203: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:204: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:205: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:207: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:208: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:209: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:210: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:212: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:213: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:214: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:215: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:217: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:218: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:219: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:220: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:222: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:223: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:224: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:225: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:227: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:228: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:229: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:230: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:232: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:233: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:234: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:235: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:237: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:238: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:239: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:240: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:242: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:243: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:244: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:245: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:247: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:248: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:249: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:250: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:252: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:253: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:254: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:255: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:257: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:258: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:259: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:260: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:262: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:263: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:264: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:265: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:267: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:268: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:269: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:270: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:272: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:273: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:274: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:275: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:277: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:278: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:279: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:280: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:282: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:283: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:284: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:285: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:287: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:288: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:289: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:290: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 212 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
new file mode 100644
index 0000000..7d37a41
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
@@ -0,0 +1,981 @@
+spv.subgroupExtendedTypesQuad.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 806
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformQuad
+                              Capability StorageUniformBufferBlock16
+                              Capability StorageBuffer8BitAccess
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_float16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int64"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int8"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_quad"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 31  "Buffers"
+                              MemberName 31(Buffers) 0  "i8"
+                              MemberName 31(Buffers) 1  "u8"
+                              MemberName 31(Buffers) 2  "i16"
+                              MemberName 31(Buffers) 3  "u16"
+                              MemberName 31(Buffers) 4  "i64"
+                              MemberName 31(Buffers) 5  "u64"
+                              MemberName 31(Buffers) 6  "f16"
+                              Name 34  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 31(Buffers) 0 Offset 0
+                              MemberDecorate 31(Buffers) 1 Offset 4
+                              MemberDecorate 31(Buffers) 2 Offset 8
+                              MemberDecorate 31(Buffers) 3 Offset 16
+                              MemberDecorate 31(Buffers) 4 Offset 32
+                              MemberDecorate 31(Buffers) 5 Offset 64
+                              MemberDecorate 31(Buffers) 6 Offset 96
+                              Decorate 31(Buffers) Block
+                              Decorate 34(data) DescriptorSet 0
+                              Decorate 34(data) Binding 0
+                              Decorate 805 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeInt 8 1
+              18:             TypeVector 17(int8_t) 4
+              19:             TypeInt 8 0
+              20:             TypeVector 19(int8_t) 4
+              21:             TypeInt 16 1
+              22:             TypeVector 21(int16_t) 4
+              23:             TypeInt 16 0
+              24:             TypeVector 23(int16_t) 4
+              25:             TypeInt 64 1
+              26:             TypeVector 25(int64_t) 4
+              27:             TypeInt 64 0
+              28:             TypeVector 27(int64_t) 4
+              29:             TypeFloat 16
+              30:             TypeVector 29(float16_t) 4
+     31(Buffers):             TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+              32:             TypeArray 31(Buffers) 15
+              33:             TypePointer StorageBuffer 32
+        34(data):     33(ptr) Variable StorageBuffer
+              36:             TypeInt 32 1
+              37:     36(int) Constant 0
+              38:      6(int) Constant 0
+              39:             TypePointer StorageBuffer 17(int8_t)
+              42:      6(int) Constant 1
+              43:      6(int) Constant 3
+              47:     36(int) Constant 1
+              48:             TypeVector 17(int8_t) 2
+              49:             TypePointer StorageBuffer 18(i8vec4)
+              58:     36(int) Constant 2
+              59:             TypeVector 17(int8_t) 3
+              68:     36(int) Constant 3
+             128:      6(int) Constant 2
+             153:             TypePointer StorageBuffer 19(int8_t)
+             159:             TypeVector 19(int8_t) 2
+             160:             TypePointer StorageBuffer 20(i8vec4)
+             169:             TypeVector 19(int8_t) 3
+             261:             TypePointer StorageBuffer 21(int16_t)
+             267:             TypeVector 21(int16_t) 2
+             268:             TypePointer StorageBuffer 22(i16vec4)
+             277:             TypeVector 21(int16_t) 3
+             369:             TypePointer StorageBuffer 23(int16_t)
+             375:             TypeVector 23(int16_t) 2
+             376:             TypePointer StorageBuffer 24(i16vec4)
+             385:             TypeVector 23(int16_t) 3
+             477:     36(int) Constant 4
+             478:             TypePointer StorageBuffer 25(int64_t)
+             484:             TypeVector 25(int64_t) 2
+             485:             TypePointer StorageBuffer 26(i64vec4)
+             494:             TypeVector 25(int64_t) 3
+             586:     36(int) Constant 5
+             587:             TypePointer StorageBuffer 27(int64_t)
+             593:             TypeVector 27(int64_t) 2
+             594:             TypePointer StorageBuffer 28(i64vec4)
+             603:             TypeVector 27(int64_t) 3
+             695:     36(int) Constant 6
+             696:             TypePointer StorageBuffer 29(float16_t)
+             702:             TypeVector 29(float16_t) 2
+             703:             TypePointer StorageBuffer 30(f16vec4)
+             712:             TypeVector 29(float16_t) 3
+             803:             TypeVector 6(int) 3
+             804:      6(int) Constant 8
+             805:  803(ivec3) ConstantComposite 804 42 42
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              35:      6(int) Load 8(invocation)
+              40:     39(ptr) AccessChain 34(data) 37 37 38
+              41:  17(int8_t) Load 40
+              44:  17(int8_t) GroupNonUniformQuadBroadcast 43 41 42
+              45:     39(ptr) AccessChain 34(data) 35 37 38
+                              Store 45 44
+              46:      6(int) Load 8(invocation)
+              50:     49(ptr) AccessChain 34(data) 47 37
+              51:  18(i8vec4) Load 50
+              52:  48(i8vec2) VectorShuffle 51 51 0 1
+              53:  48(i8vec2) GroupNonUniformQuadBroadcast 43 52 42
+              54:     49(ptr) AccessChain 34(data) 46 37
+              55:  18(i8vec4) Load 54
+              56:  18(i8vec4) VectorShuffle 55 53 4 5 2 3
+                              Store 54 56
+              57:      6(int) Load 8(invocation)
+              60:     49(ptr) AccessChain 34(data) 58 37
+              61:  18(i8vec4) Load 60
+              62:  59(i8vec3) VectorShuffle 61 61 0 1 2
+              63:  59(i8vec3) GroupNonUniformQuadBroadcast 43 62 42
+              64:     49(ptr) AccessChain 34(data) 57 37
+              65:  18(i8vec4) Load 64
+              66:  18(i8vec4) VectorShuffle 65 63 4 5 6 3
+                              Store 64 66
+              67:      6(int) Load 8(invocation)
+              69:     49(ptr) AccessChain 34(data) 68 37
+              70:  18(i8vec4) Load 69
+              71:  18(i8vec4) GroupNonUniformQuadBroadcast 43 70 42
+              72:     49(ptr) AccessChain 34(data) 67 37
+                              Store 72 71
+              73:      6(int) Load 8(invocation)
+              74:     39(ptr) AccessChain 34(data) 37 37 38
+              75:  17(int8_t) Load 74
+              76:  17(int8_t) GroupNonUniformQuadSwap 43 75 38
+              77:     39(ptr) AccessChain 34(data) 73 37 38
+                              Store 77 76
+              78:      6(int) Load 8(invocation)
+              79:     49(ptr) AccessChain 34(data) 47 37
+              80:  18(i8vec4) Load 79
+              81:  48(i8vec2) VectorShuffle 80 80 0 1
+              82:  48(i8vec2) GroupNonUniformQuadSwap 43 81 38
+              83:     49(ptr) AccessChain 34(data) 78 37
+              84:  18(i8vec4) Load 83
+              85:  18(i8vec4) VectorShuffle 84 82 4 5 2 3
+                              Store 83 85
+              86:      6(int) Load 8(invocation)
+              87:     49(ptr) AccessChain 34(data) 58 37
+              88:  18(i8vec4) Load 87
+              89:  59(i8vec3) VectorShuffle 88 88 0 1 2
+              90:  59(i8vec3) GroupNonUniformQuadSwap 43 89 38
+              91:     49(ptr) AccessChain 34(data) 86 37
+              92:  18(i8vec4) Load 91
+              93:  18(i8vec4) VectorShuffle 92 90 4 5 6 3
+                              Store 91 93
+              94:      6(int) Load 8(invocation)
+              95:     49(ptr) AccessChain 34(data) 68 37
+              96:  18(i8vec4) Load 95
+              97:  18(i8vec4) GroupNonUniformQuadSwap 43 96 38
+              98:     49(ptr) AccessChain 34(data) 94 37
+                              Store 98 97
+              99:      6(int) Load 8(invocation)
+             100:     39(ptr) AccessChain 34(data) 37 37 38
+             101:  17(int8_t) Load 100
+             102:  17(int8_t) GroupNonUniformQuadSwap 43 101 42
+             103:     39(ptr) AccessChain 34(data) 99 37 38
+                              Store 103 102
+             104:      6(int) Load 8(invocation)
+             105:     49(ptr) AccessChain 34(data) 47 37
+             106:  18(i8vec4) Load 105
+             107:  48(i8vec2) VectorShuffle 106 106 0 1
+             108:  48(i8vec2) GroupNonUniformQuadSwap 43 107 42
+             109:     49(ptr) AccessChain 34(data) 104 37
+             110:  18(i8vec4) Load 109
+             111:  18(i8vec4) VectorShuffle 110 108 4 5 2 3
+                              Store 109 111
+             112:      6(int) Load 8(invocation)
+             113:     49(ptr) AccessChain 34(data) 58 37
+             114:  18(i8vec4) Load 113
+             115:  59(i8vec3) VectorShuffle 114 114 0 1 2
+             116:  59(i8vec3) GroupNonUniformQuadSwap 43 115 42
+             117:     49(ptr) AccessChain 34(data) 112 37
+             118:  18(i8vec4) Load 117
+             119:  18(i8vec4) VectorShuffle 118 116 4 5 6 3
+                              Store 117 119
+             120:      6(int) Load 8(invocation)
+             121:     49(ptr) AccessChain 34(data) 68 37
+             122:  18(i8vec4) Load 121
+             123:  18(i8vec4) GroupNonUniformQuadSwap 43 122 42
+             124:     49(ptr) AccessChain 34(data) 120 37
+                              Store 124 123
+             125:      6(int) Load 8(invocation)
+             126:     39(ptr) AccessChain 34(data) 37 37 38
+             127:  17(int8_t) Load 126
+             129:  17(int8_t) GroupNonUniformQuadSwap 43 127 128
+             130:     39(ptr) AccessChain 34(data) 125 37 38
+                              Store 130 129
+             131:      6(int) Load 8(invocation)
+             132:     49(ptr) AccessChain 34(data) 47 37
+             133:  18(i8vec4) Load 132
+             134:  48(i8vec2) VectorShuffle 133 133 0 1
+             135:  48(i8vec2) GroupNonUniformQuadSwap 43 134 128
+             136:     49(ptr) AccessChain 34(data) 131 37
+             137:  18(i8vec4) Load 136
+             138:  18(i8vec4) VectorShuffle 137 135 4 5 2 3
+                              Store 136 138
+             139:      6(int) Load 8(invocation)
+             140:     49(ptr) AccessChain 34(data) 58 37
+             141:  18(i8vec4) Load 140
+             142:  59(i8vec3) VectorShuffle 141 141 0 1 2
+             143:  59(i8vec3) GroupNonUniformQuadSwap 43 142 128
+             144:     49(ptr) AccessChain 34(data) 139 37
+             145:  18(i8vec4) Load 144
+             146:  18(i8vec4) VectorShuffle 145 143 4 5 6 3
+                              Store 144 146
+             147:      6(int) Load 8(invocation)
+             148:     49(ptr) AccessChain 34(data) 68 37
+             149:  18(i8vec4) Load 148
+             150:  18(i8vec4) GroupNonUniformQuadSwap 43 149 128
+             151:     49(ptr) AccessChain 34(data) 147 37
+                              Store 151 150
+             152:      6(int) Load 8(invocation)
+             154:    153(ptr) AccessChain 34(data) 37 47 38
+             155:  19(int8_t) Load 154
+             156:  19(int8_t) GroupNonUniformQuadBroadcast 43 155 42
+             157:    153(ptr) AccessChain 34(data) 152 47 38
+                              Store 157 156
+             158:      6(int) Load 8(invocation)
+             161:    160(ptr) AccessChain 34(data) 47 47
+             162:  20(i8vec4) Load 161
+             163: 159(i8vec2) VectorShuffle 162 162 0 1
+             164: 159(i8vec2) GroupNonUniformQuadBroadcast 43 163 42
+             165:    160(ptr) AccessChain 34(data) 158 47
+             166:  20(i8vec4) Load 165
+             167:  20(i8vec4) VectorShuffle 166 164 4 5 2 3
+                              Store 165 167
+             168:      6(int) Load 8(invocation)
+             170:    160(ptr) AccessChain 34(data) 58 47
+             171:  20(i8vec4) Load 170
+             172: 169(i8vec3) VectorShuffle 171 171 0 1 2
+             173: 169(i8vec3) GroupNonUniformQuadBroadcast 43 172 42
+             174:    160(ptr) AccessChain 34(data) 168 47
+             175:  20(i8vec4) Load 174
+             176:  20(i8vec4) VectorShuffle 175 173 4 5 6 3
+                              Store 174 176
+             177:      6(int) Load 8(invocation)
+             178:    160(ptr) AccessChain 34(data) 68 47
+             179:  20(i8vec4) Load 178
+             180:  20(i8vec4) GroupNonUniformQuadBroadcast 43 179 42
+             181:    160(ptr) AccessChain 34(data) 177 47
+                              Store 181 180
+             182:      6(int) Load 8(invocation)
+             183:    153(ptr) AccessChain 34(data) 37 47 38
+             184:  19(int8_t) Load 183
+             185:  19(int8_t) GroupNonUniformQuadSwap 43 184 38
+             186:    153(ptr) AccessChain 34(data) 182 47 38
+                              Store 186 185
+             187:      6(int) Load 8(invocation)
+             188:    160(ptr) AccessChain 34(data) 47 47
+             189:  20(i8vec4) Load 188
+             190: 159(i8vec2) VectorShuffle 189 189 0 1
+             191: 159(i8vec2) GroupNonUniformQuadSwap 43 190 38
+             192:    160(ptr) AccessChain 34(data) 187 47
+             193:  20(i8vec4) Load 192
+             194:  20(i8vec4) VectorShuffle 193 191 4 5 2 3
+                              Store 192 194
+             195:      6(int) Load 8(invocation)
+             196:    160(ptr) AccessChain 34(data) 58 47
+             197:  20(i8vec4) Load 196
+             198: 169(i8vec3) VectorShuffle 197 197 0 1 2
+             199: 169(i8vec3) GroupNonUniformQuadSwap 43 198 38
+             200:    160(ptr) AccessChain 34(data) 195 47
+             201:  20(i8vec4) Load 200
+             202:  20(i8vec4) VectorShuffle 201 199 4 5 6 3
+                              Store 200 202
+             203:      6(int) Load 8(invocation)
+             204:    160(ptr) AccessChain 34(data) 68 47
+             205:  20(i8vec4) Load 204
+             206:  20(i8vec4) GroupNonUniformQuadSwap 43 205 38
+             207:    160(ptr) AccessChain 34(data) 203 47
+                              Store 207 206
+             208:      6(int) Load 8(invocation)
+             209:    153(ptr) AccessChain 34(data) 37 47 38
+             210:  19(int8_t) Load 209
+             211:  19(int8_t) GroupNonUniformQuadSwap 43 210 42
+             212:    153(ptr) AccessChain 34(data) 208 47 38
+                              Store 212 211
+             213:      6(int) Load 8(invocation)
+             214:    160(ptr) AccessChain 34(data) 47 47
+             215:  20(i8vec4) Load 214
+             216: 159(i8vec2) VectorShuffle 215 215 0 1
+             217: 159(i8vec2) GroupNonUniformQuadSwap 43 216 42
+             218:    160(ptr) AccessChain 34(data) 213 47
+             219:  20(i8vec4) Load 218
+             220:  20(i8vec4) VectorShuffle 219 217 4 5 2 3
+                              Store 218 220
+             221:      6(int) Load 8(invocation)
+             222:    160(ptr) AccessChain 34(data) 58 47
+             223:  20(i8vec4) Load 222
+             224: 169(i8vec3) VectorShuffle 223 223 0 1 2
+             225: 169(i8vec3) GroupNonUniformQuadSwap 43 224 42
+             226:    160(ptr) AccessChain 34(data) 221 47
+             227:  20(i8vec4) Load 226
+             228:  20(i8vec4) VectorShuffle 227 225 4 5 6 3
+                              Store 226 228
+             229:      6(int) Load 8(invocation)
+             230:    160(ptr) AccessChain 34(data) 68 47
+             231:  20(i8vec4) Load 230
+             232:  20(i8vec4) GroupNonUniformQuadSwap 43 231 42
+             233:    160(ptr) AccessChain 34(data) 229 47
+                              Store 233 232
+             234:      6(int) Load 8(invocation)
+             235:    153(ptr) AccessChain 34(data) 37 47 38
+             236:  19(int8_t) Load 235
+             237:  19(int8_t) GroupNonUniformQuadSwap 43 236 128
+             238:    153(ptr) AccessChain 34(data) 234 47 38
+                              Store 238 237
+             239:      6(int) Load 8(invocation)
+             240:    160(ptr) AccessChain 34(data) 47 47
+             241:  20(i8vec4) Load 240
+             242: 159(i8vec2) VectorShuffle 241 241 0 1
+             243: 159(i8vec2) GroupNonUniformQuadSwap 43 242 128
+             244:    160(ptr) AccessChain 34(data) 239 47
+             245:  20(i8vec4) Load 244
+             246:  20(i8vec4) VectorShuffle 245 243 4 5 2 3
+                              Store 244 246
+             247:      6(int) Load 8(invocation)
+             248:    160(ptr) AccessChain 34(data) 58 47
+             249:  20(i8vec4) Load 248
+             250: 169(i8vec3) VectorShuffle 249 249 0 1 2
+             251: 169(i8vec3) GroupNonUniformQuadSwap 43 250 128
+             252:    160(ptr) AccessChain 34(data) 247 47
+             253:  20(i8vec4) Load 252
+             254:  20(i8vec4) VectorShuffle 253 251 4 5 6 3
+                              Store 252 254
+             255:      6(int) Load 8(invocation)
+             256:    160(ptr) AccessChain 34(data) 68 47
+             257:  20(i8vec4) Load 256
+             258:  20(i8vec4) GroupNonUniformQuadSwap 43 257 128
+             259:    160(ptr) AccessChain 34(data) 255 47
+                              Store 259 258
+             260:      6(int) Load 8(invocation)
+             262:    261(ptr) AccessChain 34(data) 37 58 38
+             263: 21(int16_t) Load 262
+             264: 21(int16_t) GroupNonUniformQuadBroadcast 43 263 42
+             265:    261(ptr) AccessChain 34(data) 260 58 38
+                              Store 265 264
+             266:      6(int) Load 8(invocation)
+             269:    268(ptr) AccessChain 34(data) 47 58
+             270: 22(i16vec4) Load 269
+             271:267(i16vec2) VectorShuffle 270 270 0 1
+             272:267(i16vec2) GroupNonUniformQuadBroadcast 43 271 42
+             273:    268(ptr) AccessChain 34(data) 266 58
+             274: 22(i16vec4) Load 273
+             275: 22(i16vec4) VectorShuffle 274 272 4 5 2 3
+                              Store 273 275
+             276:      6(int) Load 8(invocation)
+             278:    268(ptr) AccessChain 34(data) 58 58
+             279: 22(i16vec4) Load 278
+             280:277(i16vec3) VectorShuffle 279 279 0 1 2
+             281:277(i16vec3) GroupNonUniformQuadBroadcast 43 280 42
+             282:    268(ptr) AccessChain 34(data) 276 58
+             283: 22(i16vec4) Load 282
+             284: 22(i16vec4) VectorShuffle 283 281 4 5 6 3
+                              Store 282 284
+             285:      6(int) Load 8(invocation)
+             286:    268(ptr) AccessChain 34(data) 68 58
+             287: 22(i16vec4) Load 286
+             288: 22(i16vec4) GroupNonUniformQuadBroadcast 43 287 42
+             289:    268(ptr) AccessChain 34(data) 285 58
+                              Store 289 288
+             290:      6(int) Load 8(invocation)
+             291:    261(ptr) AccessChain 34(data) 37 58 38
+             292: 21(int16_t) Load 291
+             293: 21(int16_t) GroupNonUniformQuadSwap 43 292 38
+             294:    261(ptr) AccessChain 34(data) 290 58 38
+                              Store 294 293
+             295:      6(int) Load 8(invocation)
+             296:    268(ptr) AccessChain 34(data) 47 58
+             297: 22(i16vec4) Load 296
+             298:267(i16vec2) VectorShuffle 297 297 0 1
+             299:267(i16vec2) GroupNonUniformQuadSwap 43 298 38
+             300:    268(ptr) AccessChain 34(data) 295 58
+             301: 22(i16vec4) Load 300
+             302: 22(i16vec4) VectorShuffle 301 299 4 5 2 3
+                              Store 300 302
+             303:      6(int) Load 8(invocation)
+             304:    268(ptr) AccessChain 34(data) 58 58
+             305: 22(i16vec4) Load 304
+             306:277(i16vec3) VectorShuffle 305 305 0 1 2
+             307:277(i16vec3) GroupNonUniformQuadSwap 43 306 38
+             308:    268(ptr) AccessChain 34(data) 303 58
+             309: 22(i16vec4) Load 308
+             310: 22(i16vec4) VectorShuffle 309 307 4 5 6 3
+                              Store 308 310
+             311:      6(int) Load 8(invocation)
+             312:    268(ptr) AccessChain 34(data) 68 58
+             313: 22(i16vec4) Load 312
+             314: 22(i16vec4) GroupNonUniformQuadSwap 43 313 38
+             315:    268(ptr) AccessChain 34(data) 311 58
+                              Store 315 314
+             316:      6(int) Load 8(invocation)
+             317:    261(ptr) AccessChain 34(data) 37 58 38
+             318: 21(int16_t) Load 317
+             319: 21(int16_t) GroupNonUniformQuadSwap 43 318 42
+             320:    261(ptr) AccessChain 34(data) 316 58 38
+                              Store 320 319
+             321:      6(int) Load 8(invocation)
+             322:    268(ptr) AccessChain 34(data) 47 58
+             323: 22(i16vec4) Load 322
+             324:267(i16vec2) VectorShuffle 323 323 0 1
+             325:267(i16vec2) GroupNonUniformQuadSwap 43 324 42
+             326:    268(ptr) AccessChain 34(data) 321 58
+             327: 22(i16vec4) Load 326
+             328: 22(i16vec4) VectorShuffle 327 325 4 5 2 3
+                              Store 326 328
+             329:      6(int) Load 8(invocation)
+             330:    268(ptr) AccessChain 34(data) 58 58
+             331: 22(i16vec4) Load 330
+             332:277(i16vec3) VectorShuffle 331 331 0 1 2
+             333:277(i16vec3) GroupNonUniformQuadSwap 43 332 42
+             334:    268(ptr) AccessChain 34(data) 329 58
+             335: 22(i16vec4) Load 334
+             336: 22(i16vec4) VectorShuffle 335 333 4 5 6 3
+                              Store 334 336
+             337:      6(int) Load 8(invocation)
+             338:    268(ptr) AccessChain 34(data) 68 58
+             339: 22(i16vec4) Load 338
+             340: 22(i16vec4) GroupNonUniformQuadSwap 43 339 42
+             341:    268(ptr) AccessChain 34(data) 337 58
+                              Store 341 340
+             342:      6(int) Load 8(invocation)
+             343:    261(ptr) AccessChain 34(data) 37 58 38
+             344: 21(int16_t) Load 343
+             345: 21(int16_t) GroupNonUniformQuadSwap 43 344 128
+             346:    261(ptr) AccessChain 34(data) 342 58 38
+                              Store 346 345
+             347:      6(int) Load 8(invocation)
+             348:    268(ptr) AccessChain 34(data) 47 58
+             349: 22(i16vec4) Load 348
+             350:267(i16vec2) VectorShuffle 349 349 0 1
+             351:267(i16vec2) GroupNonUniformQuadSwap 43 350 128
+             352:    268(ptr) AccessChain 34(data) 347 58
+             353: 22(i16vec4) Load 352
+             354: 22(i16vec4) VectorShuffle 353 351 4 5 2 3
+                              Store 352 354
+             355:      6(int) Load 8(invocation)
+             356:    268(ptr) AccessChain 34(data) 58 58
+             357: 22(i16vec4) Load 356
+             358:277(i16vec3) VectorShuffle 357 357 0 1 2
+             359:277(i16vec3) GroupNonUniformQuadSwap 43 358 128
+             360:    268(ptr) AccessChain 34(data) 355 58
+             361: 22(i16vec4) Load 360
+             362: 22(i16vec4) VectorShuffle 361 359 4 5 6 3
+                              Store 360 362
+             363:      6(int) Load 8(invocation)
+             364:    268(ptr) AccessChain 34(data) 68 58
+             365: 22(i16vec4) Load 364
+             366: 22(i16vec4) GroupNonUniformQuadSwap 43 365 128
+             367:    268(ptr) AccessChain 34(data) 363 58
+                              Store 367 366
+             368:      6(int) Load 8(invocation)
+             370:    369(ptr) AccessChain 34(data) 37 68 38
+             371: 23(int16_t) Load 370
+             372: 23(int16_t) GroupNonUniformQuadBroadcast 43 371 42
+             373:    369(ptr) AccessChain 34(data) 368 68 38
+                              Store 373 372
+             374:      6(int) Load 8(invocation)
+             377:    376(ptr) AccessChain 34(data) 47 68
+             378: 24(i16vec4) Load 377
+             379:375(i16vec2) VectorShuffle 378 378 0 1
+             380:375(i16vec2) GroupNonUniformQuadBroadcast 43 379 42
+             381:    376(ptr) AccessChain 34(data) 374 68
+             382: 24(i16vec4) Load 381
+             383: 24(i16vec4) VectorShuffle 382 380 4 5 2 3
+                              Store 381 383
+             384:      6(int) Load 8(invocation)
+             386:    376(ptr) AccessChain 34(data) 58 68
+             387: 24(i16vec4) Load 386
+             388:385(i16vec3) VectorShuffle 387 387 0 1 2
+             389:385(i16vec3) GroupNonUniformQuadBroadcast 43 388 42
+             390:    376(ptr) AccessChain 34(data) 384 68
+             391: 24(i16vec4) Load 390
+             392: 24(i16vec4) VectorShuffle 391 389 4 5 6 3
+                              Store 390 392
+             393:      6(int) Load 8(invocation)
+             394:    376(ptr) AccessChain 34(data) 68 68
+             395: 24(i16vec4) Load 394
+             396: 24(i16vec4) GroupNonUniformQuadBroadcast 43 395 42
+             397:    376(ptr) AccessChain 34(data) 393 68
+                              Store 397 396
+             398:      6(int) Load 8(invocation)
+             399:    369(ptr) AccessChain 34(data) 37 68 38
+             400: 23(int16_t) Load 399
+             401: 23(int16_t) GroupNonUniformQuadSwap 43 400 38
+             402:    369(ptr) AccessChain 34(data) 398 68 38
+                              Store 402 401
+             403:      6(int) Load 8(invocation)
+             404:    376(ptr) AccessChain 34(data) 47 68
+             405: 24(i16vec4) Load 404
+             406:375(i16vec2) VectorShuffle 405 405 0 1
+             407:375(i16vec2) GroupNonUniformQuadSwap 43 406 38
+             408:    376(ptr) AccessChain 34(data) 403 68
+             409: 24(i16vec4) Load 408
+             410: 24(i16vec4) VectorShuffle 409 407 4 5 2 3
+                              Store 408 410
+             411:      6(int) Load 8(invocation)
+             412:    376(ptr) AccessChain 34(data) 58 68
+             413: 24(i16vec4) Load 412
+             414:385(i16vec3) VectorShuffle 413 413 0 1 2
+             415:385(i16vec3) GroupNonUniformQuadSwap 43 414 38
+             416:    376(ptr) AccessChain 34(data) 411 68
+             417: 24(i16vec4) Load 416
+             418: 24(i16vec4) VectorShuffle 417 415 4 5 6 3
+                              Store 416 418
+             419:      6(int) Load 8(invocation)
+             420:    376(ptr) AccessChain 34(data) 68 68
+             421: 24(i16vec4) Load 420
+             422: 24(i16vec4) GroupNonUniformQuadSwap 43 421 38
+             423:    376(ptr) AccessChain 34(data) 419 68
+                              Store 423 422
+             424:      6(int) Load 8(invocation)
+             425:    369(ptr) AccessChain 34(data) 37 68 38
+             426: 23(int16_t) Load 425
+             427: 23(int16_t) GroupNonUniformQuadSwap 43 426 42
+             428:    369(ptr) AccessChain 34(data) 424 68 38
+                              Store 428 427
+             429:      6(int) Load 8(invocation)
+             430:    376(ptr) AccessChain 34(data) 47 68
+             431: 24(i16vec4) Load 430
+             432:375(i16vec2) VectorShuffle 431 431 0 1
+             433:375(i16vec2) GroupNonUniformQuadSwap 43 432 42
+             434:    376(ptr) AccessChain 34(data) 429 68
+             435: 24(i16vec4) Load 434
+             436: 24(i16vec4) VectorShuffle 435 433 4 5 2 3
+                              Store 434 436
+             437:      6(int) Load 8(invocation)
+             438:    376(ptr) AccessChain 34(data) 58 68
+             439: 24(i16vec4) Load 438
+             440:385(i16vec3) VectorShuffle 439 439 0 1 2
+             441:385(i16vec3) GroupNonUniformQuadSwap 43 440 42
+             442:    376(ptr) AccessChain 34(data) 437 68
+             443: 24(i16vec4) Load 442
+             444: 24(i16vec4) VectorShuffle 443 441 4 5 6 3
+                              Store 442 444
+             445:      6(int) Load 8(invocation)
+             446:    376(ptr) AccessChain 34(data) 68 68
+             447: 24(i16vec4) Load 446
+             448: 24(i16vec4) GroupNonUniformQuadSwap 43 447 42
+             449:    376(ptr) AccessChain 34(data) 445 68
+                              Store 449 448
+             450:      6(int) Load 8(invocation)
+             451:    369(ptr) AccessChain 34(data) 37 68 38
+             452: 23(int16_t) Load 451
+             453: 23(int16_t) GroupNonUniformQuadSwap 43 452 128
+             454:    369(ptr) AccessChain 34(data) 450 68 38
+                              Store 454 453
+             455:      6(int) Load 8(invocation)
+             456:    376(ptr) AccessChain 34(data) 47 68
+             457: 24(i16vec4) Load 456
+             458:375(i16vec2) VectorShuffle 457 457 0 1
+             459:375(i16vec2) GroupNonUniformQuadSwap 43 458 128
+             460:    376(ptr) AccessChain 34(data) 455 68
+             461: 24(i16vec4) Load 460
+             462: 24(i16vec4) VectorShuffle 461 459 4 5 2 3
+                              Store 460 462
+             463:      6(int) Load 8(invocation)
+             464:    376(ptr) AccessChain 34(data) 58 68
+             465: 24(i16vec4) Load 464
+             466:385(i16vec3) VectorShuffle 465 465 0 1 2
+             467:385(i16vec3) GroupNonUniformQuadSwap 43 466 128
+             468:    376(ptr) AccessChain 34(data) 463 68
+             469: 24(i16vec4) Load 468
+             470: 24(i16vec4) VectorShuffle 469 467 4 5 6 3
+                              Store 468 470
+             471:      6(int) Load 8(invocation)
+             472:    376(ptr) AccessChain 34(data) 68 68
+             473: 24(i16vec4) Load 472
+             474: 24(i16vec4) GroupNonUniformQuadSwap 43 473 128
+             475:    376(ptr) AccessChain 34(data) 471 68
+                              Store 475 474
+             476:      6(int) Load 8(invocation)
+             479:    478(ptr) AccessChain 34(data) 37 477 38
+             480: 25(int64_t) Load 479
+             481: 25(int64_t) GroupNonUniformQuadBroadcast 43 480 42
+             482:    478(ptr) AccessChain 34(data) 476 477 38
+                              Store 482 481
+             483:      6(int) Load 8(invocation)
+             486:    485(ptr) AccessChain 34(data) 47 477
+             487: 26(i64vec4) Load 486
+             488:484(i64vec2) VectorShuffle 487 487 0 1
+             489:484(i64vec2) GroupNonUniformQuadBroadcast 43 488 42
+             490:    485(ptr) AccessChain 34(data) 483 477
+             491: 26(i64vec4) Load 490
+             492: 26(i64vec4) VectorShuffle 491 489 4 5 2 3
+                              Store 490 492
+             493:      6(int) Load 8(invocation)
+             495:    485(ptr) AccessChain 34(data) 58 477
+             496: 26(i64vec4) Load 495
+             497:494(i64vec3) VectorShuffle 496 496 0 1 2
+             498:494(i64vec3) GroupNonUniformQuadBroadcast 43 497 42
+             499:    485(ptr) AccessChain 34(data) 493 477
+             500: 26(i64vec4) Load 499
+             501: 26(i64vec4) VectorShuffle 500 498 4 5 6 3
+                              Store 499 501
+             502:      6(int) Load 8(invocation)
+             503:    485(ptr) AccessChain 34(data) 68 477
+             504: 26(i64vec4) Load 503
+             505: 26(i64vec4) GroupNonUniformQuadBroadcast 43 504 42
+             506:    485(ptr) AccessChain 34(data) 502 477
+                              Store 506 505
+             507:      6(int) Load 8(invocation)
+             508:    478(ptr) AccessChain 34(data) 37 477 38
+             509: 25(int64_t) Load 508
+             510: 25(int64_t) GroupNonUniformQuadSwap 43 509 38
+             511:    478(ptr) AccessChain 34(data) 507 477 38
+                              Store 511 510
+             512:      6(int) Load 8(invocation)
+             513:    485(ptr) AccessChain 34(data) 47 477
+             514: 26(i64vec4) Load 513
+             515:484(i64vec2) VectorShuffle 514 514 0 1
+             516:484(i64vec2) GroupNonUniformQuadSwap 43 515 38
+             517:    485(ptr) AccessChain 34(data) 512 477
+             518: 26(i64vec4) Load 517
+             519: 26(i64vec4) VectorShuffle 518 516 4 5 2 3
+                              Store 517 519
+             520:      6(int) Load 8(invocation)
+             521:    485(ptr) AccessChain 34(data) 58 477
+             522: 26(i64vec4) Load 521
+             523:494(i64vec3) VectorShuffle 522 522 0 1 2
+             524:494(i64vec3) GroupNonUniformQuadSwap 43 523 38
+             525:    485(ptr) AccessChain 34(data) 520 477
+             526: 26(i64vec4) Load 525
+             527: 26(i64vec4) VectorShuffle 526 524 4 5 6 3
+                              Store 525 527
+             528:      6(int) Load 8(invocation)
+             529:    485(ptr) AccessChain 34(data) 68 477
+             530: 26(i64vec4) Load 529
+             531: 26(i64vec4) GroupNonUniformQuadSwap 43 530 38
+             532:    485(ptr) AccessChain 34(data) 528 477
+                              Store 532 531
+             533:      6(int) Load 8(invocation)
+             534:    478(ptr) AccessChain 34(data) 37 477 38
+             535: 25(int64_t) Load 534
+             536: 25(int64_t) GroupNonUniformQuadSwap 43 535 42
+             537:    478(ptr) AccessChain 34(data) 533 477 38
+                              Store 537 536
+             538:      6(int) Load 8(invocation)
+             539:    485(ptr) AccessChain 34(data) 47 477
+             540: 26(i64vec4) Load 539
+             541:484(i64vec2) VectorShuffle 540 540 0 1
+             542:484(i64vec2) GroupNonUniformQuadSwap 43 541 42
+             543:    485(ptr) AccessChain 34(data) 538 477
+             544: 26(i64vec4) Load 543
+             545: 26(i64vec4) VectorShuffle 544 542 4 5 2 3
+                              Store 543 545
+             546:      6(int) Load 8(invocation)
+             547:    485(ptr) AccessChain 34(data) 58 477
+             548: 26(i64vec4) Load 547
+             549:494(i64vec3) VectorShuffle 548 548 0 1 2
+             550:494(i64vec3) GroupNonUniformQuadSwap 43 549 42
+             551:    485(ptr) AccessChain 34(data) 546 477
+             552: 26(i64vec4) Load 551
+             553: 26(i64vec4) VectorShuffle 552 550 4 5 6 3
+                              Store 551 553
+             554:      6(int) Load 8(invocation)
+             555:    485(ptr) AccessChain 34(data) 68 477
+             556: 26(i64vec4) Load 555
+             557: 26(i64vec4) GroupNonUniformQuadSwap 43 556 42
+             558:    485(ptr) AccessChain 34(data) 554 477
+                              Store 558 557
+             559:      6(int) Load 8(invocation)
+             560:    478(ptr) AccessChain 34(data) 37 477 38
+             561: 25(int64_t) Load 560
+             562: 25(int64_t) GroupNonUniformQuadSwap 43 561 128
+             563:    478(ptr) AccessChain 34(data) 559 477 38
+                              Store 563 562
+             564:      6(int) Load 8(invocation)
+             565:    485(ptr) AccessChain 34(data) 47 477
+             566: 26(i64vec4) Load 565
+             567:484(i64vec2) VectorShuffle 566 566 0 1
+             568:484(i64vec2) GroupNonUniformQuadSwap 43 567 128
+             569:    485(ptr) AccessChain 34(data) 564 477
+             570: 26(i64vec4) Load 569
+             571: 26(i64vec4) VectorShuffle 570 568 4 5 2 3
+                              Store 569 571
+             572:      6(int) Load 8(invocation)
+             573:    485(ptr) AccessChain 34(data) 58 477
+             574: 26(i64vec4) Load 573
+             575:494(i64vec3) VectorShuffle 574 574 0 1 2
+             576:494(i64vec3) GroupNonUniformQuadSwap 43 575 128
+             577:    485(ptr) AccessChain 34(data) 572 477
+             578: 26(i64vec4) Load 577
+             579: 26(i64vec4) VectorShuffle 578 576 4 5 6 3
+                              Store 577 579
+             580:      6(int) Load 8(invocation)
+             581:    485(ptr) AccessChain 34(data) 68 477
+             582: 26(i64vec4) Load 581
+             583: 26(i64vec4) GroupNonUniformQuadSwap 43 582 128
+             584:    485(ptr) AccessChain 34(data) 580 477
+                              Store 584 583
+             585:      6(int) Load 8(invocation)
+             588:    587(ptr) AccessChain 34(data) 37 586 38
+             589: 27(int64_t) Load 588
+             590: 27(int64_t) GroupNonUniformQuadBroadcast 43 589 42
+             591:    587(ptr) AccessChain 34(data) 585 586 38
+                              Store 591 590
+             592:      6(int) Load 8(invocation)
+             595:    594(ptr) AccessChain 34(data) 47 586
+             596: 28(i64vec4) Load 595
+             597:593(i64vec2) VectorShuffle 596 596 0 1
+             598:593(i64vec2) GroupNonUniformQuadBroadcast 43 597 42
+             599:    594(ptr) AccessChain 34(data) 592 586
+             600: 28(i64vec4) Load 599
+             601: 28(i64vec4) VectorShuffle 600 598 4 5 2 3
+                              Store 599 601
+             602:      6(int) Load 8(invocation)
+             604:    594(ptr) AccessChain 34(data) 58 586
+             605: 28(i64vec4) Load 604
+             606:603(i64vec3) VectorShuffle 605 605 0 1 2
+             607:603(i64vec3) GroupNonUniformQuadBroadcast 43 606 42
+             608:    594(ptr) AccessChain 34(data) 602 586
+             609: 28(i64vec4) Load 608
+             610: 28(i64vec4) VectorShuffle 609 607 4 5 6 3
+                              Store 608 610
+             611:      6(int) Load 8(invocation)
+             612:    594(ptr) AccessChain 34(data) 68 586
+             613: 28(i64vec4) Load 612
+             614: 28(i64vec4) GroupNonUniformQuadBroadcast 43 613 42
+             615:    594(ptr) AccessChain 34(data) 611 586
+                              Store 615 614
+             616:      6(int) Load 8(invocation)
+             617:    587(ptr) AccessChain 34(data) 37 586 38
+             618: 27(int64_t) Load 617
+             619: 27(int64_t) GroupNonUniformQuadSwap 43 618 38
+             620:    587(ptr) AccessChain 34(data) 616 586 38
+                              Store 620 619
+             621:      6(int) Load 8(invocation)
+             622:    594(ptr) AccessChain 34(data) 47 586
+             623: 28(i64vec4) Load 622
+             624:593(i64vec2) VectorShuffle 623 623 0 1
+             625:593(i64vec2) GroupNonUniformQuadSwap 43 624 38
+             626:    594(ptr) AccessChain 34(data) 621 586
+             627: 28(i64vec4) Load 626
+             628: 28(i64vec4) VectorShuffle 627 625 4 5 2 3
+                              Store 626 628
+             629:      6(int) Load 8(invocation)
+             630:    594(ptr) AccessChain 34(data) 58 586
+             631: 28(i64vec4) Load 630
+             632:603(i64vec3) VectorShuffle 631 631 0 1 2
+             633:603(i64vec3) GroupNonUniformQuadSwap 43 632 38
+             634:    594(ptr) AccessChain 34(data) 629 586
+             635: 28(i64vec4) Load 634
+             636: 28(i64vec4) VectorShuffle 635 633 4 5 6 3
+                              Store 634 636
+             637:      6(int) Load 8(invocation)
+             638:    594(ptr) AccessChain 34(data) 68 586
+             639: 28(i64vec4) Load 638
+             640: 28(i64vec4) GroupNonUniformQuadSwap 43 639 38
+             641:    594(ptr) AccessChain 34(data) 637 586
+                              Store 641 640
+             642:      6(int) Load 8(invocation)
+             643:    587(ptr) AccessChain 34(data) 37 586 38
+             644: 27(int64_t) Load 643
+             645: 27(int64_t) GroupNonUniformQuadSwap 43 644 42
+             646:    587(ptr) AccessChain 34(data) 642 586 38
+                              Store 646 645
+             647:      6(int) Load 8(invocation)
+             648:    594(ptr) AccessChain 34(data) 47 586
+             649: 28(i64vec4) Load 648
+             650:593(i64vec2) VectorShuffle 649 649 0 1
+             651:593(i64vec2) GroupNonUniformQuadSwap 43 650 42
+             652:    594(ptr) AccessChain 34(data) 647 586
+             653: 28(i64vec4) Load 652
+             654: 28(i64vec4) VectorShuffle 653 651 4 5 2 3
+                              Store 652 654
+             655:      6(int) Load 8(invocation)
+             656:    594(ptr) AccessChain 34(data) 58 586
+             657: 28(i64vec4) Load 656
+             658:603(i64vec3) VectorShuffle 657 657 0 1 2
+             659:603(i64vec3) GroupNonUniformQuadSwap 43 658 42
+             660:    594(ptr) AccessChain 34(data) 655 586
+             661: 28(i64vec4) Load 660
+             662: 28(i64vec4) VectorShuffle 661 659 4 5 6 3
+                              Store 660 662
+             663:      6(int) Load 8(invocation)
+             664:    594(ptr) AccessChain 34(data) 68 586
+             665: 28(i64vec4) Load 664
+             666: 28(i64vec4) GroupNonUniformQuadSwap 43 665 42
+             667:    594(ptr) AccessChain 34(data) 663 586
+                              Store 667 666
+             668:      6(int) Load 8(invocation)
+             669:    587(ptr) AccessChain 34(data) 37 586 38
+             670: 27(int64_t) Load 669
+             671: 27(int64_t) GroupNonUniformQuadSwap 43 670 128
+             672:    587(ptr) AccessChain 34(data) 668 586 38
+                              Store 672 671
+             673:      6(int) Load 8(invocation)
+             674:    594(ptr) AccessChain 34(data) 47 586
+             675: 28(i64vec4) Load 674
+             676:593(i64vec2) VectorShuffle 675 675 0 1
+             677:593(i64vec2) GroupNonUniformQuadSwap 43 676 128
+             678:    594(ptr) AccessChain 34(data) 673 586
+             679: 28(i64vec4) Load 678
+             680: 28(i64vec4) VectorShuffle 679 677 4 5 2 3
+                              Store 678 680
+             681:      6(int) Load 8(invocation)
+             682:    594(ptr) AccessChain 34(data) 58 586
+             683: 28(i64vec4) Load 682
+             684:603(i64vec3) VectorShuffle 683 683 0 1 2
+             685:603(i64vec3) GroupNonUniformQuadSwap 43 684 128
+             686:    594(ptr) AccessChain 34(data) 681 586
+             687: 28(i64vec4) Load 686
+             688: 28(i64vec4) VectorShuffle 687 685 4 5 6 3
+                              Store 686 688
+             689:      6(int) Load 8(invocation)
+             690:    594(ptr) AccessChain 34(data) 68 586
+             691: 28(i64vec4) Load 690
+             692: 28(i64vec4) GroupNonUniformQuadSwap 43 691 128
+             693:    594(ptr) AccessChain 34(data) 689 586
+                              Store 693 692
+             694:      6(int) Load 8(invocation)
+             697:    696(ptr) AccessChain 34(data) 37 695 38
+             698:29(float16_t) Load 697
+             699:29(float16_t) GroupNonUniformQuadBroadcast 43 698 42
+             700:    696(ptr) AccessChain 34(data) 694 695 38
+                              Store 700 699
+             701:      6(int) Load 8(invocation)
+             704:    703(ptr) AccessChain 34(data) 47 695
+             705: 30(f16vec4) Load 704
+             706:702(f16vec2) VectorShuffle 705 705 0 1
+             707:702(f16vec2) GroupNonUniformQuadBroadcast 43 706 42
+             708:    703(ptr) AccessChain 34(data) 701 695
+             709: 30(f16vec4) Load 708
+             710: 30(f16vec4) VectorShuffle 709 707 4 5 2 3
+                              Store 708 710
+             711:      6(int) Load 8(invocation)
+             713:    703(ptr) AccessChain 34(data) 58 695
+             714: 30(f16vec4) Load 713
+             715:712(f16vec3) VectorShuffle 714 714 0 1 2
+             716:712(f16vec3) GroupNonUniformQuadBroadcast 43 715 42
+             717:    703(ptr) AccessChain 34(data) 711 695
+             718: 30(f16vec4) Load 717
+             719: 30(f16vec4) VectorShuffle 718 716 4 5 6 3
+                              Store 717 719
+             720:      6(int) Load 8(invocation)
+             721:    703(ptr) AccessChain 34(data) 68 695
+             722: 30(f16vec4) Load 721
+             723: 30(f16vec4) GroupNonUniformQuadBroadcast 43 722 42
+             724:    703(ptr) AccessChain 34(data) 720 695
+                              Store 724 723
+             725:      6(int) Load 8(invocation)
+             726:    696(ptr) AccessChain 34(data) 37 695 38
+             727:29(float16_t) Load 726
+             728:29(float16_t) GroupNonUniformQuadSwap 43 727 38
+             729:    696(ptr) AccessChain 34(data) 725 695 38
+                              Store 729 728
+             730:      6(int) Load 8(invocation)
+             731:    703(ptr) AccessChain 34(data) 47 695
+             732: 30(f16vec4) Load 731
+             733:702(f16vec2) VectorShuffle 732 732 0 1
+             734:702(f16vec2) GroupNonUniformQuadSwap 43 733 38
+             735:    703(ptr) AccessChain 34(data) 730 695
+             736: 30(f16vec4) Load 735
+             737: 30(f16vec4) VectorShuffle 736 734 4 5 2 3
+                              Store 735 737
+             738:      6(int) Load 8(invocation)
+             739:    703(ptr) AccessChain 34(data) 58 695
+             740: 30(f16vec4) Load 739
+             741:712(f16vec3) VectorShuffle 740 740 0 1 2
+             742:712(f16vec3) GroupNonUniformQuadSwap 43 741 38
+             743:    703(ptr) AccessChain 34(data) 738 695
+             744: 30(f16vec4) Load 743
+             745: 30(f16vec4) VectorShuffle 744 742 4 5 6 3
+                              Store 743 745
+             746:      6(int) Load 8(invocation)
+             747:    703(ptr) AccessChain 34(data) 68 695
+             748: 30(f16vec4) Load 747
+             749: 30(f16vec4) GroupNonUniformQuadSwap 43 748 38
+             750:    703(ptr) AccessChain 34(data) 746 695
+                              Store 750 749
+             751:      6(int) Load 8(invocation)
+             752:    696(ptr) AccessChain 34(data) 37 695 38
+             753:29(float16_t) Load 752
+             754:29(float16_t) GroupNonUniformQuadSwap 43 753 42
+             755:    696(ptr) AccessChain 34(data) 751 695 38
+                              Store 755 754
+             756:      6(int) Load 8(invocation)
+             757:    703(ptr) AccessChain 34(data) 47 695
+             758: 30(f16vec4) Load 757
+             759:702(f16vec2) VectorShuffle 758 758 0 1
+             760:702(f16vec2) GroupNonUniformQuadSwap 43 759 42
+             761:    703(ptr) AccessChain 34(data) 756 695
+             762: 30(f16vec4) Load 761
+             763: 30(f16vec4) VectorShuffle 762 760 4 5 2 3
+                              Store 761 763
+             764:      6(int) Load 8(invocation)
+             765:    703(ptr) AccessChain 34(data) 58 695
+             766: 30(f16vec4) Load 765
+             767:712(f16vec3) VectorShuffle 766 766 0 1 2
+             768:712(f16vec3) GroupNonUniformQuadSwap 43 767 42
+             769:    703(ptr) AccessChain 34(data) 764 695
+             770: 30(f16vec4) Load 769
+             771: 30(f16vec4) VectorShuffle 770 768 4 5 6 3
+                              Store 769 771
+             772:      6(int) Load 8(invocation)
+             773:    703(ptr) AccessChain 34(data) 68 695
+             774: 30(f16vec4) Load 773
+             775: 30(f16vec4) GroupNonUniformQuadSwap 43 774 42
+             776:    703(ptr) AccessChain 34(data) 772 695
+                              Store 776 775
+             777:      6(int) Load 8(invocation)
+             778:    696(ptr) AccessChain 34(data) 37 695 38
+             779:29(float16_t) Load 778
+             780:29(float16_t) GroupNonUniformQuadSwap 43 779 128
+             781:    696(ptr) AccessChain 34(data) 777 695 38
+                              Store 781 780
+             782:      6(int) Load 8(invocation)
+             783:    703(ptr) AccessChain 34(data) 47 695
+             784: 30(f16vec4) Load 783
+             785:702(f16vec2) VectorShuffle 784 784 0 1
+             786:702(f16vec2) GroupNonUniformQuadSwap 43 785 128
+             787:    703(ptr) AccessChain 34(data) 782 695
+             788: 30(f16vec4) Load 787
+             789: 30(f16vec4) VectorShuffle 788 786 4 5 2 3
+                              Store 787 789
+             790:      6(int) Load 8(invocation)
+             791:    703(ptr) AccessChain 34(data) 58 695
+             792: 30(f16vec4) Load 791
+             793:712(f16vec3) VectorShuffle 792 792 0 1 2
+             794:712(f16vec3) GroupNonUniformQuadSwap 43 793 128
+             795:    703(ptr) AccessChain 34(data) 790 695
+             796: 30(f16vec4) Load 795
+             797: 30(f16vec4) VectorShuffle 796 794 4 5 6 3
+                              Store 795 797
+             798:      6(int) Load 8(invocation)
+             799:    703(ptr) AccessChain 34(data) 68 695
+             800: 30(f16vec4) Load 799
+             801: 30(f16vec4) GroupNonUniformQuadSwap 43 800 128
+             802:    703(ptr) AccessChain 34(data) 798 695
+                              Store 802 801
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupExtendedTypesQuadNeg.comp.out b/Test/baseResults/spv.subgroupExtendedTypesQuadNeg.comp.out
new file mode 100644
index 0000000..73b1597
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesQuadNeg.comp.out
@@ -0,0 +1,117 @@
+spv.subgroupExtendedTypesQuadNeg.comp
+ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:43: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:46: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:47: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:48: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:51: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:52: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:53: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:56: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:57: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:58: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:61: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:62: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:63: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:66: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:67: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:68: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:71: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:72: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:73: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:76: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:77: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:78: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:81: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:82: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:83: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:86: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:87: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:88: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:89: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:91: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:92: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:93: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:94: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:96: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:97: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:98: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:99: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:101: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:102: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:103: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:104: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:106: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:107: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:108: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:109: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:111: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:112: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:113: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:114: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:116: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:117: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:118: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:119: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:121: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:122: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:123: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:124: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:126: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:127: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:128: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:129: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:131: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:132: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:133: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:134: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:136: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:137: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:138: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:139: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:141: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:142: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:143: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:144: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:146: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:147: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:148: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:149: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:151: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:152: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:153: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:154: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:156: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:157: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:158: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:159: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:161: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:162: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:163: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:164: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 112 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
new file mode 100644
index 0000000..d647ded
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
@@ -0,0 +1,616 @@
+spv.subgroupExtendedTypesShuffle.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 497
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformShuffle
+                              Capability StorageUniformBufferBlock16
+                              Capability StorageBuffer8BitAccess
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_float16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int64"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int8"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 31  "Buffers"
+                              MemberName 31(Buffers) 0  "i8"
+                              MemberName 31(Buffers) 1  "u8"
+                              MemberName 31(Buffers) 2  "i16"
+                              MemberName 31(Buffers) 3  "u16"
+                              MemberName 31(Buffers) 4  "i64"
+                              MemberName 31(Buffers) 5  "u64"
+                              MemberName 31(Buffers) 6  "f16"
+                              Name 34  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 31(Buffers) 0 Offset 0
+                              MemberDecorate 31(Buffers) 1 Offset 4
+                              MemberDecorate 31(Buffers) 2 Offset 8
+                              MemberDecorate 31(Buffers) 3 Offset 16
+                              MemberDecorate 31(Buffers) 4 Offset 32
+                              MemberDecorate 31(Buffers) 5 Offset 64
+                              MemberDecorate 31(Buffers) 6 Offset 96
+                              Decorate 31(Buffers) Block
+                              Decorate 34(data) DescriptorSet 0
+                              Decorate 34(data) Binding 0
+                              Decorate 496 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeInt 8 1
+              18:             TypeVector 17(int8_t) 4
+              19:             TypeInt 8 0
+              20:             TypeVector 19(int8_t) 4
+              21:             TypeInt 16 1
+              22:             TypeVector 21(int16_t) 4
+              23:             TypeInt 16 0
+              24:             TypeVector 23(int16_t) 4
+              25:             TypeInt 64 1
+              26:             TypeVector 25(int64_t) 4
+              27:             TypeInt 64 0
+              28:             TypeVector 27(int64_t) 4
+              29:             TypeFloat 16
+              30:             TypeVector 29(float16_t) 4
+     31(Buffers):             TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+              32:             TypeArray 31(Buffers) 15
+              33:             TypePointer StorageBuffer 32
+        34(data):     33(ptr) Variable StorageBuffer
+              36:             TypeInt 32 1
+              37:     36(int) Constant 0
+              38:      6(int) Constant 0
+              39:             TypePointer StorageBuffer 17(int8_t)
+              43:      6(int) Constant 3
+              47:     36(int) Constant 1
+              48:             TypeVector 17(int8_t) 2
+              49:             TypePointer StorageBuffer 18(i8vec4)
+              59:     36(int) Constant 2
+              60:             TypeVector 17(int8_t) 3
+              70:     36(int) Constant 3
+             107:             TypePointer StorageBuffer 19(int8_t)
+             114:             TypeVector 19(int8_t) 2
+             115:             TypePointer StorageBuffer 20(i8vec4)
+             125:             TypeVector 19(int8_t) 3
+             171:             TypePointer StorageBuffer 21(int16_t)
+             178:             TypeVector 21(int16_t) 2
+             179:             TypePointer StorageBuffer 22(i16vec4)
+             189:             TypeVector 21(int16_t) 3
+             235:             TypePointer StorageBuffer 23(int16_t)
+             242:             TypeVector 23(int16_t) 2
+             243:             TypePointer StorageBuffer 24(i16vec4)
+             253:             TypeVector 23(int16_t) 3
+             299:     36(int) Constant 4
+             300:             TypePointer StorageBuffer 25(int64_t)
+             307:             TypeVector 25(int64_t) 2
+             308:             TypePointer StorageBuffer 26(i64vec4)
+             318:             TypeVector 25(int64_t) 3
+             364:     36(int) Constant 5
+             365:             TypePointer StorageBuffer 27(int64_t)
+             372:             TypeVector 27(int64_t) 2
+             373:             TypePointer StorageBuffer 28(i64vec4)
+             383:             TypeVector 27(int64_t) 3
+             429:     36(int) Constant 6
+             430:             TypePointer StorageBuffer 29(float16_t)
+             437:             TypeVector 29(float16_t) 2
+             438:             TypePointer StorageBuffer 30(f16vec4)
+             448:             TypeVector 29(float16_t) 3
+             493:             TypeVector 6(int) 3
+             494:      6(int) Constant 8
+             495:      6(int) Constant 1
+             496:  493(ivec3) ConstantComposite 494 495 495
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              35:      6(int) Load 8(invocation)
+              40:     39(ptr) AccessChain 34(data) 37 37 38
+              41:  17(int8_t) Load 40
+              42:      6(int) Load 8(invocation)
+              44:  17(int8_t) GroupNonUniformShuffle 43 41 42
+              45:     39(ptr) AccessChain 34(data) 35 37 38
+                              Store 45 44
+              46:      6(int) Load 8(invocation)
+              50:     49(ptr) AccessChain 34(data) 47 37
+              51:  18(i8vec4) Load 50
+              52:  48(i8vec2) VectorShuffle 51 51 0 1
+              53:      6(int) Load 8(invocation)
+              54:  48(i8vec2) GroupNonUniformShuffle 43 52 53
+              55:     49(ptr) AccessChain 34(data) 46 37
+              56:  18(i8vec4) Load 55
+              57:  18(i8vec4) VectorShuffle 56 54 4 5 2 3
+                              Store 55 57
+              58:      6(int) Load 8(invocation)
+              61:     49(ptr) AccessChain 34(data) 59 37
+              62:  18(i8vec4) Load 61
+              63:  60(i8vec3) VectorShuffle 62 62 0 1 2
+              64:      6(int) Load 8(invocation)
+              65:  60(i8vec3) GroupNonUniformShuffle 43 63 64
+              66:     49(ptr) AccessChain 34(data) 58 37
+              67:  18(i8vec4) Load 66
+              68:  18(i8vec4) VectorShuffle 67 65 4 5 6 3
+                              Store 66 68
+              69:      6(int) Load 8(invocation)
+              71:     49(ptr) AccessChain 34(data) 70 37
+              72:  18(i8vec4) Load 71
+              73:      6(int) Load 8(invocation)
+              74:  18(i8vec4) GroupNonUniformShuffle 43 72 73
+              75:     49(ptr) AccessChain 34(data) 69 37
+                              Store 75 74
+              76:      6(int) Load 8(invocation)
+              77:     39(ptr) AccessChain 34(data) 37 37 38
+              78:  17(int8_t) Load 77
+              79:      6(int) Load 8(invocation)
+              80:  17(int8_t) GroupNonUniformShuffleXor 43 78 79
+              81:     39(ptr) AccessChain 34(data) 76 37 38
+                              Store 81 80
+              82:      6(int) Load 8(invocation)
+              83:     49(ptr) AccessChain 34(data) 47 37
+              84:  18(i8vec4) Load 83
+              85:  48(i8vec2) VectorShuffle 84 84 0 1
+              86:      6(int) Load 8(invocation)
+              87:  48(i8vec2) GroupNonUniformShuffleXor 43 85 86
+              88:     49(ptr) AccessChain 34(data) 82 37
+              89:  18(i8vec4) Load 88
+              90:  18(i8vec4) VectorShuffle 89 87 4 5 2 3
+                              Store 88 90
+              91:      6(int) Load 8(invocation)
+              92:     49(ptr) AccessChain 34(data) 59 37
+              93:  18(i8vec4) Load 92
+              94:  60(i8vec3) VectorShuffle 93 93 0 1 2
+              95:      6(int) Load 8(invocation)
+              96:  60(i8vec3) GroupNonUniformShuffleXor 43 94 95
+              97:     49(ptr) AccessChain 34(data) 91 37
+              98:  18(i8vec4) Load 97
+              99:  18(i8vec4) VectorShuffle 98 96 4 5 6 3
+                              Store 97 99
+             100:      6(int) Load 8(invocation)
+             101:     49(ptr) AccessChain 34(data) 70 37
+             102:  18(i8vec4) Load 101
+             103:      6(int) Load 8(invocation)
+             104:  18(i8vec4) GroupNonUniformShuffleXor 43 102 103
+             105:     49(ptr) AccessChain 34(data) 100 37
+                              Store 105 104
+             106:      6(int) Load 8(invocation)
+             108:    107(ptr) AccessChain 34(data) 37 47 38
+             109:  19(int8_t) Load 108
+             110:      6(int) Load 8(invocation)
+             111:  19(int8_t) GroupNonUniformShuffle 43 109 110
+             112:    107(ptr) AccessChain 34(data) 106 47 38
+                              Store 112 111
+             113:      6(int) Load 8(invocation)
+             116:    115(ptr) AccessChain 34(data) 47 47
+             117:  20(i8vec4) Load 116
+             118: 114(i8vec2) VectorShuffle 117 117 0 1
+             119:      6(int) Load 8(invocation)
+             120: 114(i8vec2) GroupNonUniformShuffle 43 118 119
+             121:    115(ptr) AccessChain 34(data) 113 47
+             122:  20(i8vec4) Load 121
+             123:  20(i8vec4) VectorShuffle 122 120 4 5 2 3
+                              Store 121 123
+             124:      6(int) Load 8(invocation)
+             126:    115(ptr) AccessChain 34(data) 59 47
+             127:  20(i8vec4) Load 126
+             128: 125(i8vec3) VectorShuffle 127 127 0 1 2
+             129:      6(int) Load 8(invocation)
+             130: 125(i8vec3) GroupNonUniformShuffle 43 128 129
+             131:    115(ptr) AccessChain 34(data) 124 47
+             132:  20(i8vec4) Load 131
+             133:  20(i8vec4) VectorShuffle 132 130 4 5 6 3
+                              Store 131 133
+             134:      6(int) Load 8(invocation)
+             135:    115(ptr) AccessChain 34(data) 70 47
+             136:  20(i8vec4) Load 135
+             137:      6(int) Load 8(invocation)
+             138:  20(i8vec4) GroupNonUniformShuffle 43 136 137
+             139:    115(ptr) AccessChain 34(data) 134 47
+                              Store 139 138
+             140:      6(int) Load 8(invocation)
+             141:    107(ptr) AccessChain 34(data) 37 47 38
+             142:  19(int8_t) Load 141
+             143:      6(int) Load 8(invocation)
+             144:  19(int8_t) GroupNonUniformShuffleXor 43 142 143
+             145:    107(ptr) AccessChain 34(data) 140 47 38
+                              Store 145 144
+             146:      6(int) Load 8(invocation)
+             147:    115(ptr) AccessChain 34(data) 47 47
+             148:  20(i8vec4) Load 147
+             149: 114(i8vec2) VectorShuffle 148 148 0 1
+             150:      6(int) Load 8(invocation)
+             151: 114(i8vec2) GroupNonUniformShuffleXor 43 149 150
+             152:    115(ptr) AccessChain 34(data) 146 47
+             153:  20(i8vec4) Load 152
+             154:  20(i8vec4) VectorShuffle 153 151 4 5 2 3
+                              Store 152 154
+             155:      6(int) Load 8(invocation)
+             156:    115(ptr) AccessChain 34(data) 59 47
+             157:  20(i8vec4) Load 156
+             158: 125(i8vec3) VectorShuffle 157 157 0 1 2
+             159:      6(int) Load 8(invocation)
+             160: 125(i8vec3) GroupNonUniformShuffleXor 43 158 159
+             161:    115(ptr) AccessChain 34(data) 155 47
+             162:  20(i8vec4) Load 161
+             163:  20(i8vec4) VectorShuffle 162 160 4 5 6 3
+                              Store 161 163
+             164:      6(int) Load 8(invocation)
+             165:    115(ptr) AccessChain 34(data) 70 47
+             166:  20(i8vec4) Load 165
+             167:      6(int) Load 8(invocation)
+             168:  20(i8vec4) GroupNonUniformShuffleXor 43 166 167
+             169:    115(ptr) AccessChain 34(data) 164 47
+                              Store 169 168
+             170:      6(int) Load 8(invocation)
+             172:    171(ptr) AccessChain 34(data) 37 59 38
+             173: 21(int16_t) Load 172
+             174:      6(int) Load 8(invocation)
+             175: 21(int16_t) GroupNonUniformShuffle 43 173 174
+             176:    171(ptr) AccessChain 34(data) 170 59 38
+                              Store 176 175
+             177:      6(int) Load 8(invocation)
+             180:    179(ptr) AccessChain 34(data) 47 59
+             181: 22(i16vec4) Load 180
+             182:178(i16vec2) VectorShuffle 181 181 0 1
+             183:      6(int) Load 8(invocation)
+             184:178(i16vec2) GroupNonUniformShuffle 43 182 183
+             185:    179(ptr) AccessChain 34(data) 177 59
+             186: 22(i16vec4) Load 185
+             187: 22(i16vec4) VectorShuffle 186 184 4 5 2 3
+                              Store 185 187
+             188:      6(int) Load 8(invocation)
+             190:    179(ptr) AccessChain 34(data) 59 59
+             191: 22(i16vec4) Load 190
+             192:189(i16vec3) VectorShuffle 191 191 0 1 2
+             193:      6(int) Load 8(invocation)
+             194:189(i16vec3) GroupNonUniformShuffle 43 192 193
+             195:    179(ptr) AccessChain 34(data) 188 59
+             196: 22(i16vec4) Load 195
+             197: 22(i16vec4) VectorShuffle 196 194 4 5 6 3
+                              Store 195 197
+             198:      6(int) Load 8(invocation)
+             199:    179(ptr) AccessChain 34(data) 70 59
+             200: 22(i16vec4) Load 199
+             201:      6(int) Load 8(invocation)
+             202: 22(i16vec4) GroupNonUniformShuffle 43 200 201
+             203:    179(ptr) AccessChain 34(data) 198 59
+                              Store 203 202
+             204:      6(int) Load 8(invocation)
+             205:    171(ptr) AccessChain 34(data) 37 59 38
+             206: 21(int16_t) Load 205
+             207:      6(int) Load 8(invocation)
+             208: 21(int16_t) GroupNonUniformShuffleXor 43 206 207
+             209:    171(ptr) AccessChain 34(data) 204 59 38
+                              Store 209 208
+             210:      6(int) Load 8(invocation)
+             211:    179(ptr) AccessChain 34(data) 47 59
+             212: 22(i16vec4) Load 211
+             213:178(i16vec2) VectorShuffle 212 212 0 1
+             214:      6(int) Load 8(invocation)
+             215:178(i16vec2) GroupNonUniformShuffleXor 43 213 214
+             216:    179(ptr) AccessChain 34(data) 210 59
+             217: 22(i16vec4) Load 216
+             218: 22(i16vec4) VectorShuffle 217 215 4 5 2 3
+                              Store 216 218
+             219:      6(int) Load 8(invocation)
+             220:    179(ptr) AccessChain 34(data) 59 59
+             221: 22(i16vec4) Load 220
+             222:189(i16vec3) VectorShuffle 221 221 0 1 2
+             223:      6(int) Load 8(invocation)
+             224:189(i16vec3) GroupNonUniformShuffleXor 43 222 223
+             225:    179(ptr) AccessChain 34(data) 219 59
+             226: 22(i16vec4) Load 225
+             227: 22(i16vec4) VectorShuffle 226 224 4 5 6 3
+                              Store 225 227
+             228:      6(int) Load 8(invocation)
+             229:    179(ptr) AccessChain 34(data) 70 59
+             230: 22(i16vec4) Load 229
+             231:      6(int) Load 8(invocation)
+             232: 22(i16vec4) GroupNonUniformShuffleXor 43 230 231
+             233:    179(ptr) AccessChain 34(data) 228 59
+                              Store 233 232
+             234:      6(int) Load 8(invocation)
+             236:    235(ptr) AccessChain 34(data) 37 70 38
+             237: 23(int16_t) Load 236
+             238:      6(int) Load 8(invocation)
+             239: 23(int16_t) GroupNonUniformShuffle 43 237 238
+             240:    235(ptr) AccessChain 34(data) 234 70 38
+                              Store 240 239
+             241:      6(int) Load 8(invocation)
+             244:    243(ptr) AccessChain 34(data) 47 70
+             245: 24(i16vec4) Load 244
+             246:242(i16vec2) VectorShuffle 245 245 0 1
+             247:      6(int) Load 8(invocation)
+             248:242(i16vec2) GroupNonUniformShuffle 43 246 247
+             249:    243(ptr) AccessChain 34(data) 241 70
+             250: 24(i16vec4) Load 249
+             251: 24(i16vec4) VectorShuffle 250 248 4 5 2 3
+                              Store 249 251
+             252:      6(int) Load 8(invocation)
+             254:    243(ptr) AccessChain 34(data) 59 70
+             255: 24(i16vec4) Load 254
+             256:253(i16vec3) VectorShuffle 255 255 0 1 2
+             257:      6(int) Load 8(invocation)
+             258:253(i16vec3) GroupNonUniformShuffle 43 256 257
+             259:    243(ptr) AccessChain 34(data) 252 70
+             260: 24(i16vec4) Load 259
+             261: 24(i16vec4) VectorShuffle 260 258 4 5 6 3
+                              Store 259 261
+             262:      6(int) Load 8(invocation)
+             263:    243(ptr) AccessChain 34(data) 70 70
+             264: 24(i16vec4) Load 263
+             265:      6(int) Load 8(invocation)
+             266: 24(i16vec4) GroupNonUniformShuffle 43 264 265
+             267:    243(ptr) AccessChain 34(data) 262 70
+                              Store 267 266
+             268:      6(int) Load 8(invocation)
+             269:    235(ptr) AccessChain 34(data) 37 70 38
+             270: 23(int16_t) Load 269
+             271:      6(int) Load 8(invocation)
+             272: 23(int16_t) GroupNonUniformShuffleXor 43 270 271
+             273:    235(ptr) AccessChain 34(data) 268 70 38
+                              Store 273 272
+             274:      6(int) Load 8(invocation)
+             275:    243(ptr) AccessChain 34(data) 47 70
+             276: 24(i16vec4) Load 275
+             277:242(i16vec2) VectorShuffle 276 276 0 1
+             278:      6(int) Load 8(invocation)
+             279:242(i16vec2) GroupNonUniformShuffleXor 43 277 278
+             280:    243(ptr) AccessChain 34(data) 274 70
+             281: 24(i16vec4) Load 280
+             282: 24(i16vec4) VectorShuffle 281 279 4 5 2 3
+                              Store 280 282
+             283:      6(int) Load 8(invocation)
+             284:    243(ptr) AccessChain 34(data) 59 70
+             285: 24(i16vec4) Load 284
+             286:253(i16vec3) VectorShuffle 285 285 0 1 2
+             287:      6(int) Load 8(invocation)
+             288:253(i16vec3) GroupNonUniformShuffleXor 43 286 287
+             289:    243(ptr) AccessChain 34(data) 283 70
+             290: 24(i16vec4) Load 289
+             291: 24(i16vec4) VectorShuffle 290 288 4 5 6 3
+                              Store 289 291
+             292:      6(int) Load 8(invocation)
+             293:    243(ptr) AccessChain 34(data) 70 70
+             294: 24(i16vec4) Load 293
+             295:      6(int) Load 8(invocation)
+             296: 24(i16vec4) GroupNonUniformShuffleXor 43 294 295
+             297:    243(ptr) AccessChain 34(data) 292 70
+                              Store 297 296
+             298:      6(int) Load 8(invocation)
+             301:    300(ptr) AccessChain 34(data) 37 299 38
+             302: 25(int64_t) Load 301
+             303:      6(int) Load 8(invocation)
+             304: 25(int64_t) GroupNonUniformShuffle 43 302 303
+             305:    300(ptr) AccessChain 34(data) 298 299 38
+                              Store 305 304
+             306:      6(int) Load 8(invocation)
+             309:    308(ptr) AccessChain 34(data) 47 299
+             310: 26(i64vec4) Load 309
+             311:307(i64vec2) VectorShuffle 310 310 0 1
+             312:      6(int) Load 8(invocation)
+             313:307(i64vec2) GroupNonUniformShuffle 43 311 312
+             314:    308(ptr) AccessChain 34(data) 306 299
+             315: 26(i64vec4) Load 314
+             316: 26(i64vec4) VectorShuffle 315 313 4 5 2 3
+                              Store 314 316
+             317:      6(int) Load 8(invocation)
+             319:    308(ptr) AccessChain 34(data) 59 299
+             320: 26(i64vec4) Load 319
+             321:318(i64vec3) VectorShuffle 320 320 0 1 2
+             322:      6(int) Load 8(invocation)
+             323:318(i64vec3) GroupNonUniformShuffle 43 321 322
+             324:    308(ptr) AccessChain 34(data) 317 299
+             325: 26(i64vec4) Load 324
+             326: 26(i64vec4) VectorShuffle 325 323 4 5 6 3
+                              Store 324 326
+             327:      6(int) Load 8(invocation)
+             328:    308(ptr) AccessChain 34(data) 70 299
+             329: 26(i64vec4) Load 328
+             330:      6(int) Load 8(invocation)
+             331: 26(i64vec4) GroupNonUniformShuffle 43 329 330
+             332:    308(ptr) AccessChain 34(data) 327 299
+                              Store 332 331
+             333:      6(int) Load 8(invocation)
+             334:    300(ptr) AccessChain 34(data) 37 299 38
+             335: 25(int64_t) Load 334
+             336:      6(int) Load 8(invocation)
+             337: 25(int64_t) GroupNonUniformShuffleXor 43 335 336
+             338:    300(ptr) AccessChain 34(data) 333 299 38
+                              Store 338 337
+             339:      6(int) Load 8(invocation)
+             340:    308(ptr) AccessChain 34(data) 47 299
+             341: 26(i64vec4) Load 340
+             342:307(i64vec2) VectorShuffle 341 341 0 1
+             343:      6(int) Load 8(invocation)
+             344:307(i64vec2) GroupNonUniformShuffleXor 43 342 343
+             345:    308(ptr) AccessChain 34(data) 339 299
+             346: 26(i64vec4) Load 345
+             347: 26(i64vec4) VectorShuffle 346 344 4 5 2 3
+                              Store 345 347
+             348:      6(int) Load 8(invocation)
+             349:    308(ptr) AccessChain 34(data) 59 299
+             350: 26(i64vec4) Load 349
+             351:318(i64vec3) VectorShuffle 350 350 0 1 2
+             352:      6(int) Load 8(invocation)
+             353:318(i64vec3) GroupNonUniformShuffleXor 43 351 352
+             354:    308(ptr) AccessChain 34(data) 348 299
+             355: 26(i64vec4) Load 354
+             356: 26(i64vec4) VectorShuffle 355 353 4 5 6 3
+                              Store 354 356
+             357:      6(int) Load 8(invocation)
+             358:    308(ptr) AccessChain 34(data) 70 299
+             359: 26(i64vec4) Load 358
+             360:      6(int) Load 8(invocation)
+             361: 26(i64vec4) GroupNonUniformShuffleXor 43 359 360
+             362:    308(ptr) AccessChain 34(data) 357 299
+                              Store 362 361
+             363:      6(int) Load 8(invocation)
+             366:    365(ptr) AccessChain 34(data) 37 364 38
+             367: 27(int64_t) Load 366
+             368:      6(int) Load 8(invocation)
+             369: 27(int64_t) GroupNonUniformShuffle 43 367 368
+             370:    365(ptr) AccessChain 34(data) 363 364 38
+                              Store 370 369
+             371:      6(int) Load 8(invocation)
+             374:    373(ptr) AccessChain 34(data) 47 364
+             375: 28(i64vec4) Load 374
+             376:372(i64vec2) VectorShuffle 375 375 0 1
+             377:      6(int) Load 8(invocation)
+             378:372(i64vec2) GroupNonUniformShuffle 43 376 377
+             379:    373(ptr) AccessChain 34(data) 371 364
+             380: 28(i64vec4) Load 379
+             381: 28(i64vec4) VectorShuffle 380 378 4 5 2 3
+                              Store 379 381
+             382:      6(int) Load 8(invocation)
+             384:    373(ptr) AccessChain 34(data) 59 364
+             385: 28(i64vec4) Load 384
+             386:383(i64vec3) VectorShuffle 385 385 0 1 2
+             387:      6(int) Load 8(invocation)
+             388:383(i64vec3) GroupNonUniformShuffle 43 386 387
+             389:    373(ptr) AccessChain 34(data) 382 364
+             390: 28(i64vec4) Load 389
+             391: 28(i64vec4) VectorShuffle 390 388 4 5 6 3
+                              Store 389 391
+             392:      6(int) Load 8(invocation)
+             393:    373(ptr) AccessChain 34(data) 70 364
+             394: 28(i64vec4) Load 393
+             395:      6(int) Load 8(invocation)
+             396: 28(i64vec4) GroupNonUniformShuffle 43 394 395
+             397:    373(ptr) AccessChain 34(data) 392 364
+                              Store 397 396
+             398:      6(int) Load 8(invocation)
+             399:    365(ptr) AccessChain 34(data) 37 364 38
+             400: 27(int64_t) Load 399
+             401:      6(int) Load 8(invocation)
+             402: 27(int64_t) GroupNonUniformShuffleXor 43 400 401
+             403:    365(ptr) AccessChain 34(data) 398 364 38
+                              Store 403 402
+             404:      6(int) Load 8(invocation)
+             405:    373(ptr) AccessChain 34(data) 47 364
+             406: 28(i64vec4) Load 405
+             407:372(i64vec2) VectorShuffle 406 406 0 1
+             408:      6(int) Load 8(invocation)
+             409:372(i64vec2) GroupNonUniformShuffleXor 43 407 408
+             410:    373(ptr) AccessChain 34(data) 404 364
+             411: 28(i64vec4) Load 410
+             412: 28(i64vec4) VectorShuffle 411 409 4 5 2 3
+                              Store 410 412
+             413:      6(int) Load 8(invocation)
+             414:    373(ptr) AccessChain 34(data) 59 364
+             415: 28(i64vec4) Load 414
+             416:383(i64vec3) VectorShuffle 415 415 0 1 2
+             417:      6(int) Load 8(invocation)
+             418:383(i64vec3) GroupNonUniformShuffleXor 43 416 417
+             419:    373(ptr) AccessChain 34(data) 413 364
+             420: 28(i64vec4) Load 419
+             421: 28(i64vec4) VectorShuffle 420 418 4 5 6 3
+                              Store 419 421
+             422:      6(int) Load 8(invocation)
+             423:    373(ptr) AccessChain 34(data) 70 364
+             424: 28(i64vec4) Load 423
+             425:      6(int) Load 8(invocation)
+             426: 28(i64vec4) GroupNonUniformShuffleXor 43 424 425
+             427:    373(ptr) AccessChain 34(data) 422 364
+                              Store 427 426
+             428:      6(int) Load 8(invocation)
+             431:    430(ptr) AccessChain 34(data) 37 429 38
+             432:29(float16_t) Load 431
+             433:      6(int) Load 8(invocation)
+             434:29(float16_t) GroupNonUniformShuffle 43 432 433
+             435:    430(ptr) AccessChain 34(data) 428 429 38
+                              Store 435 434
+             436:      6(int) Load 8(invocation)
+             439:    438(ptr) AccessChain 34(data) 47 429
+             440: 30(f16vec4) Load 439
+             441:437(f16vec2) VectorShuffle 440 440 0 1
+             442:      6(int) Load 8(invocation)
+             443:437(f16vec2) GroupNonUniformShuffle 43 441 442
+             444:    438(ptr) AccessChain 34(data) 436 429
+             445: 30(f16vec4) Load 444
+             446: 30(f16vec4) VectorShuffle 445 443 4 5 2 3
+                              Store 444 446
+             447:      6(int) Load 8(invocation)
+             449:    438(ptr) AccessChain 34(data) 59 429
+             450: 30(f16vec4) Load 449
+             451:448(f16vec3) VectorShuffle 450 450 0 1 2
+             452:      6(int) Load 8(invocation)
+             453:448(f16vec3) GroupNonUniformShuffle 43 451 452
+             454:    438(ptr) AccessChain 34(data) 447 429
+             455: 30(f16vec4) Load 454
+             456: 30(f16vec4) VectorShuffle 455 453 4 5 6 3
+                              Store 454 456
+             457:      6(int) Load 8(invocation)
+             458:    438(ptr) AccessChain 34(data) 70 429
+             459: 30(f16vec4) Load 458
+             460:      6(int) Load 8(invocation)
+             461: 30(f16vec4) GroupNonUniformShuffle 43 459 460
+             462:    438(ptr) AccessChain 34(data) 457 429
+                              Store 462 461
+             463:      6(int) Load 8(invocation)
+             464:    430(ptr) AccessChain 34(data) 37 429 38
+             465:29(float16_t) Load 464
+             466:      6(int) Load 8(invocation)
+             467:29(float16_t) GroupNonUniformShuffleXor 43 465 466
+             468:    430(ptr) AccessChain 34(data) 463 429 38
+                              Store 468 467
+             469:      6(int) Load 8(invocation)
+             470:    438(ptr) AccessChain 34(data) 47 429
+             471: 30(f16vec4) Load 470
+             472:437(f16vec2) VectorShuffle 471 471 0 1
+             473:      6(int) Load 8(invocation)
+             474:437(f16vec2) GroupNonUniformShuffleXor 43 472 473
+             475:    438(ptr) AccessChain 34(data) 469 429
+             476: 30(f16vec4) Load 475
+             477: 30(f16vec4) VectorShuffle 476 474 4 5 2 3
+                              Store 475 477
+             478:      6(int) Load 8(invocation)
+             479:    438(ptr) AccessChain 34(data) 59 429
+             480: 30(f16vec4) Load 479
+             481:448(f16vec3) VectorShuffle 480 480 0 1 2
+             482:      6(int) Load 8(invocation)
+             483:448(f16vec3) GroupNonUniformShuffleXor 43 481 482
+             484:    438(ptr) AccessChain 34(data) 478 429
+             485: 30(f16vec4) Load 484
+             486: 30(f16vec4) VectorShuffle 485 483 4 5 6 3
+                              Store 484 486
+             487:      6(int) Load 8(invocation)
+             488:    438(ptr) AccessChain 34(data) 70 429
+             489: 30(f16vec4) Load 488
+             490:      6(int) Load 8(invocation)
+             491: 30(f16vec4) GroupNonUniformShuffleXor 43 489 490
+             492:    438(ptr) AccessChain 34(data) 487 429
+                              Store 492 491
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffleNeg.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffleNeg.comp.out
new file mode 100644
index 0000000..df1234b
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesShuffleNeg.comp.out
@@ -0,0 +1,61 @@
+spv.subgroupExtendedTypesShuffleNeg.comp
+ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:43: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:46: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:47: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:48: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:51: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:52: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:53: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:56: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:57: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:58: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:61: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:62: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:63: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:66: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:67: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:68: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:71: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:72: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:73: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:76: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:77: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:78: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:81: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:82: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:83: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:86: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:87: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:88: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:89: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:91: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:92: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:93: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:94: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 56 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
new file mode 100644
index 0000000..ef5def5
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
@@ -0,0 +1,616 @@
+spv.subgroupExtendedTypesShuffleRelative.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 497
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformShuffleRelative
+                              Capability StorageUniformBufferBlock16
+                              Capability StorageBuffer8BitAccess
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_float16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int64"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int8"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle_relative"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 31  "Buffers"
+                              MemberName 31(Buffers) 0  "i8"
+                              MemberName 31(Buffers) 1  "u8"
+                              MemberName 31(Buffers) 2  "i16"
+                              MemberName 31(Buffers) 3  "u16"
+                              MemberName 31(Buffers) 4  "i64"
+                              MemberName 31(Buffers) 5  "u64"
+                              MemberName 31(Buffers) 6  "f16"
+                              Name 34  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 31(Buffers) 0 Offset 0
+                              MemberDecorate 31(Buffers) 1 Offset 4
+                              MemberDecorate 31(Buffers) 2 Offset 8
+                              MemberDecorate 31(Buffers) 3 Offset 16
+                              MemberDecorate 31(Buffers) 4 Offset 32
+                              MemberDecorate 31(Buffers) 5 Offset 64
+                              MemberDecorate 31(Buffers) 6 Offset 96
+                              Decorate 31(Buffers) Block
+                              Decorate 34(data) DescriptorSet 0
+                              Decorate 34(data) Binding 0
+                              Decorate 496 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeInt 8 1
+              18:             TypeVector 17(int8_t) 4
+              19:             TypeInt 8 0
+              20:             TypeVector 19(int8_t) 4
+              21:             TypeInt 16 1
+              22:             TypeVector 21(int16_t) 4
+              23:             TypeInt 16 0
+              24:             TypeVector 23(int16_t) 4
+              25:             TypeInt 64 1
+              26:             TypeVector 25(int64_t) 4
+              27:             TypeInt 64 0
+              28:             TypeVector 27(int64_t) 4
+              29:             TypeFloat 16
+              30:             TypeVector 29(float16_t) 4
+     31(Buffers):             TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+              32:             TypeArray 31(Buffers) 15
+              33:             TypePointer StorageBuffer 32
+        34(data):     33(ptr) Variable StorageBuffer
+              36:             TypeInt 32 1
+              37:     36(int) Constant 0
+              38:      6(int) Constant 0
+              39:             TypePointer StorageBuffer 17(int8_t)
+              43:      6(int) Constant 3
+              47:     36(int) Constant 1
+              48:             TypeVector 17(int8_t) 2
+              49:             TypePointer StorageBuffer 18(i8vec4)
+              59:     36(int) Constant 2
+              60:             TypeVector 17(int8_t) 3
+              70:     36(int) Constant 3
+             107:             TypePointer StorageBuffer 19(int8_t)
+             114:             TypeVector 19(int8_t) 2
+             115:             TypePointer StorageBuffer 20(i8vec4)
+             125:             TypeVector 19(int8_t) 3
+             171:             TypePointer StorageBuffer 21(int16_t)
+             178:             TypeVector 21(int16_t) 2
+             179:             TypePointer StorageBuffer 22(i16vec4)
+             189:             TypeVector 21(int16_t) 3
+             235:             TypePointer StorageBuffer 23(int16_t)
+             242:             TypeVector 23(int16_t) 2
+             243:             TypePointer StorageBuffer 24(i16vec4)
+             253:             TypeVector 23(int16_t) 3
+             299:     36(int) Constant 4
+             300:             TypePointer StorageBuffer 25(int64_t)
+             307:             TypeVector 25(int64_t) 2
+             308:             TypePointer StorageBuffer 26(i64vec4)
+             318:             TypeVector 25(int64_t) 3
+             364:     36(int) Constant 5
+             365:             TypePointer StorageBuffer 27(int64_t)
+             372:             TypeVector 27(int64_t) 2
+             373:             TypePointer StorageBuffer 28(i64vec4)
+             383:             TypeVector 27(int64_t) 3
+             429:     36(int) Constant 6
+             430:             TypePointer StorageBuffer 29(float16_t)
+             437:             TypeVector 29(float16_t) 2
+             438:             TypePointer StorageBuffer 30(f16vec4)
+             448:             TypeVector 29(float16_t) 3
+             493:             TypeVector 6(int) 3
+             494:      6(int) Constant 8
+             495:      6(int) Constant 1
+             496:  493(ivec3) ConstantComposite 494 495 495
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              35:      6(int) Load 8(invocation)
+              40:     39(ptr) AccessChain 34(data) 37 37 38
+              41:  17(int8_t) Load 40
+              42:      6(int) Load 8(invocation)
+              44:  17(int8_t) GroupNonUniformShuffleUp 43 41 42
+              45:     39(ptr) AccessChain 34(data) 35 37 38
+                              Store 45 44
+              46:      6(int) Load 8(invocation)
+              50:     49(ptr) AccessChain 34(data) 47 37
+              51:  18(i8vec4) Load 50
+              52:  48(i8vec2) VectorShuffle 51 51 0 1
+              53:      6(int) Load 8(invocation)
+              54:  48(i8vec2) GroupNonUniformShuffleUp 43 52 53
+              55:     49(ptr) AccessChain 34(data) 46 37
+              56:  18(i8vec4) Load 55
+              57:  18(i8vec4) VectorShuffle 56 54 4 5 2 3
+                              Store 55 57
+              58:      6(int) Load 8(invocation)
+              61:     49(ptr) AccessChain 34(data) 59 37
+              62:  18(i8vec4) Load 61
+              63:  60(i8vec3) VectorShuffle 62 62 0 1 2
+              64:      6(int) Load 8(invocation)
+              65:  60(i8vec3) GroupNonUniformShuffleUp 43 63 64
+              66:     49(ptr) AccessChain 34(data) 58 37
+              67:  18(i8vec4) Load 66
+              68:  18(i8vec4) VectorShuffle 67 65 4 5 6 3
+                              Store 66 68
+              69:      6(int) Load 8(invocation)
+              71:     49(ptr) AccessChain 34(data) 70 37
+              72:  18(i8vec4) Load 71
+              73:      6(int) Load 8(invocation)
+              74:  18(i8vec4) GroupNonUniformShuffleUp 43 72 73
+              75:     49(ptr) AccessChain 34(data) 69 37
+                              Store 75 74
+              76:      6(int) Load 8(invocation)
+              77:     39(ptr) AccessChain 34(data) 37 37 38
+              78:  17(int8_t) Load 77
+              79:      6(int) Load 8(invocation)
+              80:  17(int8_t) GroupNonUniformShuffleDown 43 78 79
+              81:     39(ptr) AccessChain 34(data) 76 37 38
+                              Store 81 80
+              82:      6(int) Load 8(invocation)
+              83:     49(ptr) AccessChain 34(data) 47 37
+              84:  18(i8vec4) Load 83
+              85:  48(i8vec2) VectorShuffle 84 84 0 1
+              86:      6(int) Load 8(invocation)
+              87:  48(i8vec2) GroupNonUniformShuffleDown 43 85 86
+              88:     49(ptr) AccessChain 34(data) 82 37
+              89:  18(i8vec4) Load 88
+              90:  18(i8vec4) VectorShuffle 89 87 4 5 2 3
+                              Store 88 90
+              91:      6(int) Load 8(invocation)
+              92:     49(ptr) AccessChain 34(data) 59 37
+              93:  18(i8vec4) Load 92
+              94:  60(i8vec3) VectorShuffle 93 93 0 1 2
+              95:      6(int) Load 8(invocation)
+              96:  60(i8vec3) GroupNonUniformShuffleDown 43 94 95
+              97:     49(ptr) AccessChain 34(data) 91 37
+              98:  18(i8vec4) Load 97
+              99:  18(i8vec4) VectorShuffle 98 96 4 5 6 3
+                              Store 97 99
+             100:      6(int) Load 8(invocation)
+             101:     49(ptr) AccessChain 34(data) 70 37
+             102:  18(i8vec4) Load 101
+             103:      6(int) Load 8(invocation)
+             104:  18(i8vec4) GroupNonUniformShuffleDown 43 102 103
+             105:     49(ptr) AccessChain 34(data) 100 37
+                              Store 105 104
+             106:      6(int) Load 8(invocation)
+             108:    107(ptr) AccessChain 34(data) 37 47 38
+             109:  19(int8_t) Load 108
+             110:      6(int) Load 8(invocation)
+             111:  19(int8_t) GroupNonUniformShuffleUp 43 109 110
+             112:    107(ptr) AccessChain 34(data) 106 47 38
+                              Store 112 111
+             113:      6(int) Load 8(invocation)
+             116:    115(ptr) AccessChain 34(data) 47 47
+             117:  20(i8vec4) Load 116
+             118: 114(i8vec2) VectorShuffle 117 117 0 1
+             119:      6(int) Load 8(invocation)
+             120: 114(i8vec2) GroupNonUniformShuffleUp 43 118 119
+             121:    115(ptr) AccessChain 34(data) 113 47
+             122:  20(i8vec4) Load 121
+             123:  20(i8vec4) VectorShuffle 122 120 4 5 2 3
+                              Store 121 123
+             124:      6(int) Load 8(invocation)
+             126:    115(ptr) AccessChain 34(data) 59 47
+             127:  20(i8vec4) Load 126
+             128: 125(i8vec3) VectorShuffle 127 127 0 1 2
+             129:      6(int) Load 8(invocation)
+             130: 125(i8vec3) GroupNonUniformShuffleUp 43 128 129
+             131:    115(ptr) AccessChain 34(data) 124 47
+             132:  20(i8vec4) Load 131
+             133:  20(i8vec4) VectorShuffle 132 130 4 5 6 3
+                              Store 131 133
+             134:      6(int) Load 8(invocation)
+             135:    115(ptr) AccessChain 34(data) 70 47
+             136:  20(i8vec4) Load 135
+             137:      6(int) Load 8(invocation)
+             138:  20(i8vec4) GroupNonUniformShuffleUp 43 136 137
+             139:    115(ptr) AccessChain 34(data) 134 47
+                              Store 139 138
+             140:      6(int) Load 8(invocation)
+             141:    107(ptr) AccessChain 34(data) 37 47 38
+             142:  19(int8_t) Load 141
+             143:      6(int) Load 8(invocation)
+             144:  19(int8_t) GroupNonUniformShuffleDown 43 142 143
+             145:    107(ptr) AccessChain 34(data) 140 47 38
+                              Store 145 144
+             146:      6(int) Load 8(invocation)
+             147:    115(ptr) AccessChain 34(data) 47 47
+             148:  20(i8vec4) Load 147
+             149: 114(i8vec2) VectorShuffle 148 148 0 1
+             150:      6(int) Load 8(invocation)
+             151: 114(i8vec2) GroupNonUniformShuffleDown 43 149 150
+             152:    115(ptr) AccessChain 34(data) 146 47
+             153:  20(i8vec4) Load 152
+             154:  20(i8vec4) VectorShuffle 153 151 4 5 2 3
+                              Store 152 154
+             155:      6(int) Load 8(invocation)
+             156:    115(ptr) AccessChain 34(data) 59 47
+             157:  20(i8vec4) Load 156
+             158: 125(i8vec3) VectorShuffle 157 157 0 1 2
+             159:      6(int) Load 8(invocation)
+             160: 125(i8vec3) GroupNonUniformShuffleDown 43 158 159
+             161:    115(ptr) AccessChain 34(data) 155 47
+             162:  20(i8vec4) Load 161
+             163:  20(i8vec4) VectorShuffle 162 160 4 5 6 3
+                              Store 161 163
+             164:      6(int) Load 8(invocation)
+             165:    115(ptr) AccessChain 34(data) 70 47
+             166:  20(i8vec4) Load 165
+             167:      6(int) Load 8(invocation)
+             168:  20(i8vec4) GroupNonUniformShuffleDown 43 166 167
+             169:    115(ptr) AccessChain 34(data) 164 47
+                              Store 169 168
+             170:      6(int) Load 8(invocation)
+             172:    171(ptr) AccessChain 34(data) 37 59 38
+             173: 21(int16_t) Load 172
+             174:      6(int) Load 8(invocation)
+             175: 21(int16_t) GroupNonUniformShuffleUp 43 173 174
+             176:    171(ptr) AccessChain 34(data) 170 59 38
+                              Store 176 175
+             177:      6(int) Load 8(invocation)
+             180:    179(ptr) AccessChain 34(data) 47 59
+             181: 22(i16vec4) Load 180
+             182:178(i16vec2) VectorShuffle 181 181 0 1
+             183:      6(int) Load 8(invocation)
+             184:178(i16vec2) GroupNonUniformShuffleUp 43 182 183
+             185:    179(ptr) AccessChain 34(data) 177 59
+             186: 22(i16vec4) Load 185
+             187: 22(i16vec4) VectorShuffle 186 184 4 5 2 3
+                              Store 185 187
+             188:      6(int) Load 8(invocation)
+             190:    179(ptr) AccessChain 34(data) 59 59
+             191: 22(i16vec4) Load 190
+             192:189(i16vec3) VectorShuffle 191 191 0 1 2
+             193:      6(int) Load 8(invocation)
+             194:189(i16vec3) GroupNonUniformShuffleUp 43 192 193
+             195:    179(ptr) AccessChain 34(data) 188 59
+             196: 22(i16vec4) Load 195
+             197: 22(i16vec4) VectorShuffle 196 194 4 5 6 3
+                              Store 195 197
+             198:      6(int) Load 8(invocation)
+             199:    179(ptr) AccessChain 34(data) 70 59
+             200: 22(i16vec4) Load 199
+             201:      6(int) Load 8(invocation)
+             202: 22(i16vec4) GroupNonUniformShuffleUp 43 200 201
+             203:    179(ptr) AccessChain 34(data) 198 59
+                              Store 203 202
+             204:      6(int) Load 8(invocation)
+             205:    171(ptr) AccessChain 34(data) 37 59 38
+             206: 21(int16_t) Load 205
+             207:      6(int) Load 8(invocation)
+             208: 21(int16_t) GroupNonUniformShuffleDown 43 206 207
+             209:    171(ptr) AccessChain 34(data) 204 59 38
+                              Store 209 208
+             210:      6(int) Load 8(invocation)
+             211:    179(ptr) AccessChain 34(data) 47 59
+             212: 22(i16vec4) Load 211
+             213:178(i16vec2) VectorShuffle 212 212 0 1
+             214:      6(int) Load 8(invocation)
+             215:178(i16vec2) GroupNonUniformShuffleDown 43 213 214
+             216:    179(ptr) AccessChain 34(data) 210 59
+             217: 22(i16vec4) Load 216
+             218: 22(i16vec4) VectorShuffle 217 215 4 5 2 3
+                              Store 216 218
+             219:      6(int) Load 8(invocation)
+             220:    179(ptr) AccessChain 34(data) 59 59
+             221: 22(i16vec4) Load 220
+             222:189(i16vec3) VectorShuffle 221 221 0 1 2
+             223:      6(int) Load 8(invocation)
+             224:189(i16vec3) GroupNonUniformShuffleDown 43 222 223
+             225:    179(ptr) AccessChain 34(data) 219 59
+             226: 22(i16vec4) Load 225
+             227: 22(i16vec4) VectorShuffle 226 224 4 5 6 3
+                              Store 225 227
+             228:      6(int) Load 8(invocation)
+             229:    179(ptr) AccessChain 34(data) 70 59
+             230: 22(i16vec4) Load 229
+             231:      6(int) Load 8(invocation)
+             232: 22(i16vec4) GroupNonUniformShuffleDown 43 230 231
+             233:    179(ptr) AccessChain 34(data) 228 59
+                              Store 233 232
+             234:      6(int) Load 8(invocation)
+             236:    235(ptr) AccessChain 34(data) 37 70 38
+             237: 23(int16_t) Load 236
+             238:      6(int) Load 8(invocation)
+             239: 23(int16_t) GroupNonUniformShuffleUp 43 237 238
+             240:    235(ptr) AccessChain 34(data) 234 70 38
+                              Store 240 239
+             241:      6(int) Load 8(invocation)
+             244:    243(ptr) AccessChain 34(data) 47 70
+             245: 24(i16vec4) Load 244
+             246:242(i16vec2) VectorShuffle 245 245 0 1
+             247:      6(int) Load 8(invocation)
+             248:242(i16vec2) GroupNonUniformShuffleUp 43 246 247
+             249:    243(ptr) AccessChain 34(data) 241 70
+             250: 24(i16vec4) Load 249
+             251: 24(i16vec4) VectorShuffle 250 248 4 5 2 3
+                              Store 249 251
+             252:      6(int) Load 8(invocation)
+             254:    243(ptr) AccessChain 34(data) 59 70
+             255: 24(i16vec4) Load 254
+             256:253(i16vec3) VectorShuffle 255 255 0 1 2
+             257:      6(int) Load 8(invocation)
+             258:253(i16vec3) GroupNonUniformShuffleUp 43 256 257
+             259:    243(ptr) AccessChain 34(data) 252 70
+             260: 24(i16vec4) Load 259
+             261: 24(i16vec4) VectorShuffle 260 258 4 5 6 3
+                              Store 259 261
+             262:      6(int) Load 8(invocation)
+             263:    243(ptr) AccessChain 34(data) 70 70
+             264: 24(i16vec4) Load 263
+             265:      6(int) Load 8(invocation)
+             266: 24(i16vec4) GroupNonUniformShuffleUp 43 264 265
+             267:    243(ptr) AccessChain 34(data) 262 70
+                              Store 267 266
+             268:      6(int) Load 8(invocation)
+             269:    235(ptr) AccessChain 34(data) 37 70 38
+             270: 23(int16_t) Load 269
+             271:      6(int) Load 8(invocation)
+             272: 23(int16_t) GroupNonUniformShuffleDown 43 270 271
+             273:    235(ptr) AccessChain 34(data) 268 70 38
+                              Store 273 272
+             274:      6(int) Load 8(invocation)
+             275:    243(ptr) AccessChain 34(data) 47 70
+             276: 24(i16vec4) Load 275
+             277:242(i16vec2) VectorShuffle 276 276 0 1
+             278:      6(int) Load 8(invocation)
+             279:242(i16vec2) GroupNonUniformShuffleDown 43 277 278
+             280:    243(ptr) AccessChain 34(data) 274 70
+             281: 24(i16vec4) Load 280
+             282: 24(i16vec4) VectorShuffle 281 279 4 5 2 3
+                              Store 280 282
+             283:      6(int) Load 8(invocation)
+             284:    243(ptr) AccessChain 34(data) 59 70
+             285: 24(i16vec4) Load 284
+             286:253(i16vec3) VectorShuffle 285 285 0 1 2
+             287:      6(int) Load 8(invocation)
+             288:253(i16vec3) GroupNonUniformShuffleDown 43 286 287
+             289:    243(ptr) AccessChain 34(data) 283 70
+             290: 24(i16vec4) Load 289
+             291: 24(i16vec4) VectorShuffle 290 288 4 5 6 3
+                              Store 289 291
+             292:      6(int) Load 8(invocation)
+             293:    243(ptr) AccessChain 34(data) 70 70
+             294: 24(i16vec4) Load 293
+             295:      6(int) Load 8(invocation)
+             296: 24(i16vec4) GroupNonUniformShuffleDown 43 294 295
+             297:    243(ptr) AccessChain 34(data) 292 70
+                              Store 297 296
+             298:      6(int) Load 8(invocation)
+             301:    300(ptr) AccessChain 34(data) 37 299 38
+             302: 25(int64_t) Load 301
+             303:      6(int) Load 8(invocation)
+             304: 25(int64_t) GroupNonUniformShuffleUp 43 302 303
+             305:    300(ptr) AccessChain 34(data) 298 299 38
+                              Store 305 304
+             306:      6(int) Load 8(invocation)
+             309:    308(ptr) AccessChain 34(data) 47 299
+             310: 26(i64vec4) Load 309
+             311:307(i64vec2) VectorShuffle 310 310 0 1
+             312:      6(int) Load 8(invocation)
+             313:307(i64vec2) GroupNonUniformShuffleUp 43 311 312
+             314:    308(ptr) AccessChain 34(data) 306 299
+             315: 26(i64vec4) Load 314
+             316: 26(i64vec4) VectorShuffle 315 313 4 5 2 3
+                              Store 314 316
+             317:      6(int) Load 8(invocation)
+             319:    308(ptr) AccessChain 34(data) 59 299
+             320: 26(i64vec4) Load 319
+             321:318(i64vec3) VectorShuffle 320 320 0 1 2
+             322:      6(int) Load 8(invocation)
+             323:318(i64vec3) GroupNonUniformShuffleUp 43 321 322
+             324:    308(ptr) AccessChain 34(data) 317 299
+             325: 26(i64vec4) Load 324
+             326: 26(i64vec4) VectorShuffle 325 323 4 5 6 3
+                              Store 324 326
+             327:      6(int) Load 8(invocation)
+             328:    308(ptr) AccessChain 34(data) 70 299
+             329: 26(i64vec4) Load 328
+             330:      6(int) Load 8(invocation)
+             331: 26(i64vec4) GroupNonUniformShuffleUp 43 329 330
+             332:    308(ptr) AccessChain 34(data) 327 299
+                              Store 332 331
+             333:      6(int) Load 8(invocation)
+             334:    300(ptr) AccessChain 34(data) 37 299 38
+             335: 25(int64_t) Load 334
+             336:      6(int) Load 8(invocation)
+             337: 25(int64_t) GroupNonUniformShuffleDown 43 335 336
+             338:    300(ptr) AccessChain 34(data) 333 299 38
+                              Store 338 337
+             339:      6(int) Load 8(invocation)
+             340:    308(ptr) AccessChain 34(data) 47 299
+             341: 26(i64vec4) Load 340
+             342:307(i64vec2) VectorShuffle 341 341 0 1
+             343:      6(int) Load 8(invocation)
+             344:307(i64vec2) GroupNonUniformShuffleDown 43 342 343
+             345:    308(ptr) AccessChain 34(data) 339 299
+             346: 26(i64vec4) Load 345
+             347: 26(i64vec4) VectorShuffle 346 344 4 5 2 3
+                              Store 345 347
+             348:      6(int) Load 8(invocation)
+             349:    308(ptr) AccessChain 34(data) 59 299
+             350: 26(i64vec4) Load 349
+             351:318(i64vec3) VectorShuffle 350 350 0 1 2
+             352:      6(int) Load 8(invocation)
+             353:318(i64vec3) GroupNonUniformShuffleDown 43 351 352
+             354:    308(ptr) AccessChain 34(data) 348 299
+             355: 26(i64vec4) Load 354
+             356: 26(i64vec4) VectorShuffle 355 353 4 5 6 3
+                              Store 354 356
+             357:      6(int) Load 8(invocation)
+             358:    308(ptr) AccessChain 34(data) 70 299
+             359: 26(i64vec4) Load 358
+             360:      6(int) Load 8(invocation)
+             361: 26(i64vec4) GroupNonUniformShuffleDown 43 359 360
+             362:    308(ptr) AccessChain 34(data) 357 299
+                              Store 362 361
+             363:      6(int) Load 8(invocation)
+             366:    365(ptr) AccessChain 34(data) 37 364 38
+             367: 27(int64_t) Load 366
+             368:      6(int) Load 8(invocation)
+             369: 27(int64_t) GroupNonUniformShuffleUp 43 367 368
+             370:    365(ptr) AccessChain 34(data) 363 364 38
+                              Store 370 369
+             371:      6(int) Load 8(invocation)
+             374:    373(ptr) AccessChain 34(data) 47 364
+             375: 28(i64vec4) Load 374
+             376:372(i64vec2) VectorShuffle 375 375 0 1
+             377:      6(int) Load 8(invocation)
+             378:372(i64vec2) GroupNonUniformShuffleUp 43 376 377
+             379:    373(ptr) AccessChain 34(data) 371 364
+             380: 28(i64vec4) Load 379
+             381: 28(i64vec4) VectorShuffle 380 378 4 5 2 3
+                              Store 379 381
+             382:      6(int) Load 8(invocation)
+             384:    373(ptr) AccessChain 34(data) 59 364
+             385: 28(i64vec4) Load 384
+             386:383(i64vec3) VectorShuffle 385 385 0 1 2
+             387:      6(int) Load 8(invocation)
+             388:383(i64vec3) GroupNonUniformShuffleUp 43 386 387
+             389:    373(ptr) AccessChain 34(data) 382 364
+             390: 28(i64vec4) Load 389
+             391: 28(i64vec4) VectorShuffle 390 388 4 5 6 3
+                              Store 389 391
+             392:      6(int) Load 8(invocation)
+             393:    373(ptr) AccessChain 34(data) 70 364
+             394: 28(i64vec4) Load 393
+             395:      6(int) Load 8(invocation)
+             396: 28(i64vec4) GroupNonUniformShuffleUp 43 394 395
+             397:    373(ptr) AccessChain 34(data) 392 364
+                              Store 397 396
+             398:      6(int) Load 8(invocation)
+             399:    365(ptr) AccessChain 34(data) 37 364 38
+             400: 27(int64_t) Load 399
+             401:      6(int) Load 8(invocation)
+             402: 27(int64_t) GroupNonUniformShuffleDown 43 400 401
+             403:    365(ptr) AccessChain 34(data) 398 364 38
+                              Store 403 402
+             404:      6(int) Load 8(invocation)
+             405:    373(ptr) AccessChain 34(data) 47 364
+             406: 28(i64vec4) Load 405
+             407:372(i64vec2) VectorShuffle 406 406 0 1
+             408:      6(int) Load 8(invocation)
+             409:372(i64vec2) GroupNonUniformShuffleDown 43 407 408
+             410:    373(ptr) AccessChain 34(data) 404 364
+             411: 28(i64vec4) Load 410
+             412: 28(i64vec4) VectorShuffle 411 409 4 5 2 3
+                              Store 410 412
+             413:      6(int) Load 8(invocation)
+             414:    373(ptr) AccessChain 34(data) 59 364
+             415: 28(i64vec4) Load 414
+             416:383(i64vec3) VectorShuffle 415 415 0 1 2
+             417:      6(int) Load 8(invocation)
+             418:383(i64vec3) GroupNonUniformShuffleDown 43 416 417
+             419:    373(ptr) AccessChain 34(data) 413 364
+             420: 28(i64vec4) Load 419
+             421: 28(i64vec4) VectorShuffle 420 418 4 5 6 3
+                              Store 419 421
+             422:      6(int) Load 8(invocation)
+             423:    373(ptr) AccessChain 34(data) 70 364
+             424: 28(i64vec4) Load 423
+             425:      6(int) Load 8(invocation)
+             426: 28(i64vec4) GroupNonUniformShuffleDown 43 424 425
+             427:    373(ptr) AccessChain 34(data) 422 364
+                              Store 427 426
+             428:      6(int) Load 8(invocation)
+             431:    430(ptr) AccessChain 34(data) 37 429 38
+             432:29(float16_t) Load 431
+             433:      6(int) Load 8(invocation)
+             434:29(float16_t) GroupNonUniformShuffleUp 43 432 433
+             435:    430(ptr) AccessChain 34(data) 428 429 38
+                              Store 435 434
+             436:      6(int) Load 8(invocation)
+             439:    438(ptr) AccessChain 34(data) 47 429
+             440: 30(f16vec4) Load 439
+             441:437(f16vec2) VectorShuffle 440 440 0 1
+             442:      6(int) Load 8(invocation)
+             443:437(f16vec2) GroupNonUniformShuffleUp 43 441 442
+             444:    438(ptr) AccessChain 34(data) 436 429
+             445: 30(f16vec4) Load 444
+             446: 30(f16vec4) VectorShuffle 445 443 4 5 2 3
+                              Store 444 446
+             447:      6(int) Load 8(invocation)
+             449:    438(ptr) AccessChain 34(data) 59 429
+             450: 30(f16vec4) Load 449
+             451:448(f16vec3) VectorShuffle 450 450 0 1 2
+             452:      6(int) Load 8(invocation)
+             453:448(f16vec3) GroupNonUniformShuffleUp 43 451 452
+             454:    438(ptr) AccessChain 34(data) 447 429
+             455: 30(f16vec4) Load 454
+             456: 30(f16vec4) VectorShuffle 455 453 4 5 6 3
+                              Store 454 456
+             457:      6(int) Load 8(invocation)
+             458:    438(ptr) AccessChain 34(data) 70 429
+             459: 30(f16vec4) Load 458
+             460:      6(int) Load 8(invocation)
+             461: 30(f16vec4) GroupNonUniformShuffleUp 43 459 460
+             462:    438(ptr) AccessChain 34(data) 457 429
+                              Store 462 461
+             463:      6(int) Load 8(invocation)
+             464:    430(ptr) AccessChain 34(data) 37 429 38
+             465:29(float16_t) Load 464
+             466:      6(int) Load 8(invocation)
+             467:29(float16_t) GroupNonUniformShuffleDown 43 465 466
+             468:    430(ptr) AccessChain 34(data) 463 429 38
+                              Store 468 467
+             469:      6(int) Load 8(invocation)
+             470:    438(ptr) AccessChain 34(data) 47 429
+             471: 30(f16vec4) Load 470
+             472:437(f16vec2) VectorShuffle 471 471 0 1
+             473:      6(int) Load 8(invocation)
+             474:437(f16vec2) GroupNonUniformShuffleDown 43 472 473
+             475:    438(ptr) AccessChain 34(data) 469 429
+             476: 30(f16vec4) Load 475
+             477: 30(f16vec4) VectorShuffle 476 474 4 5 2 3
+                              Store 475 477
+             478:      6(int) Load 8(invocation)
+             479:    438(ptr) AccessChain 34(data) 59 429
+             480: 30(f16vec4) Load 479
+             481:448(f16vec3) VectorShuffle 480 480 0 1 2
+             482:      6(int) Load 8(invocation)
+             483:448(f16vec3) GroupNonUniformShuffleDown 43 481 482
+             484:    438(ptr) AccessChain 34(data) 478 429
+             485: 30(f16vec4) Load 484
+             486: 30(f16vec4) VectorShuffle 485 483 4 5 6 3
+                              Store 484 486
+             487:      6(int) Load 8(invocation)
+             488:    438(ptr) AccessChain 34(data) 70 429
+             489: 30(f16vec4) Load 488
+             490:      6(int) Load 8(invocation)
+             491: 30(f16vec4) GroupNonUniformShuffleDown 43 489 490
+             492:    438(ptr) AccessChain 34(data) 487 429
+                              Store 492 491
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffleRelativeNeg.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelativeNeg.comp.out
new file mode 100644
index 0000000..a043715
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelativeNeg.comp.out
@@ -0,0 +1,61 @@
+spv.subgroupExtendedTypesShuffleRelativeNeg.comp
+ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:43: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:46: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:47: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:48: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:51: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:52: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:53: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:56: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:57: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:58: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:61: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:62: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:63: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:66: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:67: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:68: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:71: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:72: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:73: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:76: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:77: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:78: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:81: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:82: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:83: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:86: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:87: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:88: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:89: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:91: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:92: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:93: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:94: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 56 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out b/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
new file mode 100644
index 0000000..a32c25d
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
@@ -0,0 +1,377 @@
+spv.subgroupExtendedTypesVote.comp
+// Module Version 10300
+// Generated by (magic number): 80007
+// Id's are bound by 277
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformVote
+                              Capability StorageUniformBufferBlock16
+                              Capability StorageBuffer8BitAccess
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 10 12
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_float16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int64"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int8"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_vote"
+                              Name 4  "main"
+                              Name 8  "invocation"
+                              Name 10  "gl_SubgroupInvocationID"
+                              Name 12  "gl_SubgroupSize"
+                              Name 32  "Buffers"
+                              MemberName 32(Buffers) 0  "i8"
+                              MemberName 32(Buffers) 1  "u8"
+                              MemberName 32(Buffers) 2  "i16"
+                              MemberName 32(Buffers) 3  "u16"
+                              MemberName 32(Buffers) 4  "i64"
+                              MemberName 32(Buffers) 5  "u64"
+                              MemberName 32(Buffers) 6  "f16"
+                              MemberName 32(Buffers) 7  "r"
+                              Name 35  "data"
+                              Decorate 10(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 10(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 11 RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 12(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 13 RelaxedPrecision
+                              Decorate 14 RelaxedPrecision
+                              Decorate 16 RelaxedPrecision
+                              MemberDecorate 32(Buffers) 0 Offset 0
+                              MemberDecorate 32(Buffers) 1 Offset 4
+                              MemberDecorate 32(Buffers) 2 Offset 8
+                              MemberDecorate 32(Buffers) 3 Offset 16
+                              MemberDecorate 32(Buffers) 4 Offset 32
+                              MemberDecorate 32(Buffers) 5 Offset 64
+                              MemberDecorate 32(Buffers) 6 Offset 96
+                              MemberDecorate 32(Buffers) 7 Offset 104
+                              Decorate 32(Buffers) Block
+                              Decorate 35(data) DescriptorSet 0
+                              Decorate 35(data) Binding 0
+                              Decorate 276 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_SubgroupInvocationID):      9(ptr) Variable Input
+12(gl_SubgroupSize):      9(ptr) Variable Input
+              15:      6(int) Constant 4
+              17:             TypeInt 8 1
+              18:             TypeVector 17(int8_t) 4
+              19:             TypeInt 8 0
+              20:             TypeVector 19(int8_t) 4
+              21:             TypeInt 16 1
+              22:             TypeVector 21(int16_t) 4
+              23:             TypeInt 16 0
+              24:             TypeVector 23(int16_t) 4
+              25:             TypeInt 64 1
+              26:             TypeVector 25(int64_t) 4
+              27:             TypeInt 64 0
+              28:             TypeVector 27(int64_t) 4
+              29:             TypeFloat 16
+              30:             TypeVector 29(float16_t) 4
+              31:             TypeInt 32 1
+     32(Buffers):             TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4) 31(int)
+              33:             TypeArray 32(Buffers) 15
+              34:             TypePointer StorageBuffer 33
+        35(data):     34(ptr) Variable StorageBuffer
+              37:     31(int) Constant 7
+              38:             TypePointer StorageBuffer 31(int)
+              41:     31(int) Constant 0
+              42:             TypeBool
+              44:      6(int) Constant 3
+              49:      6(int) Constant 0
+              50:             TypePointer StorageBuffer 17(int8_t)
+              54:     31(int) Constant 1
+              58:             TypeVector 17(int8_t) 2
+              59:             TypePointer StorageBuffer 18(i8vec4)
+              67:     31(int) Constant 2
+              68:             TypeVector 17(int8_t) 3
+              76:     31(int) Constant 3
+              83:             TypePointer StorageBuffer 19(int8_t)
+              90:             TypeVector 19(int8_t) 2
+              91:             TypePointer StorageBuffer 20(i8vec4)
+              99:             TypeVector 19(int8_t) 3
+             113:             TypePointer StorageBuffer 21(int16_t)
+             120:             TypeVector 21(int16_t) 2
+             121:             TypePointer StorageBuffer 22(i16vec4)
+             129:             TypeVector 21(int16_t) 3
+             143:             TypePointer StorageBuffer 23(int16_t)
+             150:             TypeVector 23(int16_t) 2
+             151:             TypePointer StorageBuffer 24(i16vec4)
+             159:             TypeVector 23(int16_t) 3
+             181:     31(int) Constant 4
+             182:             TypePointer StorageBuffer 25(int64_t)
+             189:             TypeVector 25(int64_t) 2
+             190:             TypePointer StorageBuffer 26(i64vec4)
+             198:             TypeVector 25(int64_t) 3
+             212:     31(int) Constant 5
+             213:             TypePointer StorageBuffer 27(int64_t)
+             220:             TypeVector 27(int64_t) 2
+             221:             TypePointer StorageBuffer 28(i64vec4)
+             229:             TypeVector 27(int64_t) 3
+             243:     31(int) Constant 6
+             244:             TypePointer StorageBuffer 29(float16_t)
+             251:             TypeVector 29(float16_t) 2
+             252:             TypePointer StorageBuffer 30(f16vec4)
+             260:             TypeVector 29(float16_t) 3
+             273:             TypeVector 6(int) 3
+             274:      6(int) Constant 8
+             275:      6(int) Constant 1
+             276:  273(ivec3) ConstantComposite 274 275 275
+         4(main):           2 Function None 3
+               5:             Label
+   8(invocation):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_SubgroupInvocationID)
+              13:      6(int) Load 12(gl_SubgroupSize)
+              14:      6(int) IAdd 11 13
+              16:      6(int) UMod 14 15
+                              Store 8(invocation) 16
+              36:      6(int) Load 8(invocation)
+              39:     38(ptr) AccessChain 35(data) 36 37
+              40:     31(int) Load 39
+              43:    42(bool) SLessThan 40 41
+              45:    42(bool) GroupNonUniformAll 44 43
+                              SelectionMerge 47 None
+                              BranchConditional 45 46 172
+              46:               Label
+              48:      6(int)   Load 8(invocation)
+              51:     50(ptr)   AccessChain 35(data) 41 41 49
+              52:  17(int8_t)   Load 51
+              53:    42(bool)   GroupNonUniformAllEqual 44 52
+              55:     31(int)   Select 53 54 41
+              56:     38(ptr)   AccessChain 35(data) 48 37
+                                Store 56 55
+              57:      6(int)   Load 8(invocation)
+              60:     59(ptr)   AccessChain 35(data) 54 41
+              61:  18(i8vec4)   Load 60
+              62:  58(i8vec2)   VectorShuffle 61 61 0 1
+              63:    42(bool)   GroupNonUniformAllEqual 44 62
+              64:     31(int)   Select 63 54 41
+              65:     38(ptr)   AccessChain 35(data) 57 37
+                                Store 65 64
+              66:      6(int)   Load 8(invocation)
+              69:     59(ptr)   AccessChain 35(data) 67 41
+              70:  18(i8vec4)   Load 69
+              71:  68(i8vec3)   VectorShuffle 70 70 0 1 2
+              72:    42(bool)   GroupNonUniformAllEqual 44 71
+              73:     31(int)   Select 72 54 41
+              74:     38(ptr)   AccessChain 35(data) 66 37
+                                Store 74 73
+              75:      6(int)   Load 8(invocation)
+              77:     59(ptr)   AccessChain 35(data) 76 41
+              78:  18(i8vec4)   Load 77
+              79:    42(bool)   GroupNonUniformAllEqual 44 78
+              80:     31(int)   Select 79 54 41
+              81:     38(ptr)   AccessChain 35(data) 75 37
+                                Store 81 80
+              82:      6(int)   Load 8(invocation)
+              84:     83(ptr)   AccessChain 35(data) 41 54 49
+              85:  19(int8_t)   Load 84
+              86:    42(bool)   GroupNonUniformAllEqual 44 85
+              87:     31(int)   Select 86 54 41
+              88:     38(ptr)   AccessChain 35(data) 82 37
+                                Store 88 87
+              89:      6(int)   Load 8(invocation)
+              92:     91(ptr)   AccessChain 35(data) 54 54
+              93:  20(i8vec4)   Load 92
+              94:  90(i8vec2)   VectorShuffle 93 93 0 1
+              95:    42(bool)   GroupNonUniformAllEqual 44 94
+              96:     31(int)   Select 95 54 41
+              97:     38(ptr)   AccessChain 35(data) 89 37
+                                Store 97 96
+              98:      6(int)   Load 8(invocation)
+             100:     91(ptr)   AccessChain 35(data) 67 54
+             101:  20(i8vec4)   Load 100
+             102:  99(i8vec3)   VectorShuffle 101 101 0 1 2
+             103:    42(bool)   GroupNonUniformAllEqual 44 102
+             104:     31(int)   Select 103 54 41
+             105:     38(ptr)   AccessChain 35(data) 98 37
+                                Store 105 104
+             106:      6(int)   Load 8(invocation)
+             107:     91(ptr)   AccessChain 35(data) 76 54
+             108:  20(i8vec4)   Load 107
+             109:    42(bool)   GroupNonUniformAllEqual 44 108
+             110:     31(int)   Select 109 54 41
+             111:     38(ptr)   AccessChain 35(data) 106 37
+                                Store 111 110
+             112:      6(int)   Load 8(invocation)
+             114:    113(ptr)   AccessChain 35(data) 41 67 49
+             115: 21(int16_t)   Load 114
+             116:    42(bool)   GroupNonUniformAllEqual 44 115
+             117:     31(int)   Select 116 54 41
+             118:     38(ptr)   AccessChain 35(data) 112 37
+                                Store 118 117
+             119:      6(int)   Load 8(invocation)
+             122:    121(ptr)   AccessChain 35(data) 54 67
+             123: 22(i16vec4)   Load 122
+             124:120(i16vec2)   VectorShuffle 123 123 0 1
+             125:    42(bool)   GroupNonUniformAllEqual 44 124
+             126:     31(int)   Select 125 54 41
+             127:     38(ptr)   AccessChain 35(data) 119 37
+                                Store 127 126
+             128:      6(int)   Load 8(invocation)
+             130:    121(ptr)   AccessChain 35(data) 67 67
+             131: 22(i16vec4)   Load 130
+             132:129(i16vec3)   VectorShuffle 131 131 0 1 2
+             133:    42(bool)   GroupNonUniformAllEqual 44 132
+             134:     31(int)   Select 133 54 41
+             135:     38(ptr)   AccessChain 35(data) 128 37
+                                Store 135 134
+             136:      6(int)   Load 8(invocation)
+             137:    121(ptr)   AccessChain 35(data) 76 67
+             138: 22(i16vec4)   Load 137
+             139:    42(bool)   GroupNonUniformAllEqual 44 138
+             140:     31(int)   Select 139 54 41
+             141:     38(ptr)   AccessChain 35(data) 136 37
+                                Store 141 140
+             142:      6(int)   Load 8(invocation)
+             144:    143(ptr)   AccessChain 35(data) 41 76 49
+             145: 23(int16_t)   Load 144
+             146:    42(bool)   GroupNonUniformAllEqual 44 145
+             147:     31(int)   Select 146 54 41
+             148:     38(ptr)   AccessChain 35(data) 142 37
+                                Store 148 147
+             149:      6(int)   Load 8(invocation)
+             152:    151(ptr)   AccessChain 35(data) 54 76
+             153: 24(i16vec4)   Load 152
+             154:150(i16vec2)   VectorShuffle 153 153 0 1
+             155:    42(bool)   GroupNonUniformAllEqual 44 154
+             156:     31(int)   Select 155 54 41
+             157:     38(ptr)   AccessChain 35(data) 149 37
+                                Store 157 156
+             158:      6(int)   Load 8(invocation)
+             160:    151(ptr)   AccessChain 35(data) 67 76
+             161: 24(i16vec4)   Load 160
+             162:159(i16vec3)   VectorShuffle 161 161 0 1 2
+             163:    42(bool)   GroupNonUniformAllEqual 44 162
+             164:     31(int)   Select 163 54 41
+             165:     38(ptr)   AccessChain 35(data) 158 37
+                                Store 165 164
+             166:      6(int)   Load 8(invocation)
+             167:    151(ptr)   AccessChain 35(data) 76 76
+             168: 24(i16vec4)   Load 167
+             169:    42(bool)   GroupNonUniformAllEqual 44 168
+             170:     31(int)   Select 169 54 41
+             171:     38(ptr)   AccessChain 35(data) 166 37
+                                Store 171 170
+                                Branch 47
+             172:               Label
+             173:      6(int)   Load 8(invocation)
+             174:     38(ptr)   AccessChain 35(data) 173 37
+             175:     31(int)   Load 174
+             176:    42(bool)   SLessThan 175 41
+             177:    42(bool)   GroupNonUniformAny 44 176
+                                SelectionMerge 179 None
+                                BranchConditional 177 178 179
+             178:                 Label
+             180:      6(int)     Load 8(invocation)
+             183:    182(ptr)     AccessChain 35(data) 41 181 49
+             184: 25(int64_t)     Load 183
+             185:    42(bool)     GroupNonUniformAllEqual 44 184
+             186:     31(int)     Select 185 54 41
+             187:     38(ptr)     AccessChain 35(data) 180 37
+                                  Store 187 186
+             188:      6(int)     Load 8(invocation)
+             191:    190(ptr)     AccessChain 35(data) 54 181
+             192: 26(i64vec4)     Load 191
+             193:189(i64vec2)     VectorShuffle 192 192 0 1
+             194:    42(bool)     GroupNonUniformAllEqual 44 193
+             195:     31(int)     Select 194 54 41
+             196:     38(ptr)     AccessChain 35(data) 188 37
+                                  Store 196 195
+             197:      6(int)     Load 8(invocation)
+             199:    190(ptr)     AccessChain 35(data) 67 181
+             200: 26(i64vec4)     Load 199
+             201:198(i64vec3)     VectorShuffle 200 200 0 1 2
+             202:    42(bool)     GroupNonUniformAllEqual 44 201
+             203:     31(int)     Select 202 54 41
+             204:     38(ptr)     AccessChain 35(data) 197 37
+                                  Store 204 203
+             205:      6(int)     Load 8(invocation)
+             206:    190(ptr)     AccessChain 35(data) 76 181
+             207: 26(i64vec4)     Load 206
+             208:    42(bool)     GroupNonUniformAllEqual 44 207
+             209:     31(int)     Select 208 54 41
+             210:     38(ptr)     AccessChain 35(data) 205 37
+                                  Store 210 209
+             211:      6(int)     Load 8(invocation)
+             214:    213(ptr)     AccessChain 35(data) 41 212 49
+             215: 27(int64_t)     Load 214
+             216:    42(bool)     GroupNonUniformAllEqual 44 215
+             217:     31(int)     Select 216 54 41
+             218:     38(ptr)     AccessChain 35(data) 211 37
+                                  Store 218 217
+             219:      6(int)     Load 8(invocation)
+             222:    221(ptr)     AccessChain 35(data) 54 212
+             223: 28(i64vec4)     Load 222
+             224:220(i64vec2)     VectorShuffle 223 223 0 1
+             225:    42(bool)     GroupNonUniformAllEqual 44 224
+             226:     31(int)     Select 225 54 41
+             227:     38(ptr)     AccessChain 35(data) 219 37
+                                  Store 227 226
+             228:      6(int)     Load 8(invocation)
+             230:    221(ptr)     AccessChain 35(data) 67 212
+             231: 28(i64vec4)     Load 230
+             232:229(i64vec3)     VectorShuffle 231 231 0 1 2
+             233:    42(bool)     GroupNonUniformAllEqual 44 232
+             234:     31(int)     Select 233 54 41
+             235:     38(ptr)     AccessChain 35(data) 228 37
+                                  Store 235 234
+             236:      6(int)     Load 8(invocation)
+             237:    221(ptr)     AccessChain 35(data) 76 212
+             238: 28(i64vec4)     Load 237
+             239:    42(bool)     GroupNonUniformAllEqual 44 238
+             240:     31(int)     Select 239 54 41
+             241:     38(ptr)     AccessChain 35(data) 236 37
+                                  Store 241 240
+             242:      6(int)     Load 8(invocation)
+             245:    244(ptr)     AccessChain 35(data) 41 243 49
+             246:29(float16_t)     Load 245
+             247:    42(bool)     GroupNonUniformAllEqual 44 246
+             248:     31(int)     Select 247 54 41
+             249:     38(ptr)     AccessChain 35(data) 242 37
+                                  Store 249 248
+             250:      6(int)     Load 8(invocation)
+             253:    252(ptr)     AccessChain 35(data) 54 243
+             254: 30(f16vec4)     Load 253
+             255:251(f16vec2)     VectorShuffle 254 254 0 1
+             256:    42(bool)     GroupNonUniformAllEqual 44 255
+             257:     31(int)     Select 256 54 41
+             258:     38(ptr)     AccessChain 35(data) 250 37
+                                  Store 258 257
+             259:      6(int)     Load 8(invocation)
+             261:    252(ptr)     AccessChain 35(data) 67 243
+             262: 30(f16vec4)     Load 261
+             263:260(f16vec3)     VectorShuffle 262 262 0 1 2
+             264:    42(bool)     GroupNonUniformAllEqual 44 263
+             265:     31(int)     Select 264 54 41
+             266:     38(ptr)     AccessChain 35(data) 259 37
+                                  Store 266 265
+             267:      6(int)     Load 8(invocation)
+             268:    252(ptr)     AccessChain 35(data) 76 243
+             269: 30(f16vec4)     Load 268
+             270:    42(bool)     GroupNonUniformAllEqual 44 269
+             271:     31(int)     Select 270 54 41
+             272:     38(ptr)     AccessChain 35(data) 267 37
+                                  Store 272 271
+                                  Branch 179
+             179:               Label
+                                Branch 47
+              47:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupExtendedTypesVoteNeg.comp.out b/Test/baseResults/spv.subgroupExtendedTypesVoteNeg.comp.out
new file mode 100644
index 0000000..2197d41
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesVoteNeg.comp.out
@@ -0,0 +1,33 @@
+spv.subgroupExtendedTypesVoteNeg.comp
+ERROR: 0:29: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:30: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:31: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:35: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:40: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:41: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:42: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:44: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:45: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:46: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:47: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:51: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:52: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:53: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:56: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:57: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:58: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:61: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:62: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:63: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 28 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.volatileAtomic.comp.out b/Test/baseResults/spv.volatileAtomic.comp.out
new file mode 100644
index 0000000..aa2d211
--- /dev/null
+++ b/Test/baseResults/spv.volatileAtomic.comp.out
@@ -0,0 +1,40 @@
+spv.volatileAtomic.comp
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 18
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 8  "D"
+                              MemberName 8(D) 0  "d"
+                              Name 10  "d"
+                              Decorate 7 ArrayStride 4
+                              MemberDecorate 8(D) 0 Volatile
+                              MemberDecorate 8(D) 0 Coherent
+                              MemberDecorate 8(D) 0 Offset 0
+                              Decorate 8(D) BufferBlock
+                              Decorate 10(d) DescriptorSet 0
+                              Decorate 10(d) Binding 3
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeRuntimeArray 6(int)
+            8(D):             TypeStruct 7
+               9:             TypePointer Uniform 8(D)
+           10(d):      9(ptr) Variable Uniform
+              11:             TypeInt 32 1
+              12:     11(int) Constant 0
+              13:             TypePointer Uniform 6(int)
+              15:      6(int) Constant 0
+              16:      6(int) Constant 1
+         4(main):           2 Function None 3
+               5:             Label
+              14:     13(ptr) AccessChain 10(d) 12 12
+              17:      6(int) AtomicExchange 14 16 15 15
+                              Return
+                              FunctionEnd
diff --git a/Test/glsl.450.subgroup.frag b/Test/glsl.450.subgroup.frag
index 61cfc8f..d0b9573 100644
--- a/Test/glsl.450.subgroup.frag
+++ b/Test/glsl.450.subgroup.frag
@@ -114,12 +114,14 @@
 

 #extension GL_KHR_shader_subgroup_ballot: enable

 void ballot_works(vec4 f4) {

+  int i;

   gl_SubgroupEqMask;

   gl_SubgroupGeMask;

   gl_SubgroupGtMask;

   gl_SubgroupLeMask;

   gl_SubgroupLtMask;

   subgroupBroadcast(f4, 0);

+  subgroupBroadcast(f4, i);

   subgroupBroadcastFirst(f4);

   uvec4 ballot = subgroupBallot(false);

   subgroupInverseBallot(uvec4(0x1));

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

 void quad_works(vec4 f4)

 {

+  int i;

   subgroupQuadBroadcast(f4, 0);

+  subgroupQuadBroadcast(f4, i);

   subgroupQuadSwapHorizontal(f4);

   subgroupQuadSwapVertical(f4);

   subgroupQuadSwapDiagonal(f4);

diff --git a/Test/hlsl.format.rwtexture.frag b/Test/hlsl.format.rwtexture.frag
new file mode 100644
index 0000000..87ee7de
--- /dev/null
+++ b/Test/hlsl.format.rwtexture.frag
@@ -0,0 +1,63 @@
+SamplerState       g_sSamp : register(s0);
+
+[[spv::format_rgba32f]]    RWTexture1D <float4> g_tTex1df4 : register(t0);
+[[spv::format_rg32f]]      RWTexture1D <int4>   g_tTex1di4;
+[[spv::format_rgba8snorm]] RWTexture1D <uint4>  g_tTex1du4;
+
+[[spv::format_rgba8i]]       RWTexture2D <float4> g_tTex2df4;
+[[spv::format_r11fg11fb10f]] RWTexture2D <int4>   g_tTex2di4;
+[[spv::format_r8snorm]]      RWTexture2D <uint4>  g_tTex2du4;
+
+[[spv::format_rg8]] [[spv::nonwritable]]     RWTexture3D <float4> g_tTex3df4;
+[[spv::format_rgba16i]] [[spv::nonreadable]] RWTexture3D <int4>   g_tTex3di4;
+[[spv::format_r8i]] [[spv::nonwritable]] [[spv::nonreadable]] RWTexture3D <uint4>  g_tTex3du4;
+
+[[spv::format_rgba8ui]] RWTexture1DArray <float4> g_tTex1df4a;
+[[spv::format_rg32ui]]  RWTexture1DArray <int4>   g_tTex1di4a;
+[[spv::format_r16ui]]   RWTexture1DArray <uint4>  g_tTex1du4a;
+
+[[spv::format_rgb10a2ui]] RWTexture2DArray <float4> g_tTex2df4a;
+[[spv::format_r8ui]]      RWTexture2DArray <int4>   g_tTex2di4a;
+[[spv::format_rgba16f]]   RWTexture2DArray <uint4>  g_tTex2du4a;
+
+[[spv::format_rgba8         ]] RWTexture2DArray<int4> g_tTex01;
+[[spv::format_rg16f         ]] RWTexture2DArray<int4> g_tTex02;
+[[spv::format_r16f          ]] RWTexture2DArray<int4> g_tTex03;
+[[spv::format_rgb10a2       ]] RWTexture2DArray<int4> g_tTex04;
+[[spv::format_rg16          ]] RWTexture2DArray<int4> g_tTex05;
+[[spv::format_r32f          ]] RWTexture2DArray<int4> g_tTex06;
+[[spv::format_rgba16        ]] RWTexture2DArray<int4> g_tTex07;
+[[spv::format_r16           ]] RWTexture2DArray<int4> g_tTex08;
+[[spv::format_r8            ]] RWTexture2DArray<int4> g_tTex09;
+[[spv::format_rgba16snorm   ]] RWTexture2DArray<int4> g_tTex10;
+[[spv::format_rg16snorm     ]] RWTexture2DArray<int4> g_tTex11;
+[[spv::format_r16snorm      ]] RWTexture2DArray<int4> g_tTex12;
+[[spv::format_r8snorm       ]] RWTexture2DArray<int4> g_tTex13;
+[[spv::format_rgba32i       ]] RWTexture2DArray<int4> g_tTex14;
+[[spv::format_r32i          ]] RWTexture2DArray<int4> g_tTex15;
+[[spv::format_r32ui         ]] RWTexture2DArray<int4> g_tTex16;
+[[spv::format_rg16i         ]] RWTexture2DArray<int4> g_tTex17;
+[[spv::format_r16i          ]] RWTexture2DArray<int4> g_tTex18;
+[[spv::format_rg32i         ]] RWTexture2DArray<int4> g_tTex19;
+[[spv::format_rg8i          ]] RWTexture2DArray<int4> g_tTex20;
+[[spv::format_rg8ui         ]] RWTexture2DArray<int4> g_tTex21;
+[[spv::format_rgba32ui      ]] RWTexture2DArray<int4> g_tTex22;
+[[spv::format_rgba16ui      ]] RWTexture2DArray<int4> g_tTex23;
+[[spv::format_rg32ui        ]] RWTexture2DArray<int4> g_tTex24;
+[[spv::format_rg16ui        ]] RWTexture2DArray<int4> g_tTex25;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/nonuniform.frag b/Test/nonuniform.frag
index 3f3dd67..e98aacc 100644
--- a/Test/nonuniform.frag
+++ b/Test/nonuniform.frag
@@ -22,12 +22,12 @@
     nonuniformEXT const int nu_ci = 2; // ERROR, const

 

     foo(nu_li, nu_li);

-

+    int table[5];

     int a;

     nu_li = nonuniformEXT(a) + nonuniformEXT(a * 2);

     nu_li = nonuniformEXT(a, a);       // ERROR, too many arguments

     nu_li = nonuniformEXT();           // ERROR, no arguments

+    nu_li = table[nonuniformEXT(3)];

 }

-

 layout(location=1) in struct S { float a; nonuniformEXT float b; } ins;  // ERROR, not on member

 layout(location=3) in inbName { float a; nonuniformEXT float b; } inb;   // ERROR, not on member

diff --git a/Test/runtests b/Test/runtests
index 8e31c06..23406dc 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -1,11 +1,16 @@
 #!/usr/bin/env bash
 
-TARGETDIR=localResults
+# Arguments:
+#  1- TargetDirectory, where to write test results and intermediary files
+#  2- Path to glslangValidator
+#  3- Path to spirv-remap
+
+TARGETDIR=${1:-localResults}
 BASEDIR=baseResults
-EXE=../build/install/bin/glslangValidator
-REMAPEXE=../build/install/bin/spirv-remap
+EXE=${2:-../build/install/bin/glslangValidator}
+REMAPEXE=${3:-../build/install/bin/spirv-remap}
 HASERROR=0
-mkdir -p localResults
+mkdir -p $TARGETDIR
 
 if [ -a localtestlist ]
   then
@@ -55,13 +60,13 @@
 # multi-threaded test
 #
 echo Comparing single thread to multithread for all tests in current directory...
-$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp > singleThread.out
-$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp -t > multiThread.out
-diff singleThread.out multiThread.out || HASERROR=1
+$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp > $TARGETDIR/singleThread.out
+$EXE -i -C *.vert *.geom *.frag *.tesc *.tese *.comp -t > $TARGETDIR/multiThread.out
+diff $TARGETDIR/singleThread.out $TARGETDIR/multiThread.out || HASERROR=1
 if [ $HASERROR -eq 0 ]
 then
-    rm singleThread.out
-    rm multiThread.out
+    rm $TARGETDIR/singleThread.out
+    rm $TARGETDIR/multiThread.out
 fi
 
 #
diff --git a/Test/spv.bufferhandleUvec2.frag b/Test/spv.bufferhandleUvec2.frag
new file mode 100644
index 0000000..bc86822
--- /dev/null
+++ b/Test/spv.bufferhandleUvec2.frag
@@ -0,0 +1,32 @@
+#version 450

+

+#extension GL_EXT_buffer_reference_uvec2 : enable

+

+layout(buffer_reference, std430) buffer blockType {

+    layout(offset = 0)  int a;

+    layout(offset = 4)  int b;

+    layout(offset = 8)  int c;

+    layout(offset = 12) int d;

+    layout(offset = 16) int e;

+};

+

+layout(std430) buffer t2 {

+    blockType f;

+    blockType g;

+} t;

+

+flat in uvec2 h, i;

+

+void main() {

+

+    blockType b1[2] = blockType[2](blockType(h), blockType(i));

+    b1[0].a = b1[1].b;

+    blockType b2 = blockType(h);

+    blockType b3 = blockType(i);

+    b2.a = b3.b;

+    uvec2 j = uvec2(b2);

+    uint carry;

+    j.x = uaddCarry(j.x, 256, carry);

+    j.y += carry;

+    b2 = blockType(j);

+}

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

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+#extension GL_EXT_shader_subgroup_extended_types_int8: enable

+#extension GL_EXT_shader_subgroup_extended_types_int16: enable

+#extension GL_EXT_shader_subgroup_extended_types_int64: enable

+#extension GL_EXT_shader_subgroup_extended_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].i8.x   = subgroupAdd(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupAdd(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupAdd(data[2].i8.xyz);

+    data[invocation].i8     = subgroupAdd(data[3].i8);

+

+    data[invocation].i8.x   = subgroupMul(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupMul(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupMul(data[2].i8.xyz);

+    data[invocation].i8     = subgroupMul(data[3].i8);

+

+    data[invocation].i8.x   = subgroupMin(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupMin(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupMin(data[2].i8.xyz);

+    data[invocation].i8     = subgroupMin(data[3].i8);

+

+    data[invocation].i8.x   = subgroupMax(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupMax(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupMax(data[2].i8.xyz);

+    data[invocation].i8     = subgroupMax(data[3].i8);

+

+    data[invocation].i8.x   = subgroupAnd(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupAnd(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupAnd(data[2].i8.xyz);

+    data[invocation].i8     = subgroupAnd(data[3].i8);

+

+    data[invocation].i8.x   = subgroupOr(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupOr(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupOr(data[2].i8.xyz);

+    data[invocation].i8     = subgroupOr(data[3].i8);

+

+    data[invocation].i8.x   = subgroupXor(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupXor(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupXor(data[2].i8.xyz);

+    data[invocation].i8     = subgroupXor(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveAdd(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveAdd(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveAdd(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveAdd(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveMul(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveMul(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveMul(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveMul(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveMin(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveMin(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveMin(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveMin(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveMax(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveMax(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveMax(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveMax(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveAnd(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveAnd(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveAnd(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveAnd(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveOr(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveOr(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveOr(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveOr(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveXor(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveXor(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveXor(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveXor(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveAdd(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveAdd(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveAdd(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveAdd(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveMul(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveMul(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveMul(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveMul(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveMin(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveMin(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveMin(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveMin(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveMax(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveMax(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveMax(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveMax(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveAnd(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveAnd(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveAnd(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveAnd(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveOr(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveOr(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveOr(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveOr(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveXor(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveXor(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveXor(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveXor(data[3].i8);

+

+    data[invocation].u8.x   = subgroupAdd(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupAdd(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupAdd(data[2].u8.xyz);

+    data[invocation].u8     = subgroupAdd(data[3].u8);

+

+    data[invocation].u8.x   = subgroupMul(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupMul(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupMul(data[2].u8.xyz);

+    data[invocation].u8     = subgroupMul(data[3].u8);

+

+    data[invocation].u8.x   = subgroupMin(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupMin(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupMin(data[2].u8.xyz);

+    data[invocation].u8     = subgroupMin(data[3].u8);

+

+    data[invocation].u8.x   = subgroupMax(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupMax(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupMax(data[2].u8.xyz);

+    data[invocation].u8     = subgroupMax(data[3].u8);

+

+    data[invocation].u8.x   = subgroupAnd(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupAnd(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupAnd(data[2].u8.xyz);

+    data[invocation].u8     = subgroupAnd(data[3].u8);

+

+    data[invocation].u8.x   = subgroupOr(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupOr(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupOr(data[2].u8.xyz);

+    data[invocation].u8     = subgroupOr(data[3].u8);

+

+    data[invocation].u8.x   = subgroupXor(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupXor(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupXor(data[2].u8.xyz);

+    data[invocation].u8     = subgroupXor(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveAdd(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveAdd(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveAdd(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveAdd(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveMul(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveMul(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveMul(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveMul(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveMin(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveMin(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveMin(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveMin(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveMax(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveMax(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveMax(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveMax(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveAnd(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveAnd(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveAnd(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveAnd(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveOr(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveOr(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveOr(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveOr(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveXor(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveXor(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveXor(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveXor(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveAdd(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveAdd(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveAdd(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveAdd(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveMul(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveMul(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveMul(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveMul(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveMin(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveMin(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveMin(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveMin(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveMax(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveMax(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveMax(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveMax(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveAnd(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveAnd(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveAnd(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveAnd(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveOr(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveOr(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveOr(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveOr(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveXor(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveXor(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveXor(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveXor(data[3].u8);

+

+    data[invocation].i16.x   = subgroupAdd(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupAdd(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupAdd(data[2].i16.xyz);

+    data[invocation].i16     = subgroupAdd(data[3].i16);

+

+    data[invocation].i16.x   = subgroupMul(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupMul(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupMul(data[2].i16.xyz);

+    data[invocation].i16     = subgroupMul(data[3].i16);

+

+    data[invocation].i16.x   = subgroupMin(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupMin(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupMin(data[2].i16.xyz);

+    data[invocation].i16     = subgroupMin(data[3].i16);

+

+    data[invocation].i16.x   = subgroupMax(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupMax(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupMax(data[2].i16.xyz);

+    data[invocation].i16     = subgroupMax(data[3].i16);

+

+    data[invocation].i16.x   = subgroupAnd(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupAnd(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupAnd(data[2].i16.xyz);

+    data[invocation].i16     = subgroupAnd(data[3].i16);

+

+    data[invocation].i16.x   = subgroupOr(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupOr(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupOr(data[2].i16.xyz);

+    data[invocation].i16     = subgroupOr(data[3].i16);

+

+    data[invocation].i16.x   = subgroupXor(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupXor(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupXor(data[2].i16.xyz);

+    data[invocation].i16     = subgroupXor(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveAdd(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveAdd(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveAdd(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveAdd(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveMul(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveMul(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveMul(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveMul(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveMin(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveMin(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveMin(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveMin(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveMax(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveMax(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveMax(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveMax(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveAnd(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveAnd(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveAnd(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveAnd(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveOr(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveOr(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveOr(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveOr(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveXor(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveXor(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveXor(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveXor(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveAdd(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveAdd(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveAdd(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveAdd(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveMul(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveMul(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveMul(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveMul(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveMin(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveMin(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveMin(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveMin(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveMax(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveMax(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveMax(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveMax(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveAnd(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveAnd(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveAnd(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveAnd(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveOr(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveOr(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveOr(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveOr(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveXor(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveXor(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveXor(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveXor(data[3].i16);

+

+    data[invocation].u16.x   = subgroupAdd(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupAdd(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupAdd(data[2].u16.xyz);

+    data[invocation].u16     = subgroupAdd(data[3].u16);

+

+    data[invocation].u16.x   = subgroupMul(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupMul(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupMul(data[2].u16.xyz);

+    data[invocation].u16     = subgroupMul(data[3].u16);

+

+    data[invocation].u16.x   = subgroupMin(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupMin(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupMin(data[2].u16.xyz);

+    data[invocation].u16     = subgroupMin(data[3].u16);

+

+    data[invocation].u16.x   = subgroupMax(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupMax(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupMax(data[2].u16.xyz);

+    data[invocation].u16     = subgroupMax(data[3].u16);

+

+    data[invocation].u16.x   = subgroupAnd(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupAnd(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupAnd(data[2].u16.xyz);

+    data[invocation].u16     = subgroupAnd(data[3].u16);

+

+    data[invocation].u16.x   = subgroupOr(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupOr(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupOr(data[2].u16.xyz);

+    data[invocation].u16     = subgroupOr(data[3].u16);

+

+    data[invocation].u16.x   = subgroupXor(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupXor(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupXor(data[2].u16.xyz);

+    data[invocation].u16     = subgroupXor(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveAdd(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveAdd(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveAdd(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveAdd(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveMul(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveMul(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveMul(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveMul(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveMin(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveMin(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveMin(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveMin(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveMax(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveMax(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveMax(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveMax(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveAnd(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveAnd(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveAnd(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveAnd(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveOr(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveOr(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveOr(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveOr(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveXor(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveXor(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveXor(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveXor(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveAdd(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveAdd(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveAdd(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveAdd(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveMul(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveMul(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveMul(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveMul(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveMin(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveMin(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveMin(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveMin(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveMax(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveMax(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveMax(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveMax(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveAnd(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveAnd(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveAnd(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveAnd(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveOr(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveOr(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveOr(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveOr(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveXor(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveXor(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveXor(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveXor(data[3].u16);

+

+    data[invocation].i64.x   = subgroupAdd(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupAdd(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupAdd(data[2].i64.xyz);

+    data[invocation].i64     = subgroupAdd(data[3].i64);

+

+    data[invocation].i64.x   = subgroupMul(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupMul(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupMul(data[2].i64.xyz);

+    data[invocation].i64     = subgroupMul(data[3].i64);

+

+    data[invocation].i64.x   = subgroupMin(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupMin(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupMin(data[2].i64.xyz);

+    data[invocation].i64     = subgroupMin(data[3].i64);

+

+    data[invocation].i64.x   = subgroupMax(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupMax(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupMax(data[2].i64.xyz);

+    data[invocation].i64     = subgroupMax(data[3].i64);

+

+    data[invocation].i64.x   = subgroupAnd(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupAnd(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupAnd(data[2].i64.xyz);

+    data[invocation].i64     = subgroupAnd(data[3].i64);

+

+    data[invocation].i64.x   = subgroupOr(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupOr(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupOr(data[2].i64.xyz);

+    data[invocation].i64     = subgroupOr(data[3].i64);

+

+    data[invocation].i64.x   = subgroupXor(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupXor(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupXor(data[2].i64.xyz);

+    data[invocation].i64     = subgroupXor(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveAdd(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveAdd(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveAdd(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveAdd(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveMul(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveMul(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveMul(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveMul(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveMin(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveMin(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveMin(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveMin(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveMax(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveMax(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveMax(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveMax(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveAnd(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveAnd(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveAnd(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveAnd(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveOr(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveOr(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveOr(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveOr(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveXor(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveXor(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveXor(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveXor(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveAdd(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveAdd(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveAdd(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveAdd(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveMul(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveMul(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveMul(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveMul(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveMin(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveMin(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveMin(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveMin(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveMax(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveMax(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveMax(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveMax(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveAnd(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveAnd(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveAnd(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveAnd(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveOr(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveOr(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveOr(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveOr(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveXor(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveXor(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveXor(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveXor(data[3].i64);

+

+    data[invocation].u64.x   = subgroupAdd(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupAdd(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupAdd(data[2].u64.xyz);

+    data[invocation].u64     = subgroupAdd(data[3].u64);

+

+    data[invocation].u64.x   = subgroupMul(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupMul(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupMul(data[2].u64.xyz);

+    data[invocation].u64     = subgroupMul(data[3].u64);

+

+    data[invocation].u64.x   = subgroupMin(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupMin(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupMin(data[2].u64.xyz);

+    data[invocation].u64     = subgroupMin(data[3].u64);

+

+    data[invocation].u64.x   = subgroupMax(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupMax(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupMax(data[2].u64.xyz);

+    data[invocation].u64     = subgroupMax(data[3].u64);

+

+    data[invocation].u64.x   = subgroupAnd(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupAnd(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupAnd(data[2].u64.xyz);

+    data[invocation].u64     = subgroupAnd(data[3].u64);

+

+    data[invocation].u64.x   = subgroupOr(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupOr(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupOr(data[2].u64.xyz);

+    data[invocation].u64     = subgroupOr(data[3].u64);

+

+    data[invocation].u64.x   = subgroupXor(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupXor(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupXor(data[2].u64.xyz);

+    data[invocation].u64     = subgroupXor(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveAdd(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveAdd(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveAdd(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveAdd(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveMul(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveMul(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveMul(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveMul(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveMin(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveMin(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveMin(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveMin(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveMax(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveMax(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveMax(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveMax(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveAnd(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveAnd(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveAnd(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveAnd(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveOr(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveOr(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveOr(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveOr(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveXor(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveXor(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveXor(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveXor(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveAdd(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveAdd(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveAdd(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveAdd(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveMul(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveMul(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveMul(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveMul(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveMin(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveMin(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveMin(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveMin(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveMax(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveMax(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveMax(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveMax(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveAnd(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveAnd(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveAnd(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveAnd(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveOr(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveOr(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveOr(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveOr(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveXor(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveXor(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveXor(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveXor(data[3].u64);

+

+    data[invocation].f16.x   = subgroupAdd(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupAdd(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupAdd(data[2].f16.xyz);

+    data[invocation].f16     = subgroupAdd(data[3].f16);

+

+    data[invocation].f16.x   = subgroupMul(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupMul(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupMul(data[2].f16.xyz);

+    data[invocation].f16     = subgroupMul(data[3].f16);

+

+    data[invocation].f16.x   = subgroupMin(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupMin(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupMin(data[2].f16.xyz);

+    data[invocation].f16     = subgroupMin(data[3].f16);

+

+    data[invocation].f16.x   = subgroupMax(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupMax(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupMax(data[2].f16.xyz);

+    data[invocation].f16     = subgroupMax(data[3].f16);

+

+    data[invocation].f16.x   = subgroupInclusiveAdd(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupInclusiveAdd(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupInclusiveAdd(data[2].f16.xyz);

+    data[invocation].f16     = subgroupInclusiveAdd(data[3].f16);

+

+    data[invocation].f16.x   = subgroupInclusiveMul(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupInclusiveMul(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupInclusiveMul(data[2].f16.xyz);

+    data[invocation].f16     = subgroupInclusiveMul(data[3].f16);

+

+    data[invocation].f16.x   = subgroupInclusiveMin(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupInclusiveMin(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupInclusiveMin(data[2].f16.xyz);

+    data[invocation].f16     = subgroupInclusiveMin(data[3].f16);

+

+    data[invocation].f16.x   = subgroupInclusiveMax(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupInclusiveMax(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupInclusiveMax(data[2].f16.xyz);

+    data[invocation].f16     = subgroupInclusiveMax(data[3].f16);

+

+    data[invocation].f16.x   = subgroupExclusiveAdd(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupExclusiveAdd(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupExclusiveAdd(data[2].f16.xyz);

+    data[invocation].f16     = subgroupExclusiveAdd(data[3].f16);

+

+    data[invocation].f16.x   = subgroupExclusiveMul(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupExclusiveMul(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupExclusiveMul(data[2].f16.xyz);

+    data[invocation].f16     = subgroupExclusiveMul(data[3].f16);

+

+    data[invocation].f16.x   = subgroupExclusiveMin(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupExclusiveMin(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupExclusiveMin(data[2].f16.xyz);

+    data[invocation].f16     = subgroupExclusiveMin(data[3].f16);

+

+    data[invocation].f16.x   = subgroupExclusiveMax(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupExclusiveMax(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupExclusiveMax(data[2].f16.xyz);

+    data[invocation].f16     = subgroupExclusiveMax(data[3].f16);

+}

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

+

+#extension GL_KHR_shader_subgroup_arithmetic: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].i8.x   = subgroupAdd(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupAdd(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupAdd(data[2].i8.xyz);

+    data[invocation].i8     = subgroupAdd(data[3].i8);

+

+    data[invocation].i8.x   = subgroupMul(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupMul(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupMul(data[2].i8.xyz);

+    data[invocation].i8     = subgroupMul(data[3].i8);

+

+    data[invocation].i8.x   = subgroupMin(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupMin(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupMin(data[2].i8.xyz);

+    data[invocation].i8     = subgroupMin(data[3].i8);

+

+    data[invocation].i8.x   = subgroupMax(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupMax(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupMax(data[2].i8.xyz);

+    data[invocation].i8     = subgroupMax(data[3].i8);

+

+    data[invocation].i8.x   = subgroupAnd(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupAnd(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupAnd(data[2].i8.xyz);

+    data[invocation].i8     = subgroupAnd(data[3].i8);

+

+    data[invocation].i8.x   = subgroupOr(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupOr(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupOr(data[2].i8.xyz);

+    data[invocation].i8     = subgroupOr(data[3].i8);

+

+    data[invocation].i8.x   = subgroupXor(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupXor(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupXor(data[2].i8.xyz);

+    data[invocation].i8     = subgroupXor(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveAdd(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveAdd(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveAdd(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveAdd(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveMul(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveMul(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveMul(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveMul(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveMin(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveMin(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveMin(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveMin(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveMax(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveMax(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveMax(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveMax(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveAnd(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveAnd(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveAnd(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveAnd(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveOr(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveOr(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveOr(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveOr(data[3].i8);

+

+    data[invocation].i8.x   = subgroupInclusiveXor(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupInclusiveXor(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupInclusiveXor(data[2].i8.xyz);

+    data[invocation].i8     = subgroupInclusiveXor(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveAdd(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveAdd(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveAdd(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveAdd(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveMul(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveMul(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveMul(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveMul(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveMin(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveMin(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveMin(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveMin(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveMax(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveMax(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveMax(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveMax(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveAnd(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveAnd(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveAnd(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveAnd(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveOr(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveOr(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveOr(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveOr(data[3].i8);

+

+    data[invocation].i8.x   = subgroupExclusiveXor(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupExclusiveXor(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupExclusiveXor(data[2].i8.xyz);

+    data[invocation].i8     = subgroupExclusiveXor(data[3].i8);

+

+    data[invocation].u8.x   = subgroupAdd(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupAdd(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupAdd(data[2].u8.xyz);

+    data[invocation].u8     = subgroupAdd(data[3].u8);

+

+    data[invocation].u8.x   = subgroupMul(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupMul(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupMul(data[2].u8.xyz);

+    data[invocation].u8     = subgroupMul(data[3].u8);

+

+    data[invocation].u8.x   = subgroupMin(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupMin(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupMin(data[2].u8.xyz);

+    data[invocation].u8     = subgroupMin(data[3].u8);

+

+    data[invocation].u8.x   = subgroupMax(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupMax(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupMax(data[2].u8.xyz);

+    data[invocation].u8     = subgroupMax(data[3].u8);

+

+    data[invocation].u8.x   = subgroupAnd(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupAnd(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupAnd(data[2].u8.xyz);

+    data[invocation].u8     = subgroupAnd(data[3].u8);

+

+    data[invocation].u8.x   = subgroupOr(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupOr(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupOr(data[2].u8.xyz);

+    data[invocation].u8     = subgroupOr(data[3].u8);

+

+    data[invocation].u8.x   = subgroupXor(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupXor(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupXor(data[2].u8.xyz);

+    data[invocation].u8     = subgroupXor(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveAdd(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveAdd(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveAdd(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveAdd(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveMul(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveMul(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveMul(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveMul(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveMin(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveMin(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveMin(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveMin(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveMax(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveMax(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveMax(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveMax(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveAnd(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveAnd(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveAnd(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveAnd(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveOr(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveOr(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveOr(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveOr(data[3].u8);

+

+    data[invocation].u8.x   = subgroupInclusiveXor(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupInclusiveXor(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupInclusiveXor(data[2].u8.xyz);

+    data[invocation].u8     = subgroupInclusiveXor(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveAdd(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveAdd(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveAdd(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveAdd(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveMul(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveMul(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveMul(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveMul(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveMin(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveMin(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveMin(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveMin(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveMax(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveMax(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveMax(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveMax(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveAnd(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveAnd(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveAnd(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveAnd(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveOr(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveOr(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveOr(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveOr(data[3].u8);

+

+    data[invocation].u8.x   = subgroupExclusiveXor(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupExclusiveXor(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupExclusiveXor(data[2].u8.xyz);

+    data[invocation].u8     = subgroupExclusiveXor(data[3].u8);

+

+    data[invocation].i16.x   = subgroupAdd(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupAdd(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupAdd(data[2].i16.xyz);

+    data[invocation].i16     = subgroupAdd(data[3].i16);

+

+    data[invocation].i16.x   = subgroupMul(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupMul(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupMul(data[2].i16.xyz);

+    data[invocation].i16     = subgroupMul(data[3].i16);

+

+    data[invocation].i16.x   = subgroupMin(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupMin(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupMin(data[2].i16.xyz);

+    data[invocation].i16     = subgroupMin(data[3].i16);

+

+    data[invocation].i16.x   = subgroupMax(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupMax(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupMax(data[2].i16.xyz);

+    data[invocation].i16     = subgroupMax(data[3].i16);

+

+    data[invocation].i16.x   = subgroupAnd(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupAnd(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupAnd(data[2].i16.xyz);

+    data[invocation].i16     = subgroupAnd(data[3].i16);

+

+    data[invocation].i16.x   = subgroupOr(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupOr(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupOr(data[2].i16.xyz);

+    data[invocation].i16     = subgroupOr(data[3].i16);

+

+    data[invocation].i16.x   = subgroupXor(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupXor(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupXor(data[2].i16.xyz);

+    data[invocation].i16     = subgroupXor(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveAdd(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveAdd(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveAdd(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveAdd(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveMul(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveMul(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveMul(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveMul(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveMin(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveMin(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveMin(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveMin(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveMax(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveMax(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveMax(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveMax(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveAnd(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveAnd(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveAnd(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveAnd(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveOr(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveOr(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveOr(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveOr(data[3].i16);

+

+    data[invocation].i16.x   = subgroupInclusiveXor(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupInclusiveXor(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupInclusiveXor(data[2].i16.xyz);

+    data[invocation].i16     = subgroupInclusiveXor(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveAdd(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveAdd(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveAdd(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveAdd(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveMul(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveMul(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveMul(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveMul(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveMin(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveMin(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveMin(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveMin(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveMax(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveMax(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveMax(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveMax(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveAnd(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveAnd(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveAnd(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveAnd(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveOr(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveOr(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveOr(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveOr(data[3].i16);

+

+    data[invocation].i16.x   = subgroupExclusiveXor(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupExclusiveXor(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupExclusiveXor(data[2].i16.xyz);

+    data[invocation].i16     = subgroupExclusiveXor(data[3].i16);

+

+    data[invocation].u16.x   = subgroupAdd(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupAdd(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupAdd(data[2].u16.xyz);

+    data[invocation].u16     = subgroupAdd(data[3].u16);

+

+    data[invocation].u16.x   = subgroupMul(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupMul(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupMul(data[2].u16.xyz);

+    data[invocation].u16     = subgroupMul(data[3].u16);

+

+    data[invocation].u16.x   = subgroupMin(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupMin(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupMin(data[2].u16.xyz);

+    data[invocation].u16     = subgroupMin(data[3].u16);

+

+    data[invocation].u16.x   = subgroupMax(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupMax(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupMax(data[2].u16.xyz);

+    data[invocation].u16     = subgroupMax(data[3].u16);

+

+    data[invocation].u16.x   = subgroupAnd(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupAnd(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupAnd(data[2].u16.xyz);

+    data[invocation].u16     = subgroupAnd(data[3].u16);

+

+    data[invocation].u16.x   = subgroupOr(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupOr(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupOr(data[2].u16.xyz);

+    data[invocation].u16     = subgroupOr(data[3].u16);

+

+    data[invocation].u16.x   = subgroupXor(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupXor(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupXor(data[2].u16.xyz);

+    data[invocation].u16     = subgroupXor(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveAdd(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveAdd(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveAdd(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveAdd(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveMul(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveMul(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveMul(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveMul(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveMin(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveMin(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveMin(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveMin(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveMax(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveMax(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveMax(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveMax(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveAnd(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveAnd(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveAnd(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveAnd(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveOr(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveOr(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveOr(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveOr(data[3].u16);

+

+    data[invocation].u16.x   = subgroupInclusiveXor(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupInclusiveXor(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupInclusiveXor(data[2].u16.xyz);

+    data[invocation].u16     = subgroupInclusiveXor(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveAdd(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveAdd(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveAdd(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveAdd(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveMul(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveMul(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveMul(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveMul(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveMin(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveMin(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveMin(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveMin(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveMax(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveMax(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveMax(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveMax(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveAnd(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveAnd(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveAnd(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveAnd(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveOr(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveOr(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveOr(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveOr(data[3].u16);

+

+    data[invocation].u16.x   = subgroupExclusiveXor(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupExclusiveXor(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupExclusiveXor(data[2].u16.xyz);

+    data[invocation].u16     = subgroupExclusiveXor(data[3].u16);

+

+    data[invocation].i64.x   = subgroupAdd(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupAdd(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupAdd(data[2].i64.xyz);

+    data[invocation].i64     = subgroupAdd(data[3].i64);

+

+    data[invocation].i64.x   = subgroupMul(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupMul(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupMul(data[2].i64.xyz);

+    data[invocation].i64     = subgroupMul(data[3].i64);

+

+    data[invocation].i64.x   = subgroupMin(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupMin(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupMin(data[2].i64.xyz);

+    data[invocation].i64     = subgroupMin(data[3].i64);

+

+    data[invocation].i64.x   = subgroupMax(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupMax(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupMax(data[2].i64.xyz);

+    data[invocation].i64     = subgroupMax(data[3].i64);

+

+    data[invocation].i64.x   = subgroupAnd(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupAnd(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupAnd(data[2].i64.xyz);

+    data[invocation].i64     = subgroupAnd(data[3].i64);

+

+    data[invocation].i64.x   = subgroupOr(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupOr(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupOr(data[2].i64.xyz);

+    data[invocation].i64     = subgroupOr(data[3].i64);

+

+    data[invocation].i64.x   = subgroupXor(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupXor(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupXor(data[2].i64.xyz);

+    data[invocation].i64     = subgroupXor(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveAdd(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveAdd(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveAdd(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveAdd(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveMul(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveMul(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveMul(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveMul(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveMin(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveMin(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveMin(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveMin(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveMax(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveMax(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveMax(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveMax(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveAnd(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveAnd(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveAnd(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveAnd(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveOr(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveOr(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveOr(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveOr(data[3].i64);

+

+    data[invocation].i64.x   = subgroupInclusiveXor(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupInclusiveXor(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupInclusiveXor(data[2].i64.xyz);

+    data[invocation].i64     = subgroupInclusiveXor(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveAdd(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveAdd(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveAdd(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveAdd(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveMul(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveMul(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveMul(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveMul(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveMin(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveMin(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveMin(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveMin(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveMax(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveMax(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveMax(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveMax(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveAnd(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveAnd(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveAnd(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveAnd(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveOr(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveOr(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveOr(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveOr(data[3].i64);

+

+    data[invocation].i64.x   = subgroupExclusiveXor(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupExclusiveXor(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupExclusiveXor(data[2].i64.xyz);

+    data[invocation].i64     = subgroupExclusiveXor(data[3].i64);

+

+    data[invocation].u64.x   = subgroupAdd(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupAdd(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupAdd(data[2].u64.xyz);

+    data[invocation].u64     = subgroupAdd(data[3].u64);

+

+    data[invocation].u64.x   = subgroupMul(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupMul(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupMul(data[2].u64.xyz);

+    data[invocation].u64     = subgroupMul(data[3].u64);

+

+    data[invocation].u64.x   = subgroupMin(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupMin(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupMin(data[2].u64.xyz);

+    data[invocation].u64     = subgroupMin(data[3].u64);

+

+    data[invocation].u64.x   = subgroupMax(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupMax(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupMax(data[2].u64.xyz);

+    data[invocation].u64     = subgroupMax(data[3].u64);

+

+    data[invocation].u64.x   = subgroupAnd(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupAnd(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupAnd(data[2].u64.xyz);

+    data[invocation].u64     = subgroupAnd(data[3].u64);

+

+    data[invocation].u64.x   = subgroupOr(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupOr(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupOr(data[2].u64.xyz);

+    data[invocation].u64     = subgroupOr(data[3].u64);

+

+    data[invocation].u64.x   = subgroupXor(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupXor(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupXor(data[2].u64.xyz);

+    data[invocation].u64     = subgroupXor(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveAdd(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveAdd(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveAdd(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveAdd(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveMul(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveMul(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveMul(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveMul(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveMin(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveMin(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveMin(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveMin(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveMax(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveMax(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveMax(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveMax(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveAnd(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveAnd(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveAnd(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveAnd(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveOr(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveOr(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveOr(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveOr(data[3].u64);

+

+    data[invocation].u64.x   = subgroupInclusiveXor(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupInclusiveXor(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupInclusiveXor(data[2].u64.xyz);

+    data[invocation].u64     = subgroupInclusiveXor(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveAdd(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveAdd(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveAdd(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveAdd(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveMul(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveMul(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveMul(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveMul(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveMin(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveMin(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveMin(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveMin(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveMax(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveMax(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveMax(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveMax(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveAnd(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveAnd(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveAnd(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveAnd(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveOr(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveOr(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveOr(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveOr(data[3].u64);

+

+    data[invocation].u64.x   = subgroupExclusiveXor(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupExclusiveXor(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupExclusiveXor(data[2].u64.xyz);

+    data[invocation].u64     = subgroupExclusiveXor(data[3].u64);

+

+    data[invocation].f16.x   = subgroupAdd(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupAdd(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupAdd(data[2].f16.xyz);

+    data[invocation].f16     = subgroupAdd(data[3].f16);

+

+    data[invocation].f16.x   = subgroupMul(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupMul(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupMul(data[2].f16.xyz);

+    data[invocation].f16     = subgroupMul(data[3].f16);

+

+    data[invocation].f16.x   = subgroupMin(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupMin(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupMin(data[2].f16.xyz);

+    data[invocation].f16     = subgroupMin(data[3].f16);

+

+    data[invocation].f16.x   = subgroupMax(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupMax(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupMax(data[2].f16.xyz);

+    data[invocation].f16     = subgroupMax(data[3].f16);

+

+    data[invocation].f16.x   = subgroupInclusiveAdd(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupInclusiveAdd(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupInclusiveAdd(data[2].f16.xyz);

+    data[invocation].f16     = subgroupInclusiveAdd(data[3].f16);

+

+    data[invocation].f16.x   = subgroupInclusiveMul(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupInclusiveMul(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupInclusiveMul(data[2].f16.xyz);

+    data[invocation].f16     = subgroupInclusiveMul(data[3].f16);

+

+    data[invocation].f16.x   = subgroupInclusiveMin(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupInclusiveMin(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupInclusiveMin(data[2].f16.xyz);

+    data[invocation].f16     = subgroupInclusiveMin(data[3].f16);

+

+    data[invocation].f16.x   = subgroupInclusiveMax(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupInclusiveMax(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupInclusiveMax(data[2].f16.xyz);

+    data[invocation].f16     = subgroupInclusiveMax(data[3].f16);

+

+    data[invocation].f16.x   = subgroupExclusiveAdd(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupExclusiveAdd(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupExclusiveAdd(data[2].f16.xyz);

+    data[invocation].f16     = subgroupExclusiveAdd(data[3].f16);

+

+    data[invocation].f16.x   = subgroupExclusiveMul(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupExclusiveMul(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupExclusiveMul(data[2].f16.xyz);

+    data[invocation].f16     = subgroupExclusiveMul(data[3].f16);

+

+    data[invocation].f16.x   = subgroupExclusiveMin(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupExclusiveMin(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupExclusiveMin(data[2].f16.xyz);

+    data[invocation].f16     = subgroupExclusiveMin(data[3].f16);

+

+    data[invocation].f16.x   = subgroupExclusiveMax(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupExclusiveMax(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupExclusiveMax(data[2].f16.xyz);

+    data[invocation].f16     = subgroupExclusiveMax(data[3].f16);

+}

diff --git a/Test/spv.subgroupExtendedTypesBallot.comp b/Test/spv.subgroupExtendedTypesBallot.comp
new file mode 100644
index 0000000..22d29cb
--- /dev/null
+++ b/Test/spv.subgroupExtendedTypesBallot.comp
@@ -0,0 +1,88 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+#extension GL_EXT_shader_subgroup_extended_types_int8: enable

+#extension GL_EXT_shader_subgroup_extended_types_int16: enable

+#extension GL_EXT_shader_subgroup_extended_types_int64: enable

+#extension GL_EXT_shader_subgroup_extended_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].i8.x   = subgroupBroadcast(data[0].i8.x,    3);

+    data[invocation].i8.xy  = subgroupBroadcast(data[1].i8.xy,   3);

+    data[invocation].i8.xyz = subgroupBroadcast(data[2].i8.xyz,  3);

+    data[invocation].i8     = subgroupBroadcast(data[3].i8,      3);

+    data[invocation].i8.x   = subgroupBroadcastFirst(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupBroadcastFirst(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupBroadcastFirst(data[2].i8.xyz);

+    data[invocation].i8     = subgroupBroadcastFirst(data[3].i8);

+

+    data[invocation].u8.x   = subgroupBroadcast(data[0].u8.x,    3);

+    data[invocation].u8.xy  = subgroupBroadcast(data[1].u8.xy,   3);

+    data[invocation].u8.xyz = subgroupBroadcast(data[2].u8.xyz,  3);

+    data[invocation].u8     = subgroupBroadcast(data[3].u8,      3);

+    data[invocation].u8.x   = subgroupBroadcastFirst(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupBroadcastFirst(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupBroadcastFirst(data[2].u8.xyz);

+    data[invocation].u8     = subgroupBroadcastFirst(data[3].u8);

+

+    data[invocation].i16.x   = subgroupBroadcast(data[0].i16.x,    3);

+    data[invocation].i16.xy  = subgroupBroadcast(data[1].i16.xy,   3);

+    data[invocation].i16.xyz = subgroupBroadcast(data[2].i16.xyz,  3);

+    data[invocation].i16     = subgroupBroadcast(data[3].i16,      3);

+    data[invocation].i16.x   = subgroupBroadcastFirst(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupBroadcastFirst(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupBroadcastFirst(data[2].i16.xyz);

+    data[invocation].i16     = subgroupBroadcastFirst(data[3].i16);

+

+    data[invocation].u16.x   = subgroupBroadcast(data[0].u16.x,    3);

+    data[invocation].u16.xy  = subgroupBroadcast(data[1].u16.xy,   3);

+    data[invocation].u16.xyz = subgroupBroadcast(data[2].u16.xyz,  3);

+    data[invocation].u16     = subgroupBroadcast(data[3].u16,      3);

+    data[invocation].u16.x   = subgroupBroadcastFirst(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupBroadcastFirst(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupBroadcastFirst(data[2].u16.xyz);

+    data[invocation].u16     = subgroupBroadcastFirst(data[3].u16);

+

+    data[invocation].i64.x   = subgroupBroadcast(data[0].i64.x,    3);

+    data[invocation].i64.xy  = subgroupBroadcast(data[1].i64.xy,   3);

+    data[invocation].i64.xyz = subgroupBroadcast(data[2].i64.xyz,  3);

+    data[invocation].i64     = subgroupBroadcast(data[3].i64,      3);

+    data[invocation].i64.x   = subgroupBroadcastFirst(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupBroadcastFirst(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupBroadcastFirst(data[2].i64.xyz);

+    data[invocation].i64     = subgroupBroadcastFirst(data[3].i64);

+

+    data[invocation].u64.x   = subgroupBroadcast(data[0].u64.x,    3);

+    data[invocation].u64.xy  = subgroupBroadcast(data[1].u64.xy,   3);

+    data[invocation].u64.xyz = subgroupBroadcast(data[2].u64.xyz,  3);

+    data[invocation].u64     = subgroupBroadcast(data[3].u64,      3);

+    data[invocation].u64.x   = subgroupBroadcastFirst(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupBroadcastFirst(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupBroadcastFirst(data[2].u64.xyz);

+    data[invocation].u64     = subgroupBroadcastFirst(data[3].u64);

+

+    data[invocation].f16.x   = subgroupBroadcast(data[0].f16.x,    3);

+    data[invocation].f16.xy  = subgroupBroadcast(data[1].f16.xy,   3);

+    data[invocation].f16.xyz = subgroupBroadcast(data[2].f16.xyz,  3);

+    data[invocation].f16     = subgroupBroadcast(data[3].f16,      3);

+    data[invocation].f16.x   = subgroupBroadcastFirst(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupBroadcastFirst(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupBroadcastFirst(data[2].f16.xyz);

+    data[invocation].f16     = subgroupBroadcastFirst(data[3].f16);

+}

diff --git a/Test/spv.subgroupExtendedTypesBallotNeg.comp b/Test/spv.subgroupExtendedTypesBallotNeg.comp
new file mode 100644
index 0000000..240ab59
--- /dev/null
+++ b/Test/spv.subgroupExtendedTypesBallotNeg.comp
@@ -0,0 +1,88 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_ballot: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].i8.x   = subgroupBroadcast(data[0].i8.x,    3);

+    data[invocation].i8.xy  = subgroupBroadcast(data[1].i8.xy,   3);

+    data[invocation].i8.xyz = subgroupBroadcast(data[2].i8.xyz,  3);

+    data[invocation].i8     = subgroupBroadcast(data[3].i8,      3);

+    data[invocation].i8.x   = subgroupBroadcastFirst(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupBroadcastFirst(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupBroadcastFirst(data[2].i8.xyz);

+    data[invocation].i8     = subgroupBroadcastFirst(data[3].i8);

+

+    data[invocation].u8.x   = subgroupBroadcast(data[0].u8.x,    3);

+    data[invocation].u8.xy  = subgroupBroadcast(data[1].u8.xy,   3);

+    data[invocation].u8.xyz = subgroupBroadcast(data[2].u8.xyz,  3);

+    data[invocation].u8     = subgroupBroadcast(data[3].u8,      3);

+    data[invocation].u8.x   = subgroupBroadcastFirst(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupBroadcastFirst(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupBroadcastFirst(data[2].u8.xyz);

+    data[invocation].u8     = subgroupBroadcastFirst(data[3].u8);

+

+    data[invocation].i16.x   = subgroupBroadcast(data[0].i16.x,    3);

+    data[invocation].i16.xy  = subgroupBroadcast(data[1].i16.xy,   3);

+    data[invocation].i16.xyz = subgroupBroadcast(data[2].i16.xyz,  3);

+    data[invocation].i16     = subgroupBroadcast(data[3].i16,      3);

+    data[invocation].i16.x   = subgroupBroadcastFirst(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupBroadcastFirst(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupBroadcastFirst(data[2].i16.xyz);

+    data[invocation].i16     = subgroupBroadcastFirst(data[3].i16);

+

+    data[invocation].u16.x   = subgroupBroadcast(data[0].u16.x,    3);

+    data[invocation].u16.xy  = subgroupBroadcast(data[1].u16.xy,   3);

+    data[invocation].u16.xyz = subgroupBroadcast(data[2].u16.xyz,  3);

+    data[invocation].u16     = subgroupBroadcast(data[3].u16,      3);

+    data[invocation].u16.x   = subgroupBroadcastFirst(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupBroadcastFirst(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupBroadcastFirst(data[2].u16.xyz);

+    data[invocation].u16     = subgroupBroadcastFirst(data[3].u16);

+

+    data[invocation].i64.x   = subgroupBroadcast(data[0].i64.x,    3);

+    data[invocation].i64.xy  = subgroupBroadcast(data[1].i64.xy,   3);

+    data[invocation].i64.xyz = subgroupBroadcast(data[2].i64.xyz,  3);

+    data[invocation].i64     = subgroupBroadcast(data[3].i64,      3);

+    data[invocation].i64.x   = subgroupBroadcastFirst(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupBroadcastFirst(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupBroadcastFirst(data[2].i64.xyz);

+    data[invocation].i64     = subgroupBroadcastFirst(data[3].i64);

+

+    data[invocation].u64.x   = subgroupBroadcast(data[0].u64.x,    3);

+    data[invocation].u64.xy  = subgroupBroadcast(data[1].u64.xy,   3);

+    data[invocation].u64.xyz = subgroupBroadcast(data[2].u64.xyz,  3);

+    data[invocation].u64     = subgroupBroadcast(data[3].u64,      3);

+    data[invocation].u64.x   = subgroupBroadcastFirst(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupBroadcastFirst(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupBroadcastFirst(data[2].u64.xyz);

+    data[invocation].u64     = subgroupBroadcastFirst(data[3].u64);

+

+    data[invocation].f16.x   = subgroupBroadcast(data[0].f16.x,    3);

+    data[invocation].f16.xy  = subgroupBroadcast(data[1].f16.xy,   3);

+    data[invocation].f16.xyz = subgroupBroadcast(data[2].f16.xyz,  3);

+    data[invocation].f16     = subgroupBroadcast(data[3].f16,      3);

+    data[invocation].f16.x   = subgroupBroadcastFirst(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupBroadcastFirst(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupBroadcastFirst(data[2].f16.xyz);

+    data[invocation].f16     = subgroupBroadcastFirst(data[3].f16);

+}

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

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+#extension GL_EXT_shader_subgroup_extended_types_int8: enable

+#extension GL_EXT_shader_subgroup_extended_types_int16: enable

+#extension GL_EXT_shader_subgroup_extended_types_int64: enable

+#extension GL_EXT_shader_subgroup_extended_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].i8.x   = subgroupClusteredAdd(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredAdd(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredAdd(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredAdd(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupClusteredMul(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredMul(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredMul(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredMul(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupClusteredMin(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredMin(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredMin(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredMin(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupClusteredMax(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredMax(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredMax(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredMax(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupClusteredAnd(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredAnd(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredAnd(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredAnd(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupClusteredOr(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredOr(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredOr(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredOr(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupClusteredXor(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredXor(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredXor(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredXor(data[3].i8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredAdd(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredAdd(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredAdd(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredAdd(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredMul(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredMul(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredMul(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredMul(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredMin(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredMin(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredMin(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredMin(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredMax(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredMax(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredMax(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredMax(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredAnd(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredAnd(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredAnd(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredAnd(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredOr(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredOr(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredOr(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredOr(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredXor(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredXor(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredXor(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredXor(data[3].u8, 1);

+

+    data[invocation].i16.x   = subgroupClusteredAdd(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredAdd(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredAdd(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredAdd(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupClusteredMul(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredMul(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredMul(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredMul(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupClusteredMin(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredMin(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredMin(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredMin(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupClusteredMax(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredMax(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredMax(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredMax(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupClusteredAnd(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredAnd(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredAnd(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredAnd(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupClusteredOr(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredOr(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredOr(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredOr(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupClusteredXor(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredXor(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredXor(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredXor(data[3].i16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredAdd(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredAdd(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredAdd(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredAdd(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredMul(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredMul(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredMul(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredMul(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredMin(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredMin(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredMin(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredMin(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredMax(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredMax(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredMax(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredMax(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredAnd(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredAnd(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredAnd(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredAnd(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredOr(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredOr(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredOr(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredOr(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredXor(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredXor(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredXor(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredXor(data[3].u16, 1);

+

+    data[invocation].i64.x   = subgroupClusteredAdd(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredAdd(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredAdd(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredAdd(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupClusteredMul(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredMul(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredMul(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredMul(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupClusteredMin(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredMin(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredMin(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredMin(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupClusteredMax(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredMax(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredMax(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredMax(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupClusteredAnd(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredAnd(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredAnd(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredAnd(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupClusteredOr(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredOr(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredOr(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredOr(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupClusteredXor(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredXor(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredXor(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredXor(data[3].i64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredAdd(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredAdd(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredAdd(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredAdd(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredMul(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredMul(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredMul(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredMul(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredMin(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredMin(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredMin(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredMin(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredMax(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredMax(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredMax(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredMax(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredAnd(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredAnd(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredAnd(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredAnd(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredOr(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredOr(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredOr(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredOr(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredXor(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredXor(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredXor(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredXor(data[3].u64, 1);

+

+    data[invocation].f16.x   = subgroupClusteredAdd(data[0].f16.x, 1);

+    data[invocation].f16.xy  = subgroupClusteredAdd(data[1].f16.xy, 1);

+    data[invocation].f16.xyz = subgroupClusteredAdd(data[2].f16.xyz, 1);

+    data[invocation].f16     = subgroupClusteredAdd(data[3].f16, 1);

+

+    data[invocation].f16.x   = subgroupClusteredMul(data[0].f16.x, 1);

+    data[invocation].f16.xy  = subgroupClusteredMul(data[1].f16.xy, 1);

+    data[invocation].f16.xyz = subgroupClusteredMul(data[2].f16.xyz, 1);

+    data[invocation].f16     = subgroupClusteredMul(data[3].f16, 1);

+

+    data[invocation].f16.x   = subgroupClusteredMin(data[0].f16.x, 1);

+    data[invocation].f16.xy  = subgroupClusteredMin(data[1].f16.xy, 1);

+    data[invocation].f16.xyz = subgroupClusteredMin(data[2].f16.xyz, 1);

+    data[invocation].f16     = subgroupClusteredMin(data[3].f16, 1);

+

+    data[invocation].f16.x   = subgroupClusteredMax(data[0].f16.x, 1);

+    data[invocation].f16.xy  = subgroupClusteredMax(data[1].f16.xy, 1);

+    data[invocation].f16.xyz = subgroupClusteredMax(data[2].f16.xyz, 1);

+    data[invocation].f16     = subgroupClusteredMax(data[3].f16, 1);

+}

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

+

+#extension GL_KHR_shader_subgroup_clustered: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].i8.x   = subgroupClusteredAdd(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredAdd(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredAdd(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredAdd(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupClusteredMul(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredMul(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredMul(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredMul(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupClusteredMin(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredMin(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredMin(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredMin(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupClusteredMax(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredMax(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredMax(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredMax(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupClusteredAnd(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredAnd(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredAnd(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredAnd(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupClusteredOr(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredOr(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredOr(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredOr(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupClusteredXor(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupClusteredXor(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupClusteredXor(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupClusteredXor(data[3].i8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredAdd(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredAdd(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredAdd(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredAdd(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredMul(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredMul(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredMul(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredMul(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredMin(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredMin(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredMin(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredMin(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredMax(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredMax(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredMax(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredMax(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredAnd(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredAnd(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredAnd(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredAnd(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredOr(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredOr(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredOr(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredOr(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupClusteredXor(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupClusteredXor(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupClusteredXor(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupClusteredXor(data[3].u8, 1);

+

+    data[invocation].i16.x   = subgroupClusteredAdd(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredAdd(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredAdd(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredAdd(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupClusteredMul(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredMul(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredMul(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredMul(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupClusteredMin(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredMin(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredMin(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredMin(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupClusteredMax(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredMax(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredMax(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredMax(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupClusteredAnd(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredAnd(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredAnd(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredAnd(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupClusteredOr(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredOr(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredOr(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredOr(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupClusteredXor(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupClusteredXor(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupClusteredXor(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupClusteredXor(data[3].i16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredAdd(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredAdd(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredAdd(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredAdd(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredMul(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredMul(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredMul(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredMul(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredMin(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredMin(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredMin(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredMin(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredMax(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredMax(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredMax(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredMax(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredAnd(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredAnd(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredAnd(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredAnd(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredOr(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredOr(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredOr(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredOr(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupClusteredXor(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupClusteredXor(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupClusteredXor(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupClusteredXor(data[3].u16, 1);

+

+    data[invocation].i64.x   = subgroupClusteredAdd(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredAdd(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredAdd(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredAdd(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupClusteredMul(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredMul(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredMul(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredMul(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupClusteredMin(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredMin(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredMin(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredMin(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupClusteredMax(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredMax(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredMax(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredMax(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupClusteredAnd(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredAnd(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredAnd(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredAnd(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupClusteredOr(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredOr(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredOr(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredOr(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupClusteredXor(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupClusteredXor(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupClusteredXor(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupClusteredXor(data[3].i64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredAdd(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredAdd(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredAdd(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredAdd(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredMul(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredMul(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredMul(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredMul(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredMin(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredMin(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredMin(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredMin(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredMax(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredMax(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredMax(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredMax(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredAnd(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredAnd(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredAnd(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredAnd(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredOr(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredOr(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredOr(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredOr(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupClusteredXor(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupClusteredXor(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupClusteredXor(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupClusteredXor(data[3].u64, 1);

+

+    data[invocation].f16.x   = subgroupClusteredAdd(data[0].f16.x, 1);

+    data[invocation].f16.xy  = subgroupClusteredAdd(data[1].f16.xy, 1);

+    data[invocation].f16.xyz = subgroupClusteredAdd(data[2].f16.xyz, 1);

+    data[invocation].f16     = subgroupClusteredAdd(data[3].f16, 1);

+

+    data[invocation].f16.x   = subgroupClusteredMul(data[0].f16.x, 1);

+    data[invocation].f16.xy  = subgroupClusteredMul(data[1].f16.xy, 1);

+    data[invocation].f16.xyz = subgroupClusteredMul(data[2].f16.xyz, 1);

+    data[invocation].f16     = subgroupClusteredMul(data[3].f16, 1);

+

+    data[invocation].f16.x   = subgroupClusteredMin(data[0].f16.x, 1);

+    data[invocation].f16.xy  = subgroupClusteredMin(data[1].f16.xy, 1);

+    data[invocation].f16.xyz = subgroupClusteredMin(data[2].f16.xyz, 1);

+    data[invocation].f16     = subgroupClusteredMin(data[3].f16, 1);

+

+    data[invocation].f16.x   = subgroupClusteredMax(data[0].f16.x, 1);

+    data[invocation].f16.xy  = subgroupClusteredMax(data[1].f16.xy, 1);

+    data[invocation].f16.xyz = subgroupClusteredMax(data[2].f16.xyz, 1);

+    data[invocation].f16     = subgroupClusteredMax(data[3].f16, 1);

+}

diff --git a/Test/spv.subgroupExtendedTypesPartitioned.comp b/Test/spv.subgroupExtendedTypesPartitioned.comp
new file mode 100644
index 0000000..382a5b3
--- /dev/null
+++ b/Test/spv.subgroupExtendedTypesPartitioned.comp
@@ -0,0 +1,291 @@
+#version 450

+

+#extension GL_NV_shader_subgroup_partitioned: enable

+#extension GL_EXT_shader_subgroup_extended_types_int8: enable

+#extension GL_EXT_shader_subgroup_extended_types_int16: enable

+#extension GL_EXT_shader_subgroup_extended_types_int64: enable

+#extension GL_EXT_shader_subgroup_extended_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    uvec4 ballot;

+    ballot = subgroupPartitionNV(data[0].i8.x);

+    ballot = subgroupPartitionNV(data[1].i8.xy);

+    ballot = subgroupPartitionNV(data[2].i8.xyz);

+    ballot = subgroupPartitionNV(data[3].i8);

+

+    ballot = subgroupPartitionNV(data[0].u8.x);

+    ballot = subgroupPartitionNV(data[1].u8.xy);

+    ballot = subgroupPartitionNV(data[2].u8.xyz);

+    ballot = subgroupPartitionNV(data[3].u8);

+

+    ballot = subgroupPartitionNV(data[0].i16.x);

+    ballot = subgroupPartitionNV(data[1].i16.xy);

+    ballot = subgroupPartitionNV(data[2].i16.xyz);

+    ballot = subgroupPartitionNV(data[3].i16);

+

+    ballot = subgroupPartitionNV(data[0].u16.x);

+    ballot = subgroupPartitionNV(data[1].u16.xy);

+    ballot = subgroupPartitionNV(data[2].u16.xyz);

+    ballot = subgroupPartitionNV(data[3].u16);

+

+    ballot = subgroupPartitionNV(data[0].i64.x);

+    ballot = subgroupPartitionNV(data[1].i64.xy);

+    ballot = subgroupPartitionNV(data[2].i64.xyz);

+    ballot = subgroupPartitionNV(data[3].i64);

+

+    ballot = subgroupPartitionNV(data[0].u64.x);

+    ballot = subgroupPartitionNV(data[1].u64.xy);

+    ballot = subgroupPartitionNV(data[2].u64.xyz);

+    ballot = subgroupPartitionNV(data[3].u64);

+

+    ballot = subgroupPartitionNV(data[0].f16.x);

+    ballot = subgroupPartitionNV(data[1].f16.xy);

+    ballot = subgroupPartitionNV(data[2].f16.xyz);

+    ballot = subgroupPartitionNV(data[3].f16);

+

+    data[invocation].i8.x   = subgroupPartitionedAddNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedAddNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedAddNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedAddNV(data[3].i8, ballot);

+

+    data[invocation].i8.x   = subgroupPartitionedMulNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedMulNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedMulNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedMulNV(data[3].i8, ballot);

+

+    data[invocation].i8.x   = subgroupPartitionedMinNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedMinNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedMinNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedMinNV(data[3].i8, ballot);

+

+    data[invocation].i8.x   = subgroupPartitionedMaxNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedMaxNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedMaxNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedMaxNV(data[3].i8, ballot);

+

+    data[invocation].i8.x   = subgroupPartitionedAndNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedAndNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedAndNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedAndNV(data[3].i8, ballot);

+

+    data[invocation].i8.x   = subgroupPartitionedOrNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedOrNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedOrNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedOrNV(data[3].i8, ballot);

+

+    data[invocation].i8.x   = subgroupPartitionedXorNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedXorNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedXorNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedXorNV(data[3].i8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedAddNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedAddNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedAddNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedAddNV(data[3].u8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedMulNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedMulNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedMulNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedMulNV(data[3].u8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedMinNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedMinNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedMinNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedMinNV(data[3].u8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedMaxNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedMaxNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedMaxNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedMaxNV(data[3].u8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedAndNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedAndNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedAndNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedAndNV(data[3].u8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedOrNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedOrNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedOrNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedOrNV(data[3].u8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedXorNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedXorNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedXorNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedXorNV(data[3].u8, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedAddNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedAddNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedAddNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedAddNV(data[3].i16, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedMulNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedMulNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedMulNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedMulNV(data[3].i16, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedMinNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedMinNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedMinNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedMinNV(data[3].i16, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedMaxNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedMaxNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedMaxNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedMaxNV(data[3].i16, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedAndNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedAndNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedAndNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedAndNV(data[3].i16, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedOrNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedOrNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedOrNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedOrNV(data[3].i16, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedXorNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedXorNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedXorNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedXorNV(data[3].i16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedAddNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedAddNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedAddNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedAddNV(data[3].u16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedMulNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedMulNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedMulNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedMulNV(data[3].u16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedMinNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedMinNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedMinNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedMinNV(data[3].u16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedMaxNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedMaxNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedMaxNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedMaxNV(data[3].u16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedAndNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedAndNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedAndNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedAndNV(data[3].u16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedOrNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedOrNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedOrNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedOrNV(data[3].u16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedXorNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedXorNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedXorNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedXorNV(data[3].u16, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedAddNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedAddNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedAddNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedAddNV(data[3].i64, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedMulNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedMulNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedMulNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedMulNV(data[3].i64, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedMinNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedMinNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedMinNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedMinNV(data[3].i64, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedMaxNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedMaxNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedMaxNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedMaxNV(data[3].i64, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedAndNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedAndNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedAndNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedAndNV(data[3].i64, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedOrNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedOrNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedOrNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedOrNV(data[3].i64, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedXorNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedXorNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedXorNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedXorNV(data[3].i64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedAddNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedAddNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedAddNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedAddNV(data[3].u64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedMulNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedMulNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedMulNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedMulNV(data[3].u64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedMinNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedMinNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedMinNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedMinNV(data[3].u64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedMaxNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedMaxNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedMaxNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedMaxNV(data[3].u64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedAndNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedAndNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedAndNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedAndNV(data[3].u64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedOrNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedOrNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedOrNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedOrNV(data[3].u64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedXorNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedXorNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedXorNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedXorNV(data[3].u64, ballot);

+

+    data[invocation].f16.x   = subgroupPartitionedAddNV(data[0].f16.x, ballot);

+    data[invocation].f16.xy  = subgroupPartitionedAddNV(data[1].f16.xy, ballot);

+    data[invocation].f16.xyz = subgroupPartitionedAddNV(data[2].f16.xyz, ballot);

+    data[invocation].f16     = subgroupPartitionedAddNV(data[3].f16, ballot);

+

+    data[invocation].f16.x   = subgroupPartitionedMulNV(data[0].f16.x, ballot);

+    data[invocation].f16.xy  = subgroupPartitionedMulNV(data[1].f16.xy, ballot);

+    data[invocation].f16.xyz = subgroupPartitionedMulNV(data[2].f16.xyz, ballot);

+    data[invocation].f16     = subgroupPartitionedMulNV(data[3].f16, ballot);

+

+    data[invocation].f16.x   = subgroupPartitionedMinNV(data[0].f16.x, ballot);

+    data[invocation].f16.xy  = subgroupPartitionedMinNV(data[1].f16.xy, ballot);

+    data[invocation].f16.xyz = subgroupPartitionedMinNV(data[2].f16.xyz, ballot);

+    data[invocation].f16     = subgroupPartitionedMinNV(data[3].f16, ballot);

+

+    data[invocation].f16.x   = subgroupPartitionedMaxNV(data[0].f16.x, ballot);

+    data[invocation].f16.xy  = subgroupPartitionedMaxNV(data[1].f16.xy, ballot);

+    data[invocation].f16.xyz = subgroupPartitionedMaxNV(data[2].f16.xyz, ballot);

+    data[invocation].f16     = subgroupPartitionedMaxNV(data[3].f16, ballot);

+}

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

+

+#extension GL_NV_shader_subgroup_partitioned: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    uvec4 ballot;

+    ballot = subgroupPartitionNV(data[0].i8.x);

+    ballot = subgroupPartitionNV(data[1].i8.xy);

+    ballot = subgroupPartitionNV(data[2].i8.xyz);

+    ballot = subgroupPartitionNV(data[3].i8);

+

+    ballot = subgroupPartitionNV(data[0].u8.x);

+    ballot = subgroupPartitionNV(data[1].u8.xy);

+    ballot = subgroupPartitionNV(data[2].u8.xyz);

+    ballot = subgroupPartitionNV(data[3].u8);

+

+    ballot = subgroupPartitionNV(data[0].i16.x);

+    ballot = subgroupPartitionNV(data[1].i16.xy);

+    ballot = subgroupPartitionNV(data[2].i16.xyz);

+    ballot = subgroupPartitionNV(data[3].i16);

+

+    ballot = subgroupPartitionNV(data[0].u16.x);

+    ballot = subgroupPartitionNV(data[1].u16.xy);

+    ballot = subgroupPartitionNV(data[2].u16.xyz);

+    ballot = subgroupPartitionNV(data[3].u16);

+

+    ballot = subgroupPartitionNV(data[0].i64.x);

+    ballot = subgroupPartitionNV(data[1].i64.xy);

+    ballot = subgroupPartitionNV(data[2].i64.xyz);

+    ballot = subgroupPartitionNV(data[3].i64);

+

+    ballot = subgroupPartitionNV(data[0].u64.x);

+    ballot = subgroupPartitionNV(data[1].u64.xy);

+    ballot = subgroupPartitionNV(data[2].u64.xyz);

+    ballot = subgroupPartitionNV(data[3].u64);

+

+    ballot = subgroupPartitionNV(data[0].f16.x);

+    ballot = subgroupPartitionNV(data[1].f16.xy);

+    ballot = subgroupPartitionNV(data[2].f16.xyz);

+    ballot = subgroupPartitionNV(data[3].f16);

+

+    data[invocation].i8.x   = subgroupPartitionedAddNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedAddNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedAddNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedAddNV(data[3].i8, ballot);

+

+    data[invocation].i8.x   = subgroupPartitionedMulNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedMulNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedMulNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedMulNV(data[3].i8, ballot);

+

+    data[invocation].i8.x   = subgroupPartitionedMinNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedMinNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedMinNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedMinNV(data[3].i8, ballot);

+

+    data[invocation].i8.x   = subgroupPartitionedMaxNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedMaxNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedMaxNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedMaxNV(data[3].i8, ballot);

+

+    data[invocation].i8.x   = subgroupPartitionedAndNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedAndNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedAndNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedAndNV(data[3].i8, ballot);

+

+    data[invocation].i8.x   = subgroupPartitionedOrNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedOrNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedOrNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedOrNV(data[3].i8, ballot);

+

+    data[invocation].i8.x   = subgroupPartitionedXorNV(data[0].i8.x, ballot);

+    data[invocation].i8.xy  = subgroupPartitionedXorNV(data[1].i8.xy, ballot);

+    data[invocation].i8.xyz = subgroupPartitionedXorNV(data[2].i8.xyz, ballot);

+    data[invocation].i8     = subgroupPartitionedXorNV(data[3].i8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedAddNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedAddNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedAddNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedAddNV(data[3].u8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedMulNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedMulNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedMulNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedMulNV(data[3].u8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedMinNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedMinNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedMinNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedMinNV(data[3].u8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedMaxNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedMaxNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedMaxNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedMaxNV(data[3].u8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedAndNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedAndNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedAndNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedAndNV(data[3].u8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedOrNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedOrNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedOrNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedOrNV(data[3].u8, ballot);

+

+    data[invocation].u8.x   = subgroupPartitionedXorNV(data[0].u8.x, ballot);

+    data[invocation].u8.xy  = subgroupPartitionedXorNV(data[1].u8.xy, ballot);

+    data[invocation].u8.xyz = subgroupPartitionedXorNV(data[2].u8.xyz, ballot);

+    data[invocation].u8     = subgroupPartitionedXorNV(data[3].u8, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedAddNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedAddNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedAddNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedAddNV(data[3].i16, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedMulNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedMulNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedMulNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedMulNV(data[3].i16, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedMinNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedMinNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedMinNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedMinNV(data[3].i16, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedMaxNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedMaxNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedMaxNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedMaxNV(data[3].i16, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedAndNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedAndNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedAndNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedAndNV(data[3].i16, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedOrNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedOrNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedOrNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedOrNV(data[3].i16, ballot);

+

+    data[invocation].i16.x   = subgroupPartitionedXorNV(data[0].i16.x, ballot);

+    data[invocation].i16.xy  = subgroupPartitionedXorNV(data[1].i16.xy, ballot);

+    data[invocation].i16.xyz = subgroupPartitionedXorNV(data[2].i16.xyz, ballot);

+    data[invocation].i16     = subgroupPartitionedXorNV(data[3].i16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedAddNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedAddNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedAddNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedAddNV(data[3].u16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedMulNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedMulNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedMulNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedMulNV(data[3].u16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedMinNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedMinNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedMinNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedMinNV(data[3].u16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedMaxNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedMaxNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedMaxNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedMaxNV(data[3].u16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedAndNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedAndNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedAndNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedAndNV(data[3].u16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedOrNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedOrNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedOrNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedOrNV(data[3].u16, ballot);

+

+    data[invocation].u16.x   = subgroupPartitionedXorNV(data[0].u16.x, ballot);

+    data[invocation].u16.xy  = subgroupPartitionedXorNV(data[1].u16.xy, ballot);

+    data[invocation].u16.xyz = subgroupPartitionedXorNV(data[2].u16.xyz, ballot);

+    data[invocation].u16     = subgroupPartitionedXorNV(data[3].u16, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedAddNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedAddNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedAddNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedAddNV(data[3].i64, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedMulNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedMulNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedMulNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedMulNV(data[3].i64, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedMinNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedMinNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedMinNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedMinNV(data[3].i64, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedMaxNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedMaxNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedMaxNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedMaxNV(data[3].i64, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedAndNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedAndNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedAndNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedAndNV(data[3].i64, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedOrNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedOrNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedOrNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedOrNV(data[3].i64, ballot);

+

+    data[invocation].i64.x   = subgroupPartitionedXorNV(data[0].i64.x, ballot);

+    data[invocation].i64.xy  = subgroupPartitionedXorNV(data[1].i64.xy, ballot);

+    data[invocation].i64.xyz = subgroupPartitionedXorNV(data[2].i64.xyz, ballot);

+    data[invocation].i64     = subgroupPartitionedXorNV(data[3].i64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedAddNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedAddNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedAddNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedAddNV(data[3].u64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedMulNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedMulNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedMulNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedMulNV(data[3].u64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedMinNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedMinNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedMinNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedMinNV(data[3].u64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedMaxNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedMaxNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedMaxNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedMaxNV(data[3].u64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedAndNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedAndNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedAndNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedAndNV(data[3].u64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedOrNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedOrNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedOrNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedOrNV(data[3].u64, ballot);

+

+    data[invocation].u64.x   = subgroupPartitionedXorNV(data[0].u64.x, ballot);

+    data[invocation].u64.xy  = subgroupPartitionedXorNV(data[1].u64.xy, ballot);

+    data[invocation].u64.xyz = subgroupPartitionedXorNV(data[2].u64.xyz, ballot);

+    data[invocation].u64     = subgroupPartitionedXorNV(data[3].u64, ballot);

+

+    data[invocation].f16.x   = subgroupPartitionedAddNV(data[0].f16.x, ballot);

+    data[invocation].f16.xy  = subgroupPartitionedAddNV(data[1].f16.xy, ballot);

+    data[invocation].f16.xyz = subgroupPartitionedAddNV(data[2].f16.xyz, ballot);

+    data[invocation].f16     = subgroupPartitionedAddNV(data[3].f16, ballot);

+

+    data[invocation].f16.x   = subgroupPartitionedMulNV(data[0].f16.x, ballot);

+    data[invocation].f16.xy  = subgroupPartitionedMulNV(data[1].f16.xy, ballot);

+    data[invocation].f16.xyz = subgroupPartitionedMulNV(data[2].f16.xyz, ballot);

+    data[invocation].f16     = subgroupPartitionedMulNV(data[3].f16, ballot);

+

+    data[invocation].f16.x   = subgroupPartitionedMinNV(data[0].f16.x, ballot);

+    data[invocation].f16.xy  = subgroupPartitionedMinNV(data[1].f16.xy, ballot);

+    data[invocation].f16.xyz = subgroupPartitionedMinNV(data[2].f16.xyz, ballot);

+    data[invocation].f16     = subgroupPartitionedMinNV(data[3].f16, ballot);

+

+    data[invocation].f16.x   = subgroupPartitionedMaxNV(data[0].f16.x, ballot);

+    data[invocation].f16.xy  = subgroupPartitionedMaxNV(data[1].f16.xy, ballot);

+    data[invocation].f16.xyz = subgroupPartitionedMaxNV(data[2].f16.xyz, ballot);

+    data[invocation].f16     = subgroupPartitionedMaxNV(data[3].f16, ballot);

+}

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

+

+#extension GL_KHR_shader_subgroup_quad: enable

+#extension GL_EXT_shader_subgroup_extended_types_int8: enable

+#extension GL_EXT_shader_subgroup_extended_types_int16: enable

+#extension GL_EXT_shader_subgroup_extended_types_int64: enable

+#extension GL_EXT_shader_subgroup_extended_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].i8.x   = subgroupQuadBroadcast(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupQuadBroadcast(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupQuadBroadcast(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupQuadBroadcast(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupQuadSwapHorizontal(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupQuadSwapHorizontal(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupQuadSwapHorizontal(data[2].i8.xyz);

+    data[invocation].i8     = subgroupQuadSwapHorizontal(data[3].i8);

+

+    data[invocation].i8.x   = subgroupQuadSwapVertical(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupQuadSwapVertical(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupQuadSwapVertical(data[2].i8.xyz);

+    data[invocation].i8     = subgroupQuadSwapVertical(data[3].i8);

+

+    data[invocation].i8.x   = subgroupQuadSwapDiagonal(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupQuadSwapDiagonal(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupQuadSwapDiagonal(data[2].i8.xyz);

+    data[invocation].i8     = subgroupQuadSwapDiagonal(data[3].i8);

+

+    data[invocation].u8.x   = subgroupQuadBroadcast(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupQuadBroadcast(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupQuadBroadcast(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupQuadBroadcast(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupQuadSwapHorizontal(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupQuadSwapHorizontal(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupQuadSwapHorizontal(data[2].u8.xyz);

+    data[invocation].u8     = subgroupQuadSwapHorizontal(data[3].u8);

+

+    data[invocation].u8.x   = subgroupQuadSwapVertical(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupQuadSwapVertical(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupQuadSwapVertical(data[2].u8.xyz);

+    data[invocation].u8     = subgroupQuadSwapVertical(data[3].u8);

+

+    data[invocation].u8.x   = subgroupQuadSwapDiagonal(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupQuadSwapDiagonal(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupQuadSwapDiagonal(data[2].u8.xyz);

+    data[invocation].u8     = subgroupQuadSwapDiagonal(data[3].u8);

+

+    data[invocation].i16.x   = subgroupQuadBroadcast(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupQuadBroadcast(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupQuadBroadcast(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupQuadBroadcast(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupQuadSwapHorizontal(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupQuadSwapHorizontal(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupQuadSwapHorizontal(data[2].i16.xyz);

+    data[invocation].i16     = subgroupQuadSwapHorizontal(data[3].i16);

+

+    data[invocation].i16.x   = subgroupQuadSwapVertical(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupQuadSwapVertical(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupQuadSwapVertical(data[2].i16.xyz);

+    data[invocation].i16     = subgroupQuadSwapVertical(data[3].i16);

+

+    data[invocation].i16.x   = subgroupQuadSwapDiagonal(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupQuadSwapDiagonal(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupQuadSwapDiagonal(data[2].i16.xyz);

+    data[invocation].i16     = subgroupQuadSwapDiagonal(data[3].i16);

+

+    data[invocation].u16.x   = subgroupQuadBroadcast(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupQuadBroadcast(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupQuadBroadcast(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupQuadBroadcast(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupQuadSwapHorizontal(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupQuadSwapHorizontal(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupQuadSwapHorizontal(data[2].u16.xyz);

+    data[invocation].u16     = subgroupQuadSwapHorizontal(data[3].u16);

+

+    data[invocation].u16.x   = subgroupQuadSwapVertical(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupQuadSwapVertical(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupQuadSwapVertical(data[2].u16.xyz);

+    data[invocation].u16     = subgroupQuadSwapVertical(data[3].u16);

+

+    data[invocation].u16.x   = subgroupQuadSwapDiagonal(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupQuadSwapDiagonal(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupQuadSwapDiagonal(data[2].u16.xyz);

+    data[invocation].u16     = subgroupQuadSwapDiagonal(data[3].u16);

+

+    data[invocation].i64.x   = subgroupQuadBroadcast(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupQuadBroadcast(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupQuadBroadcast(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupQuadBroadcast(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupQuadSwapHorizontal(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupQuadSwapHorizontal(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupQuadSwapHorizontal(data[2].i64.xyz);

+    data[invocation].i64     = subgroupQuadSwapHorizontal(data[3].i64);

+

+    data[invocation].i64.x   = subgroupQuadSwapVertical(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupQuadSwapVertical(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupQuadSwapVertical(data[2].i64.xyz);

+    data[invocation].i64     = subgroupQuadSwapVertical(data[3].i64);

+

+    data[invocation].i64.x   = subgroupQuadSwapDiagonal(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupQuadSwapDiagonal(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupQuadSwapDiagonal(data[2].i64.xyz);

+    data[invocation].i64     = subgroupQuadSwapDiagonal(data[3].i64);

+

+    data[invocation].u64.x   = subgroupQuadBroadcast(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupQuadBroadcast(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupQuadBroadcast(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupQuadBroadcast(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupQuadSwapHorizontal(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupQuadSwapHorizontal(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupQuadSwapHorizontal(data[2].u64.xyz);

+    data[invocation].u64     = subgroupQuadSwapHorizontal(data[3].u64);

+

+    data[invocation].u64.x   = subgroupQuadSwapVertical(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupQuadSwapVertical(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupQuadSwapVertical(data[2].u64.xyz);

+    data[invocation].u64     = subgroupQuadSwapVertical(data[3].u64);

+

+    data[invocation].u64.x   = subgroupQuadSwapDiagonal(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupQuadSwapDiagonal(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupQuadSwapDiagonal(data[2].u64.xyz);

+    data[invocation].u64     = subgroupQuadSwapDiagonal(data[3].u64);

+

+    data[invocation].f16.x   = subgroupQuadBroadcast(data[0].f16.x, 1);

+    data[invocation].f16.xy  = subgroupQuadBroadcast(data[1].f16.xy, 1);

+    data[invocation].f16.xyz = subgroupQuadBroadcast(data[2].f16.xyz, 1);

+    data[invocation].f16     = subgroupQuadBroadcast(data[3].f16, 1);

+

+    data[invocation].f16.x   = subgroupQuadSwapHorizontal(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupQuadSwapHorizontal(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupQuadSwapHorizontal(data[2].f16.xyz);

+    data[invocation].f16     = subgroupQuadSwapHorizontal(data[3].f16);

+

+    data[invocation].f16.x   = subgroupQuadSwapVertical(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupQuadSwapVertical(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupQuadSwapVertical(data[2].f16.xyz);

+    data[invocation].f16     = subgroupQuadSwapVertical(data[3].f16);

+

+    data[invocation].f16.x   = subgroupQuadSwapDiagonal(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupQuadSwapDiagonal(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupQuadSwapDiagonal(data[2].f16.xyz);

+    data[invocation].f16     = subgroupQuadSwapDiagonal(data[3].f16);

+}

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

+

+#extension GL_KHR_shader_subgroup_quad: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].i8.x   = subgroupQuadBroadcast(data[0].i8.x, 1);

+    data[invocation].i8.xy  = subgroupQuadBroadcast(data[1].i8.xy, 1);

+    data[invocation].i8.xyz = subgroupQuadBroadcast(data[2].i8.xyz, 1);

+    data[invocation].i8     = subgroupQuadBroadcast(data[3].i8, 1);

+

+    data[invocation].i8.x   = subgroupQuadSwapHorizontal(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupQuadSwapHorizontal(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupQuadSwapHorizontal(data[2].i8.xyz);

+    data[invocation].i8     = subgroupQuadSwapHorizontal(data[3].i8);

+

+    data[invocation].i8.x   = subgroupQuadSwapVertical(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupQuadSwapVertical(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupQuadSwapVertical(data[2].i8.xyz);

+    data[invocation].i8     = subgroupQuadSwapVertical(data[3].i8);

+

+    data[invocation].i8.x   = subgroupQuadSwapDiagonal(data[0].i8.x);

+    data[invocation].i8.xy  = subgroupQuadSwapDiagonal(data[1].i8.xy);

+    data[invocation].i8.xyz = subgroupQuadSwapDiagonal(data[2].i8.xyz);

+    data[invocation].i8     = subgroupQuadSwapDiagonal(data[3].i8);

+

+    data[invocation].u8.x   = subgroupQuadBroadcast(data[0].u8.x, 1);

+    data[invocation].u8.xy  = subgroupQuadBroadcast(data[1].u8.xy, 1);

+    data[invocation].u8.xyz = subgroupQuadBroadcast(data[2].u8.xyz, 1);

+    data[invocation].u8     = subgroupQuadBroadcast(data[3].u8, 1);

+

+    data[invocation].u8.x   = subgroupQuadSwapHorizontal(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupQuadSwapHorizontal(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupQuadSwapHorizontal(data[2].u8.xyz);

+    data[invocation].u8     = subgroupQuadSwapHorizontal(data[3].u8);

+

+    data[invocation].u8.x   = subgroupQuadSwapVertical(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupQuadSwapVertical(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupQuadSwapVertical(data[2].u8.xyz);

+    data[invocation].u8     = subgroupQuadSwapVertical(data[3].u8);

+

+    data[invocation].u8.x   = subgroupQuadSwapDiagonal(data[0].u8.x);

+    data[invocation].u8.xy  = subgroupQuadSwapDiagonal(data[1].u8.xy);

+    data[invocation].u8.xyz = subgroupQuadSwapDiagonal(data[2].u8.xyz);

+    data[invocation].u8     = subgroupQuadSwapDiagonal(data[3].u8);

+

+    data[invocation].i16.x   = subgroupQuadBroadcast(data[0].i16.x, 1);

+    data[invocation].i16.xy  = subgroupQuadBroadcast(data[1].i16.xy, 1);

+    data[invocation].i16.xyz = subgroupQuadBroadcast(data[2].i16.xyz, 1);

+    data[invocation].i16     = subgroupQuadBroadcast(data[3].i16, 1);

+

+    data[invocation].i16.x   = subgroupQuadSwapHorizontal(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupQuadSwapHorizontal(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupQuadSwapHorizontal(data[2].i16.xyz);

+    data[invocation].i16     = subgroupQuadSwapHorizontal(data[3].i16);

+

+    data[invocation].i16.x   = subgroupQuadSwapVertical(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupQuadSwapVertical(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupQuadSwapVertical(data[2].i16.xyz);

+    data[invocation].i16     = subgroupQuadSwapVertical(data[3].i16);

+

+    data[invocation].i16.x   = subgroupQuadSwapDiagonal(data[0].i16.x);

+    data[invocation].i16.xy  = subgroupQuadSwapDiagonal(data[1].i16.xy);

+    data[invocation].i16.xyz = subgroupQuadSwapDiagonal(data[2].i16.xyz);

+    data[invocation].i16     = subgroupQuadSwapDiagonal(data[3].i16);

+

+    data[invocation].u16.x   = subgroupQuadBroadcast(data[0].u16.x, 1);

+    data[invocation].u16.xy  = subgroupQuadBroadcast(data[1].u16.xy, 1);

+    data[invocation].u16.xyz = subgroupQuadBroadcast(data[2].u16.xyz, 1);

+    data[invocation].u16     = subgroupQuadBroadcast(data[3].u16, 1);

+

+    data[invocation].u16.x   = subgroupQuadSwapHorizontal(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupQuadSwapHorizontal(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupQuadSwapHorizontal(data[2].u16.xyz);

+    data[invocation].u16     = subgroupQuadSwapHorizontal(data[3].u16);

+

+    data[invocation].u16.x   = subgroupQuadSwapVertical(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupQuadSwapVertical(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupQuadSwapVertical(data[2].u16.xyz);

+    data[invocation].u16     = subgroupQuadSwapVertical(data[3].u16);

+

+    data[invocation].u16.x   = subgroupQuadSwapDiagonal(data[0].u16.x);

+    data[invocation].u16.xy  = subgroupQuadSwapDiagonal(data[1].u16.xy);

+    data[invocation].u16.xyz = subgroupQuadSwapDiagonal(data[2].u16.xyz);

+    data[invocation].u16     = subgroupQuadSwapDiagonal(data[3].u16);

+

+    data[invocation].i64.x   = subgroupQuadBroadcast(data[0].i64.x, 1);

+    data[invocation].i64.xy  = subgroupQuadBroadcast(data[1].i64.xy, 1);

+    data[invocation].i64.xyz = subgroupQuadBroadcast(data[2].i64.xyz, 1);

+    data[invocation].i64     = subgroupQuadBroadcast(data[3].i64, 1);

+

+    data[invocation].i64.x   = subgroupQuadSwapHorizontal(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupQuadSwapHorizontal(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupQuadSwapHorizontal(data[2].i64.xyz);

+    data[invocation].i64     = subgroupQuadSwapHorizontal(data[3].i64);

+

+    data[invocation].i64.x   = subgroupQuadSwapVertical(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupQuadSwapVertical(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupQuadSwapVertical(data[2].i64.xyz);

+    data[invocation].i64     = subgroupQuadSwapVertical(data[3].i64);

+

+    data[invocation].i64.x   = subgroupQuadSwapDiagonal(data[0].i64.x);

+    data[invocation].i64.xy  = subgroupQuadSwapDiagonal(data[1].i64.xy);

+    data[invocation].i64.xyz = subgroupQuadSwapDiagonal(data[2].i64.xyz);

+    data[invocation].i64     = subgroupQuadSwapDiagonal(data[3].i64);

+

+    data[invocation].u64.x   = subgroupQuadBroadcast(data[0].u64.x, 1);

+    data[invocation].u64.xy  = subgroupQuadBroadcast(data[1].u64.xy, 1);

+    data[invocation].u64.xyz = subgroupQuadBroadcast(data[2].u64.xyz, 1);

+    data[invocation].u64     = subgroupQuadBroadcast(data[3].u64, 1);

+

+    data[invocation].u64.x   = subgroupQuadSwapHorizontal(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupQuadSwapHorizontal(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupQuadSwapHorizontal(data[2].u64.xyz);

+    data[invocation].u64     = subgroupQuadSwapHorizontal(data[3].u64);

+

+    data[invocation].u64.x   = subgroupQuadSwapVertical(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupQuadSwapVertical(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupQuadSwapVertical(data[2].u64.xyz);

+    data[invocation].u64     = subgroupQuadSwapVertical(data[3].u64);

+

+    data[invocation].u64.x   = subgroupQuadSwapDiagonal(data[0].u64.x);

+    data[invocation].u64.xy  = subgroupQuadSwapDiagonal(data[1].u64.xy);

+    data[invocation].u64.xyz = subgroupQuadSwapDiagonal(data[2].u64.xyz);

+    data[invocation].u64     = subgroupQuadSwapDiagonal(data[3].u64);

+

+    data[invocation].f16.x   = subgroupQuadBroadcast(data[0].f16.x, 1);

+    data[invocation].f16.xy  = subgroupQuadBroadcast(data[1].f16.xy, 1);

+    data[invocation].f16.xyz = subgroupQuadBroadcast(data[2].f16.xyz, 1);

+    data[invocation].f16     = subgroupQuadBroadcast(data[3].f16, 1);

+

+    data[invocation].f16.x   = subgroupQuadSwapHorizontal(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupQuadSwapHorizontal(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupQuadSwapHorizontal(data[2].f16.xyz);

+    data[invocation].f16     = subgroupQuadSwapHorizontal(data[3].f16);

+

+    data[invocation].f16.x   = subgroupQuadSwapVertical(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupQuadSwapVertical(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupQuadSwapVertical(data[2].f16.xyz);

+    data[invocation].f16     = subgroupQuadSwapVertical(data[3].f16);

+

+    data[invocation].f16.x   = subgroupQuadSwapDiagonal(data[0].f16.x);

+    data[invocation].f16.xy  = subgroupQuadSwapDiagonal(data[1].f16.xy);

+    data[invocation].f16.xyz = subgroupQuadSwapDiagonal(data[2].f16.xyz);

+    data[invocation].f16     = subgroupQuadSwapDiagonal(data[3].f16);

+}

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

+

+#extension GL_KHR_shader_subgroup_shuffle: enable

+#extension GL_EXT_shader_subgroup_extended_types_int8: enable

+#extension GL_EXT_shader_subgroup_extended_types_int16: enable

+#extension GL_EXT_shader_subgroup_extended_types_int64: enable

+#extension GL_EXT_shader_subgroup_extended_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].i8.x   = subgroupShuffle(data[0].i8.x,    invocation);

+    data[invocation].i8.xy  = subgroupShuffle(data[1].i8.xy,   invocation);

+    data[invocation].i8.xyz = subgroupShuffle(data[2].i8.xyz,  invocation);

+    data[invocation].i8     = subgroupShuffle(data[3].i8,      invocation);

+

+    data[invocation].i8.x   = subgroupShuffleXor(data[0].i8.x,    invocation);

+    data[invocation].i8.xy  = subgroupShuffleXor(data[1].i8.xy,   invocation);

+    data[invocation].i8.xyz = subgroupShuffleXor(data[2].i8.xyz,  invocation);

+    data[invocation].i8     = subgroupShuffleXor(data[3].i8,      invocation);

+

+    data[invocation].u8.x   = subgroupShuffle(data[0].u8.x,    invocation);

+    data[invocation].u8.xy  = subgroupShuffle(data[1].u8.xy,   invocation);

+    data[invocation].u8.xyz = subgroupShuffle(data[2].u8.xyz,  invocation);

+    data[invocation].u8     = subgroupShuffle(data[3].u8,      invocation);

+

+    data[invocation].u8.x   = subgroupShuffleXor(data[0].u8.x,    invocation);

+    data[invocation].u8.xy  = subgroupShuffleXor(data[1].u8.xy,   invocation);

+    data[invocation].u8.xyz = subgroupShuffleXor(data[2].u8.xyz,  invocation);

+    data[invocation].u8     = subgroupShuffleXor(data[3].u8,      invocation);

+

+    data[invocation].i16.x   = subgroupShuffle(data[0].i16.x,    invocation);

+    data[invocation].i16.xy  = subgroupShuffle(data[1].i16.xy,   invocation);

+    data[invocation].i16.xyz = subgroupShuffle(data[2].i16.xyz,  invocation);

+    data[invocation].i16     = subgroupShuffle(data[3].i16,      invocation);

+

+    data[invocation].i16.x   = subgroupShuffleXor(data[0].i16.x,    invocation);

+    data[invocation].i16.xy  = subgroupShuffleXor(data[1].i16.xy,   invocation);

+    data[invocation].i16.xyz = subgroupShuffleXor(data[2].i16.xyz,  invocation);

+    data[invocation].i16     = subgroupShuffleXor(data[3].i16,      invocation);

+

+    data[invocation].u16.x   = subgroupShuffle(data[0].u16.x,    invocation);

+    data[invocation].u16.xy  = subgroupShuffle(data[1].u16.xy,   invocation);

+    data[invocation].u16.xyz = subgroupShuffle(data[2].u16.xyz,  invocation);

+    data[invocation].u16     = subgroupShuffle(data[3].u16,      invocation);

+

+    data[invocation].u16.x   = subgroupShuffleXor(data[0].u16.x,    invocation);

+    data[invocation].u16.xy  = subgroupShuffleXor(data[1].u16.xy,   invocation);

+    data[invocation].u16.xyz = subgroupShuffleXor(data[2].u16.xyz,  invocation);

+    data[invocation].u16     = subgroupShuffleXor(data[3].u16,      invocation);

+

+    data[invocation].i64.x   = subgroupShuffle(data[0].i64.x,    invocation);

+    data[invocation].i64.xy  = subgroupShuffle(data[1].i64.xy,   invocation);

+    data[invocation].i64.xyz = subgroupShuffle(data[2].i64.xyz,  invocation);

+    data[invocation].i64     = subgroupShuffle(data[3].i64,      invocation);

+

+    data[invocation].i64.x   = subgroupShuffleXor(data[0].i64.x,    invocation);

+    data[invocation].i64.xy  = subgroupShuffleXor(data[1].i64.xy,   invocation);

+    data[invocation].i64.xyz = subgroupShuffleXor(data[2].i64.xyz,  invocation);

+    data[invocation].i64     = subgroupShuffleXor(data[3].i64,      invocation);

+

+    data[invocation].u64.x   = subgroupShuffle(data[0].u64.x,    invocation);

+    data[invocation].u64.xy  = subgroupShuffle(data[1].u64.xy,   invocation);

+    data[invocation].u64.xyz = subgroupShuffle(data[2].u64.xyz,  invocation);

+    data[invocation].u64     = subgroupShuffle(data[3].u64,      invocation);

+

+    data[invocation].u64.x   = subgroupShuffleXor(data[0].u64.x,    invocation);

+    data[invocation].u64.xy  = subgroupShuffleXor(data[1].u64.xy,   invocation);

+    data[invocation].u64.xyz = subgroupShuffleXor(data[2].u64.xyz,  invocation);

+    data[invocation].u64     = subgroupShuffleXor(data[3].u64,      invocation);

+

+    data[invocation].f16.x   = subgroupShuffle(data[0].f16.x,    invocation);

+    data[invocation].f16.xy  = subgroupShuffle(data[1].f16.xy,   invocation);

+    data[invocation].f16.xyz = subgroupShuffle(data[2].f16.xyz,  invocation);

+    data[invocation].f16     = subgroupShuffle(data[3].f16,      invocation);

+

+    data[invocation].f16.x   = subgroupShuffleXor(data[0].f16.x,    invocation);

+    data[invocation].f16.xy  = subgroupShuffleXor(data[1].f16.xy,   invocation);

+    data[invocation].f16.xyz = subgroupShuffleXor(data[2].f16.xyz,  invocation);

+    data[invocation].f16     = subgroupShuffleXor(data[3].f16,      invocation);

+}

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

+

+#extension GL_KHR_shader_subgroup_shuffle: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].i8.x   = subgroupShuffle(data[0].i8.x,    invocation);

+    data[invocation].i8.xy  = subgroupShuffle(data[1].i8.xy,   invocation);

+    data[invocation].i8.xyz = subgroupShuffle(data[2].i8.xyz,  invocation);

+    data[invocation].i8     = subgroupShuffle(data[3].i8,      invocation);

+

+    data[invocation].i8.x   = subgroupShuffleXor(data[0].i8.x,    invocation);

+    data[invocation].i8.xy  = subgroupShuffleXor(data[1].i8.xy,   invocation);

+    data[invocation].i8.xyz = subgroupShuffleXor(data[2].i8.xyz,  invocation);

+    data[invocation].i8     = subgroupShuffleXor(data[3].i8,      invocation);

+

+    data[invocation].u8.x   = subgroupShuffle(data[0].u8.x,    invocation);

+    data[invocation].u8.xy  = subgroupShuffle(data[1].u8.xy,   invocation);

+    data[invocation].u8.xyz = subgroupShuffle(data[2].u8.xyz,  invocation);

+    data[invocation].u8     = subgroupShuffle(data[3].u8,      invocation);

+

+    data[invocation].u8.x   = subgroupShuffleXor(data[0].u8.x,    invocation);

+    data[invocation].u8.xy  = subgroupShuffleXor(data[1].u8.xy,   invocation);

+    data[invocation].u8.xyz = subgroupShuffleXor(data[2].u8.xyz,  invocation);

+    data[invocation].u8     = subgroupShuffleXor(data[3].u8,      invocation);

+

+    data[invocation].i16.x   = subgroupShuffle(data[0].i16.x,    invocation);

+    data[invocation].i16.xy  = subgroupShuffle(data[1].i16.xy,   invocation);

+    data[invocation].i16.xyz = subgroupShuffle(data[2].i16.xyz,  invocation);

+    data[invocation].i16     = subgroupShuffle(data[3].i16,      invocation);

+

+    data[invocation].i16.x   = subgroupShuffleXor(data[0].i16.x,    invocation);

+    data[invocation].i16.xy  = subgroupShuffleXor(data[1].i16.xy,   invocation);

+    data[invocation].i16.xyz = subgroupShuffleXor(data[2].i16.xyz,  invocation);

+    data[invocation].i16     = subgroupShuffleXor(data[3].i16,      invocation);

+

+    data[invocation].u16.x   = subgroupShuffle(data[0].u16.x,    invocation);

+    data[invocation].u16.xy  = subgroupShuffle(data[1].u16.xy,   invocation);

+    data[invocation].u16.xyz = subgroupShuffle(data[2].u16.xyz,  invocation);

+    data[invocation].u16     = subgroupShuffle(data[3].u16,      invocation);

+

+    data[invocation].u16.x   = subgroupShuffleXor(data[0].u16.x,    invocation);

+    data[invocation].u16.xy  = subgroupShuffleXor(data[1].u16.xy,   invocation);

+    data[invocation].u16.xyz = subgroupShuffleXor(data[2].u16.xyz,  invocation);

+    data[invocation].u16     = subgroupShuffleXor(data[3].u16,      invocation);

+

+    data[invocation].i64.x   = subgroupShuffle(data[0].i64.x,    invocation);

+    data[invocation].i64.xy  = subgroupShuffle(data[1].i64.xy,   invocation);

+    data[invocation].i64.xyz = subgroupShuffle(data[2].i64.xyz,  invocation);

+    data[invocation].i64     = subgroupShuffle(data[3].i64,      invocation);

+

+    data[invocation].i64.x   = subgroupShuffleXor(data[0].i64.x,    invocation);

+    data[invocation].i64.xy  = subgroupShuffleXor(data[1].i64.xy,   invocation);

+    data[invocation].i64.xyz = subgroupShuffleXor(data[2].i64.xyz,  invocation);

+    data[invocation].i64     = subgroupShuffleXor(data[3].i64,      invocation);

+

+    data[invocation].u64.x   = subgroupShuffle(data[0].u64.x,    invocation);

+    data[invocation].u64.xy  = subgroupShuffle(data[1].u64.xy,   invocation);

+    data[invocation].u64.xyz = subgroupShuffle(data[2].u64.xyz,  invocation);

+    data[invocation].u64     = subgroupShuffle(data[3].u64,      invocation);

+

+    data[invocation].u64.x   = subgroupShuffleXor(data[0].u64.x,    invocation);

+    data[invocation].u64.xy  = subgroupShuffleXor(data[1].u64.xy,   invocation);

+    data[invocation].u64.xyz = subgroupShuffleXor(data[2].u64.xyz,  invocation);

+    data[invocation].u64     = subgroupShuffleXor(data[3].u64,      invocation);

+

+    data[invocation].f16.x   = subgroupShuffle(data[0].f16.x,    invocation);

+    data[invocation].f16.xy  = subgroupShuffle(data[1].f16.xy,   invocation);

+    data[invocation].f16.xyz = subgroupShuffle(data[2].f16.xyz,  invocation);

+    data[invocation].f16     = subgroupShuffle(data[3].f16,      invocation);

+

+    data[invocation].f16.x   = subgroupShuffleXor(data[0].f16.x,    invocation);

+    data[invocation].f16.xy  = subgroupShuffleXor(data[1].f16.xy,   invocation);

+    data[invocation].f16.xyz = subgroupShuffleXor(data[2].f16.xyz,  invocation);

+    data[invocation].f16     = subgroupShuffleXor(data[3].f16,      invocation);

+}

diff --git a/Test/spv.subgroupExtendedTypesShuffleRelative.comp b/Test/spv.subgroupExtendedTypesShuffleRelative.comp
new file mode 100644
index 0000000..73f5970
--- /dev/null
+++ b/Test/spv.subgroupExtendedTypesShuffleRelative.comp
@@ -0,0 +1,95 @@
+#version 450

+

+#extension GL_KHR_shader_subgroup_shuffle_relative: enable

+#extension GL_EXT_shader_subgroup_extended_types_int8: enable

+#extension GL_EXT_shader_subgroup_extended_types_int16: enable

+#extension GL_EXT_shader_subgroup_extended_types_int64: enable

+#extension GL_EXT_shader_subgroup_extended_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].i8.x   = subgroupShuffleUp(data[0].i8.x,    invocation);

+    data[invocation].i8.xy  = subgroupShuffleUp(data[1].i8.xy,   invocation);

+    data[invocation].i8.xyz = subgroupShuffleUp(data[2].i8.xyz,  invocation);

+    data[invocation].i8     = subgroupShuffleUp(data[3].i8,      invocation);

+

+    data[invocation].i8.x   = subgroupShuffleDown(data[0].i8.x,    invocation);

+    data[invocation].i8.xy  = subgroupShuffleDown(data[1].i8.xy,   invocation);

+    data[invocation].i8.xyz = subgroupShuffleDown(data[2].i8.xyz,  invocation);

+    data[invocation].i8     = subgroupShuffleDown(data[3].i8,      invocation);

+

+    data[invocation].u8.x   = subgroupShuffleUp(data[0].u8.x,    invocation);

+    data[invocation].u8.xy  = subgroupShuffleUp(data[1].u8.xy,   invocation);

+    data[invocation].u8.xyz = subgroupShuffleUp(data[2].u8.xyz,  invocation);

+    data[invocation].u8     = subgroupShuffleUp(data[3].u8,      invocation);

+

+    data[invocation].u8.x   = subgroupShuffleDown(data[0].u8.x,    invocation);

+    data[invocation].u8.xy  = subgroupShuffleDown(data[1].u8.xy,   invocation);

+    data[invocation].u8.xyz = subgroupShuffleDown(data[2].u8.xyz,  invocation);

+    data[invocation].u8     = subgroupShuffleDown(data[3].u8,      invocation);

+

+    data[invocation].i16.x   = subgroupShuffleUp(data[0].i16.x,    invocation);

+    data[invocation].i16.xy  = subgroupShuffleUp(data[1].i16.xy,   invocation);

+    data[invocation].i16.xyz = subgroupShuffleUp(data[2].i16.xyz,  invocation);

+    data[invocation].i16     = subgroupShuffleUp(data[3].i16,      invocation);

+

+    data[invocation].i16.x   = subgroupShuffleDown(data[0].i16.x,    invocation);

+    data[invocation].i16.xy  = subgroupShuffleDown(data[1].i16.xy,   invocation);

+    data[invocation].i16.xyz = subgroupShuffleDown(data[2].i16.xyz,  invocation);

+    data[invocation].i16     = subgroupShuffleDown(data[3].i16,      invocation);

+

+    data[invocation].u16.x   = subgroupShuffleUp(data[0].u16.x,    invocation);

+    data[invocation].u16.xy  = subgroupShuffleUp(data[1].u16.xy,   invocation);

+    data[invocation].u16.xyz = subgroupShuffleUp(data[2].u16.xyz,  invocation);

+    data[invocation].u16     = subgroupShuffleUp(data[3].u16,      invocation);

+

+    data[invocation].u16.x   = subgroupShuffleDown(data[0].u16.x,    invocation);

+    data[invocation].u16.xy  = subgroupShuffleDown(data[1].u16.xy,   invocation);

+    data[invocation].u16.xyz = subgroupShuffleDown(data[2].u16.xyz,  invocation);

+    data[invocation].u16     = subgroupShuffleDown(data[3].u16,      invocation);

+

+    data[invocation].i64.x   = subgroupShuffleUp(data[0].i64.x,    invocation);

+    data[invocation].i64.xy  = subgroupShuffleUp(data[1].i64.xy,   invocation);

+    data[invocation].i64.xyz = subgroupShuffleUp(data[2].i64.xyz,  invocation);

+    data[invocation].i64     = subgroupShuffleUp(data[3].i64,      invocation);

+

+    data[invocation].i64.x   = subgroupShuffleDown(data[0].i64.x,    invocation);

+    data[invocation].i64.xy  = subgroupShuffleDown(data[1].i64.xy,   invocation);

+    data[invocation].i64.xyz = subgroupShuffleDown(data[2].i64.xyz,  invocation);

+    data[invocation].i64     = subgroupShuffleDown(data[3].i64,      invocation);

+

+    data[invocation].u64.x   = subgroupShuffleUp(data[0].u64.x,    invocation);

+    data[invocation].u64.xy  = subgroupShuffleUp(data[1].u64.xy,   invocation);

+    data[invocation].u64.xyz = subgroupShuffleUp(data[2].u64.xyz,  invocation);

+    data[invocation].u64     = subgroupShuffleUp(data[3].u64,      invocation);

+

+    data[invocation].u64.x   = subgroupShuffleDown(data[0].u64.x,    invocation);

+    data[invocation].u64.xy  = subgroupShuffleDown(data[1].u64.xy,   invocation);

+    data[invocation].u64.xyz = subgroupShuffleDown(data[2].u64.xyz,  invocation);

+    data[invocation].u64     = subgroupShuffleDown(data[3].u64,      invocation);

+

+    data[invocation].f16.x   = subgroupShuffleUp(data[0].f16.x,    invocation);

+    data[invocation].f16.xy  = subgroupShuffleUp(data[1].f16.xy,   invocation);

+    data[invocation].f16.xyz = subgroupShuffleUp(data[2].f16.xyz,  invocation);

+    data[invocation].f16     = subgroupShuffleUp(data[3].f16,      invocation);

+

+    data[invocation].f16.x   = subgroupShuffleDown(data[0].f16.x,    invocation);

+    data[invocation].f16.xy  = subgroupShuffleDown(data[1].f16.xy,   invocation);

+    data[invocation].f16.xyz = subgroupShuffleDown(data[2].f16.xyz,  invocation);

+    data[invocation].f16     = subgroupShuffleDown(data[3].f16,      invocation);

+}

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

+

+#extension GL_KHR_shader_subgroup_shuffle_relative: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    data[invocation].i8.x   = subgroupShuffleUp(data[0].i8.x,    invocation);

+    data[invocation].i8.xy  = subgroupShuffleUp(data[1].i8.xy,   invocation);

+    data[invocation].i8.xyz = subgroupShuffleUp(data[2].i8.xyz,  invocation);

+    data[invocation].i8     = subgroupShuffleUp(data[3].i8,      invocation);

+

+    data[invocation].i8.x   = subgroupShuffleDown(data[0].i8.x,    invocation);

+    data[invocation].i8.xy  = subgroupShuffleDown(data[1].i8.xy,   invocation);

+    data[invocation].i8.xyz = subgroupShuffleDown(data[2].i8.xyz,  invocation);

+    data[invocation].i8     = subgroupShuffleDown(data[3].i8,      invocation);

+

+    data[invocation].u8.x   = subgroupShuffleUp(data[0].u8.x,    invocation);

+    data[invocation].u8.xy  = subgroupShuffleUp(data[1].u8.xy,   invocation);

+    data[invocation].u8.xyz = subgroupShuffleUp(data[2].u8.xyz,  invocation);

+    data[invocation].u8     = subgroupShuffleUp(data[3].u8,      invocation);

+

+    data[invocation].u8.x   = subgroupShuffleDown(data[0].u8.x,    invocation);

+    data[invocation].u8.xy  = subgroupShuffleDown(data[1].u8.xy,   invocation);

+    data[invocation].u8.xyz = subgroupShuffleDown(data[2].u8.xyz,  invocation);

+    data[invocation].u8     = subgroupShuffleDown(data[3].u8,      invocation);

+

+    data[invocation].i16.x   = subgroupShuffleUp(data[0].i16.x,    invocation);

+    data[invocation].i16.xy  = subgroupShuffleUp(data[1].i16.xy,   invocation);

+    data[invocation].i16.xyz = subgroupShuffleUp(data[2].i16.xyz,  invocation);

+    data[invocation].i16     = subgroupShuffleUp(data[3].i16,      invocation);

+

+    data[invocation].i16.x   = subgroupShuffleDown(data[0].i16.x,    invocation);

+    data[invocation].i16.xy  = subgroupShuffleDown(data[1].i16.xy,   invocation);

+    data[invocation].i16.xyz = subgroupShuffleDown(data[2].i16.xyz,  invocation);

+    data[invocation].i16     = subgroupShuffleDown(data[3].i16,      invocation);

+

+    data[invocation].u16.x   = subgroupShuffleUp(data[0].u16.x,    invocation);

+    data[invocation].u16.xy  = subgroupShuffleUp(data[1].u16.xy,   invocation);

+    data[invocation].u16.xyz = subgroupShuffleUp(data[2].u16.xyz,  invocation);

+    data[invocation].u16     = subgroupShuffleUp(data[3].u16,      invocation);

+

+    data[invocation].u16.x   = subgroupShuffleDown(data[0].u16.x,    invocation);

+    data[invocation].u16.xy  = subgroupShuffleDown(data[1].u16.xy,   invocation);

+    data[invocation].u16.xyz = subgroupShuffleDown(data[2].u16.xyz,  invocation);

+    data[invocation].u16     = subgroupShuffleDown(data[3].u16,      invocation);

+

+    data[invocation].i64.x   = subgroupShuffleUp(data[0].i64.x,    invocation);

+    data[invocation].i64.xy  = subgroupShuffleUp(data[1].i64.xy,   invocation);

+    data[invocation].i64.xyz = subgroupShuffleUp(data[2].i64.xyz,  invocation);

+    data[invocation].i64     = subgroupShuffleUp(data[3].i64,      invocation);

+

+    data[invocation].i64.x   = subgroupShuffleDown(data[0].i64.x,    invocation);

+    data[invocation].i64.xy  = subgroupShuffleDown(data[1].i64.xy,   invocation);

+    data[invocation].i64.xyz = subgroupShuffleDown(data[2].i64.xyz,  invocation);

+    data[invocation].i64     = subgroupShuffleDown(data[3].i64,      invocation);

+

+    data[invocation].u64.x   = subgroupShuffleUp(data[0].u64.x,    invocation);

+    data[invocation].u64.xy  = subgroupShuffleUp(data[1].u64.xy,   invocation);

+    data[invocation].u64.xyz = subgroupShuffleUp(data[2].u64.xyz,  invocation);

+    data[invocation].u64     = subgroupShuffleUp(data[3].u64,      invocation);

+

+    data[invocation].u64.x   = subgroupShuffleDown(data[0].u64.x,    invocation);

+    data[invocation].u64.xy  = subgroupShuffleDown(data[1].u64.xy,   invocation);

+    data[invocation].u64.xyz = subgroupShuffleDown(data[2].u64.xyz,  invocation);

+    data[invocation].u64     = subgroupShuffleDown(data[3].u64,      invocation);

+

+    data[invocation].f16.x   = subgroupShuffleUp(data[0].f16.x,    invocation);

+    data[invocation].f16.xy  = subgroupShuffleUp(data[1].f16.xy,   invocation);

+    data[invocation].f16.xyz = subgroupShuffleUp(data[2].f16.xyz,  invocation);

+    data[invocation].f16     = subgroupShuffleUp(data[3].f16,      invocation);

+

+    data[invocation].f16.x   = subgroupShuffleDown(data[0].f16.x,    invocation);

+    data[invocation].f16.xy  = subgroupShuffleDown(data[1].f16.xy,   invocation);

+    data[invocation].f16.xyz = subgroupShuffleDown(data[2].f16.xyz,  invocation);

+    data[invocation].f16     = subgroupShuffleDown(data[3].f16,      invocation);

+}

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

+

+#extension GL_KHR_shader_subgroup_vote: enable

+#extension GL_EXT_shader_subgroup_extended_types_int8: enable

+#extension GL_EXT_shader_subgroup_extended_types_int16: enable

+#extension GL_EXT_shader_subgroup_extended_types_int64: enable

+#extension GL_EXT_shader_subgroup_extended_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+    int r;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    if (subgroupAll(data[invocation].r < 0))

+    {

+        data[invocation].r = int(subgroupAllEqual(data[0].i8.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].i8.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].i8.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].i8));

+

+        data[invocation].r = int(subgroupAllEqual(data[0].u8.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].u8.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].u8.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].u8));

+

+        data[invocation].r = int(subgroupAllEqual(data[0].i16.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].i16.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].i16.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].i16));

+

+        data[invocation].r = int(subgroupAllEqual(data[0].u16.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].u16.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].u16.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].u16));

+    }

+    else if (subgroupAny(data[invocation].r < 0))

+    {

+        data[invocation].r = int(subgroupAllEqual(data[0].i64.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].i64.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].i64.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].i64));

+        

+        data[invocation].r = int(subgroupAllEqual(data[0].u64.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].u64.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].u64.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].u64));

+        

+        data[invocation].r = int(subgroupAllEqual(data[0].f16.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].f16.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].f16.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].f16));

+    }

+}

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

+

+#extension GL_KHR_shader_subgroup_vote: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable

+

+layout (local_size_x = 8) in;

+

+layout(binding = 0) buffer Buffers

+{

+    i8vec4 i8;

+    u8vec4 u8;

+    i16vec4 i16;

+    u16vec4 u16;

+    i64vec4 i64;

+    u64vec4 u64;

+    f16vec4 f16;

+    int r;

+} data[4];

+

+void main()

+{

+    uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;

+

+    if (subgroupAll(data[invocation].r < 0))

+    {

+        data[invocation].r = int(subgroupAllEqual(data[0].i8.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].i8.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].i8.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].i8));

+

+        data[invocation].r = int(subgroupAllEqual(data[0].u8.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].u8.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].u8.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].u8));

+

+        data[invocation].r = int(subgroupAllEqual(data[0].i16.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].i16.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].i16.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].i16));

+

+        data[invocation].r = int(subgroupAllEqual(data[0].u16.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].u16.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].u16.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].u16));

+    }

+    else if (subgroupAny(data[invocation].r < 0))

+    {

+        data[invocation].r = int(subgroupAllEqual(data[0].i64.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].i64.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].i64.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].i64));

+        

+        data[invocation].r = int(subgroupAllEqual(data[0].u64.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].u64.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].u64.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].u64));

+        

+        data[invocation].r = int(subgroupAllEqual(data[0].f16.x));

+        data[invocation].r = int(subgroupAllEqual(data[1].f16.xy));

+        data[invocation].r = int(subgroupAllEqual(data[2].f16.xyz));

+        data[invocation].r = int(subgroupAllEqual(data[3].f16));

+    }

+}

diff --git a/Test/spv.volatileAtomic.comp b/Test/spv.volatileAtomic.comp
new file mode 100644
index 0000000..2b7e6c6
--- /dev/null
+++ b/Test/spv.volatileAtomic.comp
@@ -0,0 +1,8 @@
+#version 450 core

+

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

+

+void main()

+{

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

+}

diff --git a/WORKSPACE b/WORKSPACE
new file mode 100644
index 0000000..3c38e61
--- /dev/null
+++ b/WORKSPACE
@@ -0,0 +1,27 @@
+workspace(name = "org_khronos_glslang")
+load(
+    "@bazel_tools//tools/build_defs/repo:http.bzl",
+    "http_archive",
+)
+
+http_archive(
+    name = "com_google_googletest",
+    sha256 = "ef9e2e12e7bf115ee48b427ae171fc869eeaf1b532c0fcfd982f6a353d2471b4",
+    strip_prefix = "googletest-37ae1fc5e6be26f367d76c078beabd7024fed53a",
+    urls = ["https://github.com/google/googletest/archive/37ae1fc5e6be26f367d76c078beabd7024fed53a.zip"],  # 2018-07-16
+)
+
+http_archive(
+    name = "com_googlesource_code_re2",
+    sha256 = "b885bb965ab4b6cf8718bbb8154d8f6474cd00331481b6d3e390babb3532263e",
+    strip_prefix = "re2-e860767c86e577b87deadf24cc4567ea83c4f162/",
+    urls = ["https://github.com/google/re2/archive/e860767c86e577b87deadf24cc4567ea83c4f162.zip"],
+)
+
+http_archive(
+    name = "com_google_effcee",
+    build_file = "BUILD.effcee.bazel",
+    sha256 = "b0c21a01995fdf9792510566d78d5e7fe6f83cb4ba986eba691f4926f127cb34",
+    strip_prefix = "effcee-8f0a61dc95e0df18c18e0ac56d83b3fa9d2fe90b/",
+    urls = ["https://github.com/google/effcee/archive/8f0a61dc95e0df18c18e0ac56d83b3fa9d2fe90b.zip"],
+)
diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
index 73124c5..42df1d1 100644
--- a/glslang/CMakeLists.txt
+++ b/glslang/CMakeLists.txt
@@ -6,6 +6,10 @@
     message("unknown platform")
 endif(WIN32)
 
+if(EMSCRIPTEN OR ENABLE_GLSLANG_WEB)
+    add_subdirectory(OSDependent/Web)
+endif(EMSCRIPTEN OR ENABLE_GLSLANG_WEB)
+
 set(SOURCES
     MachineIndependent/glslang.m4
     MachineIndependent/glslang.y
@@ -78,7 +82,9 @@
 set_property(TARGET glslang PROPERTY FOLDER glslang)
 set_property(TARGET glslang PROPERTY POSITION_INDEPENDENT_CODE ON)
 target_link_libraries(glslang OGLCompiler OSDependent)
-target_include_directories(glslang PUBLIC ..)
+target_include_directories(glslang PUBLIC 
+	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
+	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 
 if(WIN32 AND BUILD_SHARED_LIBS)
     set_target_properties(glslang PROPERTIES PREFIX "")
@@ -98,14 +104,15 @@
 
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
-        install(TARGETS glslang
+        install(TARGETS glslang EXPORT glslangTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     else()
-        install(TARGETS glslang
+        install(TARGETS glslang EXPORT glslangTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
+	install(EXPORT glslangTargets DESTINATION lib/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
 
 if(ENABLE_GLSLANG_INSTALL)
@@ -114,16 +121,3 @@
         install(FILES ${file} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/${dir})
     endforeach()
 endif(ENABLE_GLSLANG_INSTALL)
-
-if(ENABLE_GLSLANG_WEB)
-    add_executable(glslang.js glslang.js.cpp)
-    glslang_set_link_args(glslang.js)
-    target_link_libraries(glslang.js glslang SPIRV)
-    if(EMSCRIPTEN)
-        set_target_properties(glslang.js PROPERTIES
-          OUTPUT_NAME "glslang"
-          SUFFIX ".js"
-          LINK_FLAGS "--bind -s EXPORT_NAME=\"glslangModule\"")
-        em_link_pre_js(glslang.js ${CMAKE_CURRENT_SOURCE_DIR}/glslang.pre.js)
-    endif(EMSCRIPTEN)
-endif(ENABLE_GLSLANG_WEB)
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index a419cb0..ef933b4 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -135,6 +135,8 @@
     bool isYuv()         const { return yuv; }
 #endif
     void setCombined(bool c) { combined = c; }
+    void setBasicType(TBasicType t) { type = t; }
+    TBasicType getBasicType()  const { return type; }
     bool isShadow()      const { return shadow; }
     bool isArrayed()     const { return arrayed; }
 
@@ -1195,6 +1197,7 @@
     TVertexOrder order;
     bool pointMode;
     int localSize[3];         // compute shader
+    bool localSizeNotDefault[3];        // compute shader
     int localSizeSpecId[3];   // compute shader specialization id for gl_WorkGroupSize
 #ifndef GLSLANG_WEB
     bool earlyFragmentTests;  // fragment input
@@ -1225,6 +1228,9 @@
         localSize[0] = 1;
         localSize[1] = 1;
         localSize[2] = 1;
+        localSizeNotDefault[0] = false;
+        localSizeNotDefault[1] = false;
+        localSizeNotDefault[2] = false;
         localSizeSpecId[0] = TQualifier::layoutNotSet;
         localSizeSpecId[1] = TQualifier::layoutNotSet;
         localSizeSpecId[2] = TQualifier::layoutNotSet;
@@ -1273,6 +1279,9 @@
                 localSize[i] = src.localSize[i];
         }
         for (int i = 0; i < 3; ++i) {
+            localSizeNotDefault[i] = src.localSizeNotDefault[i] || localSizeNotDefault[i];
+        }
+        for (int i = 0; i < 3; ++i) {
             if (src.localSizeSpecId[i] != TQualifier::layoutNotSet)
                 localSizeSpecId[i] = src.localSizeSpecId[i];
         }
@@ -2186,7 +2195,8 @@
     const TTypeList* getStruct() const { assert(isStruct()); return structure; }
     void setStruct(TTypeList* s) { assert(isStruct()); structure = s; }
     TTypeList* getWritableStruct() const { assert(isStruct()); return structure; }  // This should only be used when known to not be sharing with other threads
-
+    void setBasicType(const TBasicType& t) { basicType = t; }
+    
     int computeNumComponents() const
     {
         int components = 0;
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index 3a7405a..f966899 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -275,6 +275,10 @@
     EOpConvUint64ToPtr,
     EOpConvPtrToUint64,
 
+    // uvec2 <-> pointer
+    EOpConvUvec2ToPtr,
+    EOpConvPtrToUvec2,
+
     //
     // binary operations
     //
@@ -1185,6 +1189,7 @@
     virtual void traverse(TIntermTraverser*);
     TOperator getFlowOp() const { return flowOp; }
     TIntermTyped* getExpression() const { return expression; }
+    void setExpression(TIntermTyped* pExpression) { expression = pExpression; }
 protected:
     TOperator flowOp;
     TIntermTyped* expression;
diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
old mode 100755
new mode 100644
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 8ea58cc..2344d36 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -152,12 +152,12 @@
                                                   { EDesktopProfile, 0, 130, 0, nullptr },
                                                   { EBadProfile } };
     const Versioning* Es300Desktop130 = &Es300Desktop130Version[0];
-    
+
     const Versioning Es310Desktop430Version[] = { { EEsProfile,      0, 310, 0, nullptr },
                                                   { EDesktopProfile, 0, 430, 0, nullptr },
                                                   { EBadProfile } };
     const Versioning* Es310Desktop430 = &Es310Desktop430Version[0];
-    
+
     const Versioning Es310Desktop450Version[] = { { EEsProfile,      0, 310, 0, nullptr },
                                                   { EDesktopProfile, 0, 450, 0, nullptr },
                                                   { EBadProfile } };
@@ -357,7 +357,7 @@
 }
 
 // See if the tabled versioning information allows the current version.
-bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile, const SpvVersion& spvVersion)
+bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile, const SpvVersion& /* spVersion */)
 {
 #ifdef GLSLANG_WEB
     // all entries in table are valid
@@ -417,8 +417,7 @@
 }
 
 // Relate all tables of built-ins to the AST operators.
-void TBuiltIns::relateTabledBuiltins(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage stage,
-    TSymbolTable& symbolTable)
+void TBuiltIns::relateTabledBuiltins(int /* version */, EProfile /* profile */, const SpvVersion& /* spvVersion */, EShLanguage /* stage */, TSymbolTable& symbolTable)
 {
     RelateTabledBuiltins(BaseFunctions, symbolTable);
     RelateTabledBuiltins(DerivativeFunctions, symbolTable);
@@ -996,25 +995,25 @@
             "bvec3 notEqual(u64vec3, u64vec3);"
             "bvec4 notEqual(u64vec4, u64vec4);"
 
-            "int   findLSB(int64_t);"
-            "ivec2 findLSB(i64vec2);"
-            "ivec3 findLSB(i64vec3);"
-            "ivec4 findLSB(i64vec4);"
+            "int64_t findLSB(int64_t);"
+            "i64vec2 findLSB(i64vec2);"
+            "i64vec3 findLSB(i64vec3);"
+            "i64vec4 findLSB(i64vec4);"
 
-            "int   findLSB(uint64_t);"
-            "ivec2 findLSB(u64vec2);"
-            "ivec3 findLSB(u64vec3);"
-            "ivec4 findLSB(u64vec4);"
+            "int64_t findLSB(uint64_t);"
+            "i64vec2 findLSB(u64vec2);"
+            "i64vec3 findLSB(u64vec3);"
+            "i64vec4 findLSB(u64vec4);"
 
-            "int   findMSB(int64_t);"
-            "ivec2 findMSB(i64vec2);"
-            "ivec3 findMSB(i64vec3);"
-            "ivec4 findMSB(i64vec4);"
+            "int64_t findMSB(int64_t);"
+            "i64vec2 findMSB(i64vec2);"
+            "i64vec3 findMSB(i64vec3);"
+            "i64vec4 findMSB(i64vec4);"
 
-            "int   findMSB(uint64_t);"
-            "ivec2 findMSB(u64vec2);"
-            "ivec3 findMSB(u64vec3);"
-            "ivec4 findMSB(u64vec4);"
+            "int64_t findMSB(uint64_t);"
+            "i64vec2 findMSB(u64vec2);"
+            "i64vec3 findMSB(u64vec3);"
+            "i64vec4 findMSB(u64vec4);"
 
             "\n"
         );
@@ -1744,58 +1743,6 @@
 
             "bool   subgroupAll(bool);\n"
             "bool   subgroupAny(bool);\n"
-
-            "bool   subgroupAllEqual(float);\n"
-            "bool   subgroupAllEqual(vec2);\n"
-            "bool   subgroupAllEqual(vec3);\n"
-            "bool   subgroupAllEqual(vec4);\n"
-            "bool   subgroupAllEqual(int);\n"
-            "bool   subgroupAllEqual(ivec2);\n"
-            "bool   subgroupAllEqual(ivec3);\n"
-            "bool   subgroupAllEqual(ivec4);\n"
-            "bool   subgroupAllEqual(uint);\n"
-            "bool   subgroupAllEqual(uvec2);\n"
-            "bool   subgroupAllEqual(uvec3);\n"
-            "bool   subgroupAllEqual(uvec4);\n"
-            "bool   subgroupAllEqual(bool);\n"
-            "bool   subgroupAllEqual(bvec2);\n"
-            "bool   subgroupAllEqual(bvec3);\n"
-            "bool   subgroupAllEqual(bvec4);\n"
-
-            "float  subgroupBroadcast(float, uint);\n"
-            "vec2   subgroupBroadcast(vec2, uint);\n"
-            "vec3   subgroupBroadcast(vec3, uint);\n"
-            "vec4   subgroupBroadcast(vec4, uint);\n"
-            "int    subgroupBroadcast(int, uint);\n"
-            "ivec2  subgroupBroadcast(ivec2, uint);\n"
-            "ivec3  subgroupBroadcast(ivec3, uint);\n"
-            "ivec4  subgroupBroadcast(ivec4, uint);\n"
-            "uint   subgroupBroadcast(uint, uint);\n"
-            "uvec2  subgroupBroadcast(uvec2, uint);\n"
-            "uvec3  subgroupBroadcast(uvec3, uint);\n"
-            "uvec4  subgroupBroadcast(uvec4, uint);\n"
-            "bool   subgroupBroadcast(bool, uint);\n"
-            "bvec2  subgroupBroadcast(bvec2, uint);\n"
-            "bvec3  subgroupBroadcast(bvec3, uint);\n"
-            "bvec4  subgroupBroadcast(bvec4, uint);\n"
-
-            "float  subgroupBroadcastFirst(float);\n"
-            "vec2   subgroupBroadcastFirst(vec2);\n"
-            "vec3   subgroupBroadcastFirst(vec3);\n"
-            "vec4   subgroupBroadcastFirst(vec4);\n"
-            "int    subgroupBroadcastFirst(int);\n"
-            "ivec2  subgroupBroadcastFirst(ivec2);\n"
-            "ivec3  subgroupBroadcastFirst(ivec3);\n"
-            "ivec4  subgroupBroadcastFirst(ivec4);\n"
-            "uint   subgroupBroadcastFirst(uint);\n"
-            "uvec2  subgroupBroadcastFirst(uvec2);\n"
-            "uvec3  subgroupBroadcastFirst(uvec3);\n"
-            "uvec4  subgroupBroadcastFirst(uvec4);\n"
-            "bool   subgroupBroadcastFirst(bool);\n"
-            "bvec2  subgroupBroadcastFirst(bvec2);\n"
-            "bvec3  subgroupBroadcastFirst(bvec3);\n"
-            "bvec4  subgroupBroadcastFirst(bvec4);\n"
-
             "uvec4  subgroupBallot(bool);\n"
             "bool   subgroupInverseBallot(uvec4);\n"
             "bool   subgroupBallotBitExtract(uvec4, uint);\n"
@@ -1804,1002 +1751,130 @@
             "uint   subgroupBallotExclusiveBitCount(uvec4);\n"
             "uint   subgroupBallotFindLSB(uvec4);\n"
             "uint   subgroupBallotFindMSB(uvec4);\n"
+            );
 
-            "float  subgroupShuffle(float, uint);\n"
-            "vec2   subgroupShuffle(vec2, uint);\n"
-            "vec3   subgroupShuffle(vec3, uint);\n"
-            "vec4   subgroupShuffle(vec4, uint);\n"
-            "int    subgroupShuffle(int, uint);\n"
-            "ivec2  subgroupShuffle(ivec2, uint);\n"
-            "ivec3  subgroupShuffle(ivec3, uint);\n"
-            "ivec4  subgroupShuffle(ivec4, uint);\n"
-            "uint   subgroupShuffle(uint, uint);\n"
-            "uvec2  subgroupShuffle(uvec2, uint);\n"
-            "uvec3  subgroupShuffle(uvec3, uint);\n"
-            "uvec4  subgroupShuffle(uvec4, uint);\n"
-            "bool   subgroupShuffle(bool, uint);\n"
-            "bvec2  subgroupShuffle(bvec2, uint);\n"
-            "bvec3  subgroupShuffle(bvec3, uint);\n"
-            "bvec4  subgroupShuffle(bvec4, uint);\n"
+        // Generate all flavors of subgroup ops.
+        static const char *subgroupOps[] = 
+        {
+            "bool   subgroupAllEqual(%s);\n",
+            "%s     subgroupBroadcast(%s, uint);\n",
+            "%s     subgroupBroadcastFirst(%s);\n",
+            "%s     subgroupShuffle(%s, uint);\n",
+            "%s     subgroupShuffleXor(%s, uint);\n",
+            "%s     subgroupShuffleUp(%s, uint delta);\n",
+            "%s     subgroupShuffleDown(%s, uint delta);\n",
+            "%s     subgroupAdd(%s);\n",
+            "%s     subgroupMul(%s);\n",
+            "%s     subgroupMin(%s);\n",
+            "%s     subgroupMax(%s);\n",
+            "%s     subgroupAnd(%s);\n",
+            "%s     subgroupOr(%s);\n",
+            "%s     subgroupXor(%s);\n",
+            "%s     subgroupInclusiveAdd(%s);\n",
+            "%s     subgroupInclusiveMul(%s);\n",
+            "%s     subgroupInclusiveMin(%s);\n",
+            "%s     subgroupInclusiveMax(%s);\n",
+            "%s     subgroupInclusiveAnd(%s);\n",
+            "%s     subgroupInclusiveOr(%s);\n",
+            "%s     subgroupInclusiveXor(%s);\n",
+            "%s     subgroupExclusiveAdd(%s);\n",
+            "%s     subgroupExclusiveMul(%s);\n",
+            "%s     subgroupExclusiveMin(%s);\n",
+            "%s     subgroupExclusiveMax(%s);\n",
+            "%s     subgroupExclusiveAnd(%s);\n",
+            "%s     subgroupExclusiveOr(%s);\n",
+            "%s     subgroupExclusiveXor(%s);\n",
+            "%s     subgroupClusteredAdd(%s, uint);\n",
+            "%s     subgroupClusteredMul(%s, uint);\n",
+            "%s     subgroupClusteredMin(%s, uint);\n",
+            "%s     subgroupClusteredMax(%s, uint);\n",
+            "%s     subgroupClusteredAnd(%s, uint);\n",
+            "%s     subgroupClusteredOr(%s, uint);\n",
+            "%s     subgroupClusteredXor(%s, uint);\n",
+            "%s     subgroupQuadBroadcast(%s, uint);\n",
+            "%s     subgroupQuadSwapHorizontal(%s);\n",
+            "%s     subgroupQuadSwapVertical(%s);\n",
+            "%s     subgroupQuadSwapDiagonal(%s);\n",
+            "uvec4  subgroupPartitionNV(%s);\n",
+            "%s     subgroupPartitionedAddNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedMulNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedMinNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedMaxNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedAndNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedOrNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedXorNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedInclusiveAddNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedInclusiveMulNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedInclusiveMinNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedInclusiveMaxNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedInclusiveAndNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedInclusiveOrNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedInclusiveXorNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedExclusiveAddNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedExclusiveMulNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedExclusiveMinNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedExclusiveMaxNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedExclusiveAndNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedExclusiveOrNV(%s, uvec4 ballot);\n",
+            "%s     subgroupPartitionedExclusiveXorNV(%s, uvec4 ballot);\n",
+        };
 
-            "float  subgroupShuffleXor(float, uint);\n"
-            "vec2   subgroupShuffleXor(vec2, uint);\n"
-            "vec3   subgroupShuffleXor(vec3, uint);\n"
-            "vec4   subgroupShuffleXor(vec4, uint);\n"
-            "int    subgroupShuffleXor(int, uint);\n"
-            "ivec2  subgroupShuffleXor(ivec2, uint);\n"
-            "ivec3  subgroupShuffleXor(ivec3, uint);\n"
-            "ivec4  subgroupShuffleXor(ivec4, uint);\n"
-            "uint   subgroupShuffleXor(uint, uint);\n"
-            "uvec2  subgroupShuffleXor(uvec2, uint);\n"
-            "uvec3  subgroupShuffleXor(uvec3, uint);\n"
-            "uvec4  subgroupShuffleXor(uvec4, uint);\n"
-            "bool   subgroupShuffleXor(bool, uint);\n"
-            "bvec2  subgroupShuffleXor(bvec2, uint);\n"
-            "bvec3  subgroupShuffleXor(bvec3, uint);\n"
-            "bvec4  subgroupShuffleXor(bvec4, uint);\n"
+        static const char *floatTypes[] = { 
+            "float", "vec2", "vec3", "vec4", 
+            "float16_t", "f16vec2", "f16vec3", "f16vec4", 
+        };
+        static const char *doubleTypes[] = { 
+            "double", "dvec2", "dvec3", "dvec4", 
+        };
+        static const char *intTypes[] = { 
+            "int8_t", "i8vec2", "i8vec3", "i8vec4", 
+            "int16_t", "i16vec2", "i16vec3", "i16vec4", 
+            "int", "ivec2", "ivec3", "ivec4", 
+            "int64_t", "i64vec2", "i64vec3", "i64vec4", 
+            "uint8_t", "u8vec2", "u8vec3", "u8vec4", 
+            "uint16_t", "u16vec2", "u16vec3", "u16vec4", 
+            "uint", "uvec2", "uvec3", "uvec4", 
+            "uint64_t", "u64vec2", "u64vec3", "u64vec4", 
+        };
+        static const char *boolTypes[] = { 
+            "bool", "bvec2", "bvec3", "bvec4", 
+        };
 
-            "float  subgroupShuffleUp(float, uint delta);\n"
-            "vec2   subgroupShuffleUp(vec2, uint delta);\n"
-            "vec3   subgroupShuffleUp(vec3, uint delta);\n"
-            "vec4   subgroupShuffleUp(vec4, uint delta);\n"
-            "int    subgroupShuffleUp(int, uint delta);\n"
-            "ivec2  subgroupShuffleUp(ivec2, uint delta);\n"
-            "ivec3  subgroupShuffleUp(ivec3, uint delta);\n"
-            "ivec4  subgroupShuffleUp(ivec4, uint delta);\n"
-            "uint   subgroupShuffleUp(uint, uint delta);\n"
-            "uvec2  subgroupShuffleUp(uvec2, uint delta);\n"
-            "uvec3  subgroupShuffleUp(uvec3, uint delta);\n"
-            "uvec4  subgroupShuffleUp(uvec4, uint delta);\n"
-            "bool   subgroupShuffleUp(bool, uint delta);\n"
-            "bvec2  subgroupShuffleUp(bvec2, uint delta);\n"
-            "bvec3  subgroupShuffleUp(bvec3, uint delta);\n"
-            "bvec4  subgroupShuffleUp(bvec4, uint delta);\n"
+        for (size_t i = 0; i < sizeof(subgroupOps)/sizeof(subgroupOps[0]); ++i) {
+            const char *op = subgroupOps[i];
 
-            "float  subgroupShuffleDown(float, uint delta);\n"
-            "vec2   subgroupShuffleDown(vec2, uint delta);\n"
-            "vec3   subgroupShuffleDown(vec3, uint delta);\n"
-            "vec4   subgroupShuffleDown(vec4, uint delta);\n"
-            "int    subgroupShuffleDown(int, uint delta);\n"
-            "ivec2  subgroupShuffleDown(ivec2, uint delta);\n"
-            "ivec3  subgroupShuffleDown(ivec3, uint delta);\n"
-            "ivec4  subgroupShuffleDown(ivec4, uint delta);\n"
-            "uint   subgroupShuffleDown(uint, uint delta);\n"
-            "uvec2  subgroupShuffleDown(uvec2, uint delta);\n"
-            "uvec3  subgroupShuffleDown(uvec3, uint delta);\n"
-            "uvec4  subgroupShuffleDown(uvec4, uint delta);\n"
-            "bool   subgroupShuffleDown(bool, uint delta);\n"
-            "bvec2  subgroupShuffleDown(bvec2, uint delta);\n"
-            "bvec3  subgroupShuffleDown(bvec3, uint delta);\n"
-            "bvec4  subgroupShuffleDown(bvec4, uint delta);\n"
+            // Logical operations don't support float
+            bool logicalOp = strstr(op, "Or") || strstr(op, "And") ||
+                             (strstr(op, "Xor") && !strstr(op, "ShuffleXor"));
+            // Math operations don't support bool
+            bool mathOp = strstr(op, "Add") || strstr(op, "Mul") || strstr(op, "Min") || strstr(op, "Max");
 
-            "float  subgroupAdd(float);\n"
-            "vec2   subgroupAdd(vec2);\n"
-            "vec3   subgroupAdd(vec3);\n"
-            "vec4   subgroupAdd(vec4);\n"
-            "int    subgroupAdd(int);\n"
-            "ivec2  subgroupAdd(ivec2);\n"
-            "ivec3  subgroupAdd(ivec3);\n"
-            "ivec4  subgroupAdd(ivec4);\n"
-            "uint   subgroupAdd(uint);\n"
-            "uvec2  subgroupAdd(uvec2);\n"
-            "uvec3  subgroupAdd(uvec3);\n"
-            "uvec4  subgroupAdd(uvec4);\n"
+            const int bufSize = 256;
+            char buf[bufSize];
 
-            "float  subgroupMul(float);\n"
-            "vec2   subgroupMul(vec2);\n"
-            "vec3   subgroupMul(vec3);\n"
-            "vec4   subgroupMul(vec4);\n"
-            "int    subgroupMul(int);\n"
-            "ivec2  subgroupMul(ivec2);\n"
-            "ivec3  subgroupMul(ivec3);\n"
-            "ivec4  subgroupMul(ivec4);\n"
-            "uint   subgroupMul(uint);\n"
-            "uvec2  subgroupMul(uvec2);\n"
-            "uvec3  subgroupMul(uvec3);\n"
-            "uvec4  subgroupMul(uvec4);\n"
-
-            "float  subgroupMin(float);\n"
-            "vec2   subgroupMin(vec2);\n"
-            "vec3   subgroupMin(vec3);\n"
-            "vec4   subgroupMin(vec4);\n"
-            "int    subgroupMin(int);\n"
-            "ivec2  subgroupMin(ivec2);\n"
-            "ivec3  subgroupMin(ivec3);\n"
-            "ivec4  subgroupMin(ivec4);\n"
-            "uint   subgroupMin(uint);\n"
-            "uvec2  subgroupMin(uvec2);\n"
-            "uvec3  subgroupMin(uvec3);\n"
-            "uvec4  subgroupMin(uvec4);\n"
-
-            "float  subgroupMax(float);\n"
-            "vec2   subgroupMax(vec2);\n"
-            "vec3   subgroupMax(vec3);\n"
-            "vec4   subgroupMax(vec4);\n"
-            "int    subgroupMax(int);\n"
-            "ivec2  subgroupMax(ivec2);\n"
-            "ivec3  subgroupMax(ivec3);\n"
-            "ivec4  subgroupMax(ivec4);\n"
-            "uint   subgroupMax(uint);\n"
-            "uvec2  subgroupMax(uvec2);\n"
-            "uvec3  subgroupMax(uvec3);\n"
-            "uvec4  subgroupMax(uvec4);\n"
-
-            "int    subgroupAnd(int);\n"
-            "ivec2  subgroupAnd(ivec2);\n"
-            "ivec3  subgroupAnd(ivec3);\n"
-            "ivec4  subgroupAnd(ivec4);\n"
-            "uint   subgroupAnd(uint);\n"
-            "uvec2  subgroupAnd(uvec2);\n"
-            "uvec3  subgroupAnd(uvec3);\n"
-            "uvec4  subgroupAnd(uvec4);\n"
-            "bool   subgroupAnd(bool);\n"
-            "bvec2  subgroupAnd(bvec2);\n"
-            "bvec3  subgroupAnd(bvec3);\n"
-            "bvec4  subgroupAnd(bvec4);\n"
-
-            "int    subgroupOr(int);\n"
-            "ivec2  subgroupOr(ivec2);\n"
-            "ivec3  subgroupOr(ivec3);\n"
-            "ivec4  subgroupOr(ivec4);\n"
-            "uint   subgroupOr(uint);\n"
-            "uvec2  subgroupOr(uvec2);\n"
-            "uvec3  subgroupOr(uvec3);\n"
-            "uvec4  subgroupOr(uvec4);\n"
-            "bool   subgroupOr(bool);\n"
-            "bvec2  subgroupOr(bvec2);\n"
-            "bvec3  subgroupOr(bvec3);\n"
-            "bvec4  subgroupOr(bvec4);\n"
-
-            "int    subgroupXor(int);\n"
-            "ivec2  subgroupXor(ivec2);\n"
-            "ivec3  subgroupXor(ivec3);\n"
-            "ivec4  subgroupXor(ivec4);\n"
-            "uint   subgroupXor(uint);\n"
-            "uvec2  subgroupXor(uvec2);\n"
-            "uvec3  subgroupXor(uvec3);\n"
-            "uvec4  subgroupXor(uvec4);\n"
-            "bool   subgroupXor(bool);\n"
-            "bvec2  subgroupXor(bvec2);\n"
-            "bvec3  subgroupXor(bvec3);\n"
-            "bvec4  subgroupXor(bvec4);\n"
-
-            "float  subgroupInclusiveAdd(float);\n"
-            "vec2   subgroupInclusiveAdd(vec2);\n"
-            "vec3   subgroupInclusiveAdd(vec3);\n"
-            "vec4   subgroupInclusiveAdd(vec4);\n"
-            "int    subgroupInclusiveAdd(int);\n"
-            "ivec2  subgroupInclusiveAdd(ivec2);\n"
-            "ivec3  subgroupInclusiveAdd(ivec3);\n"
-            "ivec4  subgroupInclusiveAdd(ivec4);\n"
-            "uint   subgroupInclusiveAdd(uint);\n"
-            "uvec2  subgroupInclusiveAdd(uvec2);\n"
-            "uvec3  subgroupInclusiveAdd(uvec3);\n"
-            "uvec4  subgroupInclusiveAdd(uvec4);\n"
-
-            "float  subgroupInclusiveMul(float);\n"
-            "vec2   subgroupInclusiveMul(vec2);\n"
-            "vec3   subgroupInclusiveMul(vec3);\n"
-            "vec4   subgroupInclusiveMul(vec4);\n"
-            "int    subgroupInclusiveMul(int);\n"
-            "ivec2  subgroupInclusiveMul(ivec2);\n"
-            "ivec3  subgroupInclusiveMul(ivec3);\n"
-            "ivec4  subgroupInclusiveMul(ivec4);\n"
-            "uint   subgroupInclusiveMul(uint);\n"
-            "uvec2  subgroupInclusiveMul(uvec2);\n"
-            "uvec3  subgroupInclusiveMul(uvec3);\n"
-            "uvec4  subgroupInclusiveMul(uvec4);\n"
-
-            "float  subgroupInclusiveMin(float);\n"
-            "vec2   subgroupInclusiveMin(vec2);\n"
-            "vec3   subgroupInclusiveMin(vec3);\n"
-            "vec4   subgroupInclusiveMin(vec4);\n"
-            "int    subgroupInclusiveMin(int);\n"
-            "ivec2  subgroupInclusiveMin(ivec2);\n"
-            "ivec3  subgroupInclusiveMin(ivec3);\n"
-            "ivec4  subgroupInclusiveMin(ivec4);\n"
-            "uint   subgroupInclusiveMin(uint);\n"
-            "uvec2  subgroupInclusiveMin(uvec2);\n"
-            "uvec3  subgroupInclusiveMin(uvec3);\n"
-            "uvec4  subgroupInclusiveMin(uvec4);\n"
-
-            "float  subgroupInclusiveMax(float);\n"
-            "vec2   subgroupInclusiveMax(vec2);\n"
-            "vec3   subgroupInclusiveMax(vec3);\n"
-            "vec4   subgroupInclusiveMax(vec4);\n"
-            "int    subgroupInclusiveMax(int);\n"
-            "ivec2  subgroupInclusiveMax(ivec2);\n"
-            "ivec3  subgroupInclusiveMax(ivec3);\n"
-            "ivec4  subgroupInclusiveMax(ivec4);\n"
-            "uint   subgroupInclusiveMax(uint);\n"
-            "uvec2  subgroupInclusiveMax(uvec2);\n"
-            "uvec3  subgroupInclusiveMax(uvec3);\n"
-            "uvec4  subgroupInclusiveMax(uvec4);\n"
-
-            "int    subgroupInclusiveAnd(int);\n"
-            "ivec2  subgroupInclusiveAnd(ivec2);\n"
-            "ivec3  subgroupInclusiveAnd(ivec3);\n"
-            "ivec4  subgroupInclusiveAnd(ivec4);\n"
-            "uint   subgroupInclusiveAnd(uint);\n"
-            "uvec2  subgroupInclusiveAnd(uvec2);\n"
-            "uvec3  subgroupInclusiveAnd(uvec3);\n"
-            "uvec4  subgroupInclusiveAnd(uvec4);\n"
-            "bool   subgroupInclusiveAnd(bool);\n"
-            "bvec2  subgroupInclusiveAnd(bvec2);\n"
-            "bvec3  subgroupInclusiveAnd(bvec3);\n"
-            "bvec4  subgroupInclusiveAnd(bvec4);\n"
-
-            "int    subgroupInclusiveOr(int);\n"
-            "ivec2  subgroupInclusiveOr(ivec2);\n"
-            "ivec3  subgroupInclusiveOr(ivec3);\n"
-            "ivec4  subgroupInclusiveOr(ivec4);\n"
-            "uint   subgroupInclusiveOr(uint);\n"
-            "uvec2  subgroupInclusiveOr(uvec2);\n"
-            "uvec3  subgroupInclusiveOr(uvec3);\n"
-            "uvec4  subgroupInclusiveOr(uvec4);\n"
-            "bool   subgroupInclusiveOr(bool);\n"
-            "bvec2  subgroupInclusiveOr(bvec2);\n"
-            "bvec3  subgroupInclusiveOr(bvec3);\n"
-            "bvec4  subgroupInclusiveOr(bvec4);\n"
-
-            "int    subgroupInclusiveXor(int);\n"
-            "ivec2  subgroupInclusiveXor(ivec2);\n"
-            "ivec3  subgroupInclusiveXor(ivec3);\n"
-            "ivec4  subgroupInclusiveXor(ivec4);\n"
-            "uint   subgroupInclusiveXor(uint);\n"
-            "uvec2  subgroupInclusiveXor(uvec2);\n"
-            "uvec3  subgroupInclusiveXor(uvec3);\n"
-            "uvec4  subgroupInclusiveXor(uvec4);\n"
-            "bool   subgroupInclusiveXor(bool);\n"
-            "bvec2  subgroupInclusiveXor(bvec2);\n"
-            "bvec3  subgroupInclusiveXor(bvec3);\n"
-            "bvec4  subgroupInclusiveXor(bvec4);\n"
-
-            "float  subgroupExclusiveAdd(float);\n"
-            "vec2   subgroupExclusiveAdd(vec2);\n"
-            "vec3   subgroupExclusiveAdd(vec3);\n"
-            "vec4   subgroupExclusiveAdd(vec4);\n"
-            "int    subgroupExclusiveAdd(int);\n"
-            "ivec2  subgroupExclusiveAdd(ivec2);\n"
-            "ivec3  subgroupExclusiveAdd(ivec3);\n"
-            "ivec4  subgroupExclusiveAdd(ivec4);\n"
-            "uint   subgroupExclusiveAdd(uint);\n"
-            "uvec2  subgroupExclusiveAdd(uvec2);\n"
-            "uvec3  subgroupExclusiveAdd(uvec3);\n"
-            "uvec4  subgroupExclusiveAdd(uvec4);\n"
-
-            "float  subgroupExclusiveMul(float);\n"
-            "vec2   subgroupExclusiveMul(vec2);\n"
-            "vec3   subgroupExclusiveMul(vec3);\n"
-            "vec4   subgroupExclusiveMul(vec4);\n"
-            "int    subgroupExclusiveMul(int);\n"
-            "ivec2  subgroupExclusiveMul(ivec2);\n"
-            "ivec3  subgroupExclusiveMul(ivec3);\n"
-            "ivec4  subgroupExclusiveMul(ivec4);\n"
-            "uint   subgroupExclusiveMul(uint);\n"
-            "uvec2  subgroupExclusiveMul(uvec2);\n"
-            "uvec3  subgroupExclusiveMul(uvec3);\n"
-            "uvec4  subgroupExclusiveMul(uvec4);\n"
-
-            "float  subgroupExclusiveMin(float);\n"
-            "vec2   subgroupExclusiveMin(vec2);\n"
-            "vec3   subgroupExclusiveMin(vec3);\n"
-            "vec4   subgroupExclusiveMin(vec4);\n"
-            "int    subgroupExclusiveMin(int);\n"
-            "ivec2  subgroupExclusiveMin(ivec2);\n"
-            "ivec3  subgroupExclusiveMin(ivec3);\n"
-            "ivec4  subgroupExclusiveMin(ivec4);\n"
-            "uint   subgroupExclusiveMin(uint);\n"
-            "uvec2  subgroupExclusiveMin(uvec2);\n"
-            "uvec3  subgroupExclusiveMin(uvec3);\n"
-            "uvec4  subgroupExclusiveMin(uvec4);\n"
-
-            "float  subgroupExclusiveMax(float);\n"
-            "vec2   subgroupExclusiveMax(vec2);\n"
-            "vec3   subgroupExclusiveMax(vec3);\n"
-            "vec4   subgroupExclusiveMax(vec4);\n"
-            "int    subgroupExclusiveMax(int);\n"
-            "ivec2  subgroupExclusiveMax(ivec2);\n"
-            "ivec3  subgroupExclusiveMax(ivec3);\n"
-            "ivec4  subgroupExclusiveMax(ivec4);\n"
-            "uint   subgroupExclusiveMax(uint);\n"
-            "uvec2  subgroupExclusiveMax(uvec2);\n"
-            "uvec3  subgroupExclusiveMax(uvec3);\n"
-            "uvec4  subgroupExclusiveMax(uvec4);\n"
-
-            "int    subgroupExclusiveAnd(int);\n"
-            "ivec2  subgroupExclusiveAnd(ivec2);\n"
-            "ivec3  subgroupExclusiveAnd(ivec3);\n"
-            "ivec4  subgroupExclusiveAnd(ivec4);\n"
-            "uint   subgroupExclusiveAnd(uint);\n"
-            "uvec2  subgroupExclusiveAnd(uvec2);\n"
-            "uvec3  subgroupExclusiveAnd(uvec3);\n"
-            "uvec4  subgroupExclusiveAnd(uvec4);\n"
-            "bool   subgroupExclusiveAnd(bool);\n"
-            "bvec2  subgroupExclusiveAnd(bvec2);\n"
-            "bvec3  subgroupExclusiveAnd(bvec3);\n"
-            "bvec4  subgroupExclusiveAnd(bvec4);\n"
-
-            "int    subgroupExclusiveOr(int);\n"
-            "ivec2  subgroupExclusiveOr(ivec2);\n"
-            "ivec3  subgroupExclusiveOr(ivec3);\n"
-            "ivec4  subgroupExclusiveOr(ivec4);\n"
-            "uint   subgroupExclusiveOr(uint);\n"
-            "uvec2  subgroupExclusiveOr(uvec2);\n"
-            "uvec3  subgroupExclusiveOr(uvec3);\n"
-            "uvec4  subgroupExclusiveOr(uvec4);\n"
-            "bool   subgroupExclusiveOr(bool);\n"
-            "bvec2  subgroupExclusiveOr(bvec2);\n"
-            "bvec3  subgroupExclusiveOr(bvec3);\n"
-            "bvec4  subgroupExclusiveOr(bvec4);\n"
-
-            "int    subgroupExclusiveXor(int);\n"
-            "ivec2  subgroupExclusiveXor(ivec2);\n"
-            "ivec3  subgroupExclusiveXor(ivec3);\n"
-            "ivec4  subgroupExclusiveXor(ivec4);\n"
-            "uint   subgroupExclusiveXor(uint);\n"
-            "uvec2  subgroupExclusiveXor(uvec2);\n"
-            "uvec3  subgroupExclusiveXor(uvec3);\n"
-            "uvec4  subgroupExclusiveXor(uvec4);\n"
-            "bool   subgroupExclusiveXor(bool);\n"
-            "bvec2  subgroupExclusiveXor(bvec2);\n"
-            "bvec3  subgroupExclusiveXor(bvec3);\n"
-            "bvec4  subgroupExclusiveXor(bvec4);\n"
-
-            "float  subgroupClusteredAdd(float, uint);\n"
-            "vec2   subgroupClusteredAdd(vec2, uint);\n"
-            "vec3   subgroupClusteredAdd(vec3, uint);\n"
-            "vec4   subgroupClusteredAdd(vec4, uint);\n"
-            "int    subgroupClusteredAdd(int, uint);\n"
-            "ivec2  subgroupClusteredAdd(ivec2, uint);\n"
-            "ivec3  subgroupClusteredAdd(ivec3, uint);\n"
-            "ivec4  subgroupClusteredAdd(ivec4, uint);\n"
-            "uint   subgroupClusteredAdd(uint, uint);\n"
-            "uvec2  subgroupClusteredAdd(uvec2, uint);\n"
-            "uvec3  subgroupClusteredAdd(uvec3, uint);\n"
-            "uvec4  subgroupClusteredAdd(uvec4, uint);\n"
-
-            "float  subgroupClusteredMul(float, uint);\n"
-            "vec2   subgroupClusteredMul(vec2, uint);\n"
-            "vec3   subgroupClusteredMul(vec3, uint);\n"
-            "vec4   subgroupClusteredMul(vec4, uint);\n"
-            "int    subgroupClusteredMul(int, uint);\n"
-            "ivec2  subgroupClusteredMul(ivec2, uint);\n"
-            "ivec3  subgroupClusteredMul(ivec3, uint);\n"
-            "ivec4  subgroupClusteredMul(ivec4, uint);\n"
-            "uint   subgroupClusteredMul(uint, uint);\n"
-            "uvec2  subgroupClusteredMul(uvec2, uint);\n"
-            "uvec3  subgroupClusteredMul(uvec3, uint);\n"
-            "uvec4  subgroupClusteredMul(uvec4, uint);\n"
-
-            "float  subgroupClusteredMin(float, uint);\n"
-            "vec2   subgroupClusteredMin(vec2, uint);\n"
-            "vec3   subgroupClusteredMin(vec3, uint);\n"
-            "vec4   subgroupClusteredMin(vec4, uint);\n"
-            "int    subgroupClusteredMin(int, uint);\n"
-            "ivec2  subgroupClusteredMin(ivec2, uint);\n"
-            "ivec3  subgroupClusteredMin(ivec3, uint);\n"
-            "ivec4  subgroupClusteredMin(ivec4, uint);\n"
-            "uint   subgroupClusteredMin(uint, uint);\n"
-            "uvec2  subgroupClusteredMin(uvec2, uint);\n"
-            "uvec3  subgroupClusteredMin(uvec3, uint);\n"
-            "uvec4  subgroupClusteredMin(uvec4, uint);\n"
-
-            "float  subgroupClusteredMax(float, uint);\n"
-            "vec2   subgroupClusteredMax(vec2, uint);\n"
-            "vec3   subgroupClusteredMax(vec3, uint);\n"
-            "vec4   subgroupClusteredMax(vec4, uint);\n"
-            "int    subgroupClusteredMax(int, uint);\n"
-            "ivec2  subgroupClusteredMax(ivec2, uint);\n"
-            "ivec3  subgroupClusteredMax(ivec3, uint);\n"
-            "ivec4  subgroupClusteredMax(ivec4, uint);\n"
-            "uint   subgroupClusteredMax(uint, uint);\n"
-            "uvec2  subgroupClusteredMax(uvec2, uint);\n"
-            "uvec3  subgroupClusteredMax(uvec3, uint);\n"
-            "uvec4  subgroupClusteredMax(uvec4, uint);\n"
-
-            "int    subgroupClusteredAnd(int, uint);\n"
-            "ivec2  subgroupClusteredAnd(ivec2, uint);\n"
-            "ivec3  subgroupClusteredAnd(ivec3, uint);\n"
-            "ivec4  subgroupClusteredAnd(ivec4, uint);\n"
-            "uint   subgroupClusteredAnd(uint, uint);\n"
-            "uvec2  subgroupClusteredAnd(uvec2, uint);\n"
-            "uvec3  subgroupClusteredAnd(uvec3, uint);\n"
-            "uvec4  subgroupClusteredAnd(uvec4, uint);\n"
-            "bool   subgroupClusteredAnd(bool, uint);\n"
-            "bvec2  subgroupClusteredAnd(bvec2, uint);\n"
-            "bvec3  subgroupClusteredAnd(bvec3, uint);\n"
-            "bvec4  subgroupClusteredAnd(bvec4, uint);\n"
-
-            "int    subgroupClusteredOr(int, uint);\n"
-            "ivec2  subgroupClusteredOr(ivec2, uint);\n"
-            "ivec3  subgroupClusteredOr(ivec3, uint);\n"
-            "ivec4  subgroupClusteredOr(ivec4, uint);\n"
-            "uint   subgroupClusteredOr(uint, uint);\n"
-            "uvec2  subgroupClusteredOr(uvec2, uint);\n"
-            "uvec3  subgroupClusteredOr(uvec3, uint);\n"
-            "uvec4  subgroupClusteredOr(uvec4, uint);\n"
-            "bool   subgroupClusteredOr(bool, uint);\n"
-            "bvec2  subgroupClusteredOr(bvec2, uint);\n"
-            "bvec3  subgroupClusteredOr(bvec3, uint);\n"
-            "bvec4  subgroupClusteredOr(bvec4, uint);\n"
-
-            "int    subgroupClusteredXor(int, uint);\n"
-            "ivec2  subgroupClusteredXor(ivec2, uint);\n"
-            "ivec3  subgroupClusteredXor(ivec3, uint);\n"
-            "ivec4  subgroupClusteredXor(ivec4, uint);\n"
-            "uint   subgroupClusteredXor(uint, uint);\n"
-            "uvec2  subgroupClusteredXor(uvec2, uint);\n"
-            "uvec3  subgroupClusteredXor(uvec3, uint);\n"
-            "uvec4  subgroupClusteredXor(uvec4, uint);\n"
-            "bool   subgroupClusteredXor(bool, uint);\n"
-            "bvec2  subgroupClusteredXor(bvec2, uint);\n"
-            "bvec3  subgroupClusteredXor(bvec3, uint);\n"
-            "bvec4  subgroupClusteredXor(bvec4, uint);\n"
-
-            "float  subgroupQuadBroadcast(float, uint);\n"
-            "vec2   subgroupQuadBroadcast(vec2, uint);\n"
-            "vec3   subgroupQuadBroadcast(vec3, uint);\n"
-            "vec4   subgroupQuadBroadcast(vec4, uint);\n"
-            "int    subgroupQuadBroadcast(int, uint);\n"
-            "ivec2  subgroupQuadBroadcast(ivec2, uint);\n"
-            "ivec3  subgroupQuadBroadcast(ivec3, uint);\n"
-            "ivec4  subgroupQuadBroadcast(ivec4, uint);\n"
-            "uint   subgroupQuadBroadcast(uint, uint);\n"
-            "uvec2  subgroupQuadBroadcast(uvec2, uint);\n"
-            "uvec3  subgroupQuadBroadcast(uvec3, uint);\n"
-            "uvec4  subgroupQuadBroadcast(uvec4, uint);\n"
-            "bool   subgroupQuadBroadcast(bool, uint);\n"
-            "bvec2  subgroupQuadBroadcast(bvec2, uint);\n"
-            "bvec3  subgroupQuadBroadcast(bvec3, uint);\n"
-            "bvec4  subgroupQuadBroadcast(bvec4, uint);\n"
-
-            "float  subgroupQuadSwapHorizontal(float);\n"
-            "vec2   subgroupQuadSwapHorizontal(vec2);\n"
-            "vec3   subgroupQuadSwapHorizontal(vec3);\n"
-            "vec4   subgroupQuadSwapHorizontal(vec4);\n"
-            "int    subgroupQuadSwapHorizontal(int);\n"
-            "ivec2  subgroupQuadSwapHorizontal(ivec2);\n"
-            "ivec3  subgroupQuadSwapHorizontal(ivec3);\n"
-            "ivec4  subgroupQuadSwapHorizontal(ivec4);\n"
-            "uint   subgroupQuadSwapHorizontal(uint);\n"
-            "uvec2  subgroupQuadSwapHorizontal(uvec2);\n"
-            "uvec3  subgroupQuadSwapHorizontal(uvec3);\n"
-            "uvec4  subgroupQuadSwapHorizontal(uvec4);\n"
-            "bool   subgroupQuadSwapHorizontal(bool);\n"
-            "bvec2  subgroupQuadSwapHorizontal(bvec2);\n"
-            "bvec3  subgroupQuadSwapHorizontal(bvec3);\n"
-            "bvec4  subgroupQuadSwapHorizontal(bvec4);\n"
-
-            "float  subgroupQuadSwapVertical(float);\n"
-            "vec2   subgroupQuadSwapVertical(vec2);\n"
-            "vec3   subgroupQuadSwapVertical(vec3);\n"
-            "vec4   subgroupQuadSwapVertical(vec4);\n"
-            "int    subgroupQuadSwapVertical(int);\n"
-            "ivec2  subgroupQuadSwapVertical(ivec2);\n"
-            "ivec3  subgroupQuadSwapVertical(ivec3);\n"
-            "ivec4  subgroupQuadSwapVertical(ivec4);\n"
-            "uint   subgroupQuadSwapVertical(uint);\n"
-            "uvec2  subgroupQuadSwapVertical(uvec2);\n"
-            "uvec3  subgroupQuadSwapVertical(uvec3);\n"
-            "uvec4  subgroupQuadSwapVertical(uvec4);\n"
-            "bool   subgroupQuadSwapVertical(bool);\n"
-            "bvec2  subgroupQuadSwapVertical(bvec2);\n"
-            "bvec3  subgroupQuadSwapVertical(bvec3);\n"
-            "bvec4  subgroupQuadSwapVertical(bvec4);\n"
-
-            "float  subgroupQuadSwapDiagonal(float);\n"
-            "vec2   subgroupQuadSwapDiagonal(vec2);\n"
-            "vec3   subgroupQuadSwapDiagonal(vec3);\n"
-            "vec4   subgroupQuadSwapDiagonal(vec4);\n"
-            "int    subgroupQuadSwapDiagonal(int);\n"
-            "ivec2  subgroupQuadSwapDiagonal(ivec2);\n"
-            "ivec3  subgroupQuadSwapDiagonal(ivec3);\n"
-            "ivec4  subgroupQuadSwapDiagonal(ivec4);\n"
-            "uint   subgroupQuadSwapDiagonal(uint);\n"
-            "uvec2  subgroupQuadSwapDiagonal(uvec2);\n"
-            "uvec3  subgroupQuadSwapDiagonal(uvec3);\n"
-            "uvec4  subgroupQuadSwapDiagonal(uvec4);\n"
-            "bool   subgroupQuadSwapDiagonal(bool);\n"
-            "bvec2  subgroupQuadSwapDiagonal(bvec2);\n"
-            "bvec3  subgroupQuadSwapDiagonal(bvec3);\n"
-            "bvec4  subgroupQuadSwapDiagonal(bvec4);\n"
-
-            "uvec4  subgroupPartitionNV(float);\n"
-            "uvec4  subgroupPartitionNV(vec2);\n"
-            "uvec4  subgroupPartitionNV(vec3);\n"
-            "uvec4  subgroupPartitionNV(vec4);\n"
-            "uvec4  subgroupPartitionNV(int);\n"
-            "uvec4  subgroupPartitionNV(ivec2);\n"
-            "uvec4  subgroupPartitionNV(ivec3);\n"
-            "uvec4  subgroupPartitionNV(ivec4);\n"
-            "uvec4  subgroupPartitionNV(uint);\n"
-            "uvec4  subgroupPartitionNV(uvec2);\n"
-            "uvec4  subgroupPartitionNV(uvec3);\n"
-            "uvec4  subgroupPartitionNV(uvec4);\n"
-            "uvec4  subgroupPartitionNV(bool);\n"
-            "uvec4  subgroupPartitionNV(bvec2);\n"
-            "uvec4  subgroupPartitionNV(bvec3);\n"
-            "uvec4  subgroupPartitionNV(bvec4);\n"
-
-            "float  subgroupPartitionedAddNV(float, uvec4 ballot);\n"
-            "vec2   subgroupPartitionedAddNV(vec2, uvec4 ballot);\n"
-            "vec3   subgroupPartitionedAddNV(vec3, uvec4 ballot);\n"
-            "vec4   subgroupPartitionedAddNV(vec4, uvec4 ballot);\n"
-            "int    subgroupPartitionedAddNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedAddNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedAddNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedAddNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedAddNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedAddNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedAddNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedAddNV(uvec4, uvec4 ballot);\n"
-
-            "float  subgroupPartitionedMulNV(float, uvec4 ballot);\n"
-            "vec2   subgroupPartitionedMulNV(vec2, uvec4 ballot);\n"
-            "vec3   subgroupPartitionedMulNV(vec3, uvec4 ballot);\n"
-            "vec4   subgroupPartitionedMulNV(vec4, uvec4 ballot);\n"
-            "int    subgroupPartitionedMulNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedMulNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedMulNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedMulNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedMulNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedMulNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedMulNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedMulNV(uvec4, uvec4 ballot);\n"
-
-            "float  subgroupPartitionedMinNV(float, uvec4 ballot);\n"
-            "vec2   subgroupPartitionedMinNV(vec2, uvec4 ballot);\n"
-            "vec3   subgroupPartitionedMinNV(vec3, uvec4 ballot);\n"
-            "vec4   subgroupPartitionedMinNV(vec4, uvec4 ballot);\n"
-            "int    subgroupPartitionedMinNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedMinNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedMinNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedMinNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedMinNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedMinNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedMinNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedMinNV(uvec4, uvec4 ballot);\n"
-
-            "float  subgroupPartitionedMaxNV(float, uvec4 ballot);\n"
-            "vec2   subgroupPartitionedMaxNV(vec2, uvec4 ballot);\n"
-            "vec3   subgroupPartitionedMaxNV(vec3, uvec4 ballot);\n"
-            "vec4   subgroupPartitionedMaxNV(vec4, uvec4 ballot);\n"
-            "int    subgroupPartitionedMaxNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedMaxNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedMaxNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedMaxNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedMaxNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedMaxNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedMaxNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedMaxNV(uvec4, uvec4 ballot);\n"
-
-            "int    subgroupPartitionedAndNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedAndNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedAndNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedAndNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedAndNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedAndNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedAndNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedAndNV(uvec4, uvec4 ballot);\n"
-            "bool   subgroupPartitionedAndNV(bool, uvec4 ballot);\n"
-            "bvec2  subgroupPartitionedAndNV(bvec2, uvec4 ballot);\n"
-            "bvec3  subgroupPartitionedAndNV(bvec3, uvec4 ballot);\n"
-            "bvec4  subgroupPartitionedAndNV(bvec4, uvec4 ballot);\n"
-
-            "int    subgroupPartitionedOrNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedOrNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedOrNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedOrNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedOrNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedOrNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedOrNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedOrNV(uvec4, uvec4 ballot);\n"
-            "bool   subgroupPartitionedOrNV(bool, uvec4 ballot);\n"
-            "bvec2  subgroupPartitionedOrNV(bvec2, uvec4 ballot);\n"
-            "bvec3  subgroupPartitionedOrNV(bvec3, uvec4 ballot);\n"
-            "bvec4  subgroupPartitionedOrNV(bvec4, uvec4 ballot);\n"
-
-            "int    subgroupPartitionedXorNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedXorNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedXorNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedXorNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedXorNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedXorNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedXorNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedXorNV(uvec4, uvec4 ballot);\n"
-            "bool   subgroupPartitionedXorNV(bool, uvec4 ballot);\n"
-            "bvec2  subgroupPartitionedXorNV(bvec2, uvec4 ballot);\n"
-            "bvec3  subgroupPartitionedXorNV(bvec3, uvec4 ballot);\n"
-            "bvec4  subgroupPartitionedXorNV(bvec4, uvec4 ballot);\n"
-
-            "float  subgroupPartitionedInclusiveAddNV(float, uvec4 ballot);\n"
-            "vec2   subgroupPartitionedInclusiveAddNV(vec2, uvec4 ballot);\n"
-            "vec3   subgroupPartitionedInclusiveAddNV(vec3, uvec4 ballot);\n"
-            "vec4   subgroupPartitionedInclusiveAddNV(vec4, uvec4 ballot);\n"
-            "int    subgroupPartitionedInclusiveAddNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedInclusiveAddNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedInclusiveAddNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedInclusiveAddNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedInclusiveAddNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedInclusiveAddNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedInclusiveAddNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedInclusiveAddNV(uvec4, uvec4 ballot);\n"
-
-            "float  subgroupPartitionedInclusiveMulNV(float, uvec4 ballot);\n"
-            "vec2   subgroupPartitionedInclusiveMulNV(vec2, uvec4 ballot);\n"
-            "vec3   subgroupPartitionedInclusiveMulNV(vec3, uvec4 ballot);\n"
-            "vec4   subgroupPartitionedInclusiveMulNV(vec4, uvec4 ballot);\n"
-            "int    subgroupPartitionedInclusiveMulNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedInclusiveMulNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedInclusiveMulNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedInclusiveMulNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedInclusiveMulNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedInclusiveMulNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedInclusiveMulNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedInclusiveMulNV(uvec4, uvec4 ballot);\n"
-
-            "float  subgroupPartitionedInclusiveMinNV(float, uvec4 ballot);\n"
-            "vec2   subgroupPartitionedInclusiveMinNV(vec2, uvec4 ballot);\n"
-            "vec3   subgroupPartitionedInclusiveMinNV(vec3, uvec4 ballot);\n"
-            "vec4   subgroupPartitionedInclusiveMinNV(vec4, uvec4 ballot);\n"
-            "int    subgroupPartitionedInclusiveMinNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedInclusiveMinNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedInclusiveMinNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedInclusiveMinNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedInclusiveMinNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedInclusiveMinNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedInclusiveMinNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedInclusiveMinNV(uvec4, uvec4 ballot);\n"
-
-            "float  subgroupPartitionedInclusiveMaxNV(float, uvec4 ballot);\n"
-            "vec2   subgroupPartitionedInclusiveMaxNV(vec2, uvec4 ballot);\n"
-            "vec3   subgroupPartitionedInclusiveMaxNV(vec3, uvec4 ballot);\n"
-            "vec4   subgroupPartitionedInclusiveMaxNV(vec4, uvec4 ballot);\n"
-            "int    subgroupPartitionedInclusiveMaxNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedInclusiveMaxNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedInclusiveMaxNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedInclusiveMaxNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedInclusiveMaxNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedInclusiveMaxNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedInclusiveMaxNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedInclusiveMaxNV(uvec4, uvec4 ballot);\n"
-
-            "int    subgroupPartitionedInclusiveAndNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedInclusiveAndNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedInclusiveAndNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedInclusiveAndNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedInclusiveAndNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedInclusiveAndNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedInclusiveAndNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedInclusiveAndNV(uvec4, uvec4 ballot);\n"
-            "bool   subgroupPartitionedInclusiveAndNV(bool, uvec4 ballot);\n"
-            "bvec2  subgroupPartitionedInclusiveAndNV(bvec2, uvec4 ballot);\n"
-            "bvec3  subgroupPartitionedInclusiveAndNV(bvec3, uvec4 ballot);\n"
-            "bvec4  subgroupPartitionedInclusiveAndNV(bvec4, uvec4 ballot);\n"
-
-            "int    subgroupPartitionedInclusiveOrNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedInclusiveOrNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedInclusiveOrNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedInclusiveOrNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedInclusiveOrNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedInclusiveOrNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedInclusiveOrNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedInclusiveOrNV(uvec4, uvec4 ballot);\n"
-            "bool   subgroupPartitionedInclusiveOrNV(bool, uvec4 ballot);\n"
-            "bvec2  subgroupPartitionedInclusiveOrNV(bvec2, uvec4 ballot);\n"
-            "bvec3  subgroupPartitionedInclusiveOrNV(bvec3, uvec4 ballot);\n"
-            "bvec4  subgroupPartitionedInclusiveOrNV(bvec4, uvec4 ballot);\n"
-
-            "int    subgroupPartitionedInclusiveXorNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedInclusiveXorNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedInclusiveXorNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedInclusiveXorNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedInclusiveXorNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedInclusiveXorNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedInclusiveXorNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedInclusiveXorNV(uvec4, uvec4 ballot);\n"
-            "bool   subgroupPartitionedInclusiveXorNV(bool, uvec4 ballot);\n"
-            "bvec2  subgroupPartitionedInclusiveXorNV(bvec2, uvec4 ballot);\n"
-            "bvec3  subgroupPartitionedInclusiveXorNV(bvec3, uvec4 ballot);\n"
-            "bvec4  subgroupPartitionedInclusiveXorNV(bvec4, uvec4 ballot);\n"
-
-            "float  subgroupPartitionedExclusiveAddNV(float, uvec4 ballot);\n"
-            "vec2   subgroupPartitionedExclusiveAddNV(vec2, uvec4 ballot);\n"
-            "vec3   subgroupPartitionedExclusiveAddNV(vec3, uvec4 ballot);\n"
-            "vec4   subgroupPartitionedExclusiveAddNV(vec4, uvec4 ballot);\n"
-            "int    subgroupPartitionedExclusiveAddNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedExclusiveAddNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedExclusiveAddNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedExclusiveAddNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedExclusiveAddNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedExclusiveAddNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedExclusiveAddNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedExclusiveAddNV(uvec4, uvec4 ballot);\n"
-
-            "float  subgroupPartitionedExclusiveMulNV(float, uvec4 ballot);\n"
-            "vec2   subgroupPartitionedExclusiveMulNV(vec2, uvec4 ballot);\n"
-            "vec3   subgroupPartitionedExclusiveMulNV(vec3, uvec4 ballot);\n"
-            "vec4   subgroupPartitionedExclusiveMulNV(vec4, uvec4 ballot);\n"
-            "int    subgroupPartitionedExclusiveMulNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedExclusiveMulNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedExclusiveMulNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedExclusiveMulNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedExclusiveMulNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedExclusiveMulNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedExclusiveMulNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedExclusiveMulNV(uvec4, uvec4 ballot);\n"
-
-            "float  subgroupPartitionedExclusiveMinNV(float, uvec4 ballot);\n"
-            "vec2   subgroupPartitionedExclusiveMinNV(vec2, uvec4 ballot);\n"
-            "vec3   subgroupPartitionedExclusiveMinNV(vec3, uvec4 ballot);\n"
-            "vec4   subgroupPartitionedExclusiveMinNV(vec4, uvec4 ballot);\n"
-            "int    subgroupPartitionedExclusiveMinNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedExclusiveMinNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedExclusiveMinNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedExclusiveMinNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedExclusiveMinNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedExclusiveMinNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedExclusiveMinNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedExclusiveMinNV(uvec4, uvec4 ballot);\n"
-
-            "float  subgroupPartitionedExclusiveMaxNV(float, uvec4 ballot);\n"
-            "vec2   subgroupPartitionedExclusiveMaxNV(vec2, uvec4 ballot);\n"
-            "vec3   subgroupPartitionedExclusiveMaxNV(vec3, uvec4 ballot);\n"
-            "vec4   subgroupPartitionedExclusiveMaxNV(vec4, uvec4 ballot);\n"
-            "int    subgroupPartitionedExclusiveMaxNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedExclusiveMaxNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedExclusiveMaxNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedExclusiveMaxNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedExclusiveMaxNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedExclusiveMaxNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedExclusiveMaxNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedExclusiveMaxNV(uvec4, uvec4 ballot);\n"
-
-            "int    subgroupPartitionedExclusiveAndNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedExclusiveAndNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedExclusiveAndNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedExclusiveAndNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedExclusiveAndNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedExclusiveAndNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedExclusiveAndNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedExclusiveAndNV(uvec4, uvec4 ballot);\n"
-            "bool   subgroupPartitionedExclusiveAndNV(bool, uvec4 ballot);\n"
-            "bvec2  subgroupPartitionedExclusiveAndNV(bvec2, uvec4 ballot);\n"
-            "bvec3  subgroupPartitionedExclusiveAndNV(bvec3, uvec4 ballot);\n"
-            "bvec4  subgroupPartitionedExclusiveAndNV(bvec4, uvec4 ballot);\n"
-
-            "int    subgroupPartitionedExclusiveOrNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedExclusiveOrNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedExclusiveOrNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedExclusiveOrNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedExclusiveOrNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedExclusiveOrNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedExclusiveOrNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedExclusiveOrNV(uvec4, uvec4 ballot);\n"
-            "bool   subgroupPartitionedExclusiveOrNV(bool, uvec4 ballot);\n"
-            "bvec2  subgroupPartitionedExclusiveOrNV(bvec2, uvec4 ballot);\n"
-            "bvec3  subgroupPartitionedExclusiveOrNV(bvec3, uvec4 ballot);\n"
-            "bvec4  subgroupPartitionedExclusiveOrNV(bvec4, uvec4 ballot);\n"
-
-            "int    subgroupPartitionedExclusiveXorNV(int, uvec4 ballot);\n"
-            "ivec2  subgroupPartitionedExclusiveXorNV(ivec2, uvec4 ballot);\n"
-            "ivec3  subgroupPartitionedExclusiveXorNV(ivec3, uvec4 ballot);\n"
-            "ivec4  subgroupPartitionedExclusiveXorNV(ivec4, uvec4 ballot);\n"
-            "uint   subgroupPartitionedExclusiveXorNV(uint, uvec4 ballot);\n"
-            "uvec2  subgroupPartitionedExclusiveXorNV(uvec2, uvec4 ballot);\n"
-            "uvec3  subgroupPartitionedExclusiveXorNV(uvec3, uvec4 ballot);\n"
-            "uvec4  subgroupPartitionedExclusiveXorNV(uvec4, uvec4 ballot);\n"
-            "bool   subgroupPartitionedExclusiveXorNV(bool, uvec4 ballot);\n"
-            "bvec2  subgroupPartitionedExclusiveXorNV(bvec2, uvec4 ballot);\n"
-            "bvec3  subgroupPartitionedExclusiveXorNV(bvec3, uvec4 ballot);\n"
-            "bvec4  subgroupPartitionedExclusiveXorNV(bvec4, uvec4 ballot);\n"
-            "\n");
-
-        if (profile != EEsProfile && version >= 400) {
-            commonBuiltins.append(
-                "bool   subgroupAllEqual(double);\n"
-                "bool   subgroupAllEqual(dvec2);\n"
-                "bool   subgroupAllEqual(dvec3);\n"
-                "bool   subgroupAllEqual(dvec4);\n"
-
-                "double subgroupBroadcast(double, uint);\n"
-                "dvec2  subgroupBroadcast(dvec2, uint);\n"
-                "dvec3  subgroupBroadcast(dvec3, uint);\n"
-                "dvec4  subgroupBroadcast(dvec4, uint);\n"
-
-                "double subgroupBroadcastFirst(double);\n"
-                "dvec2  subgroupBroadcastFirst(dvec2);\n"
-                "dvec3  subgroupBroadcastFirst(dvec3);\n"
-                "dvec4  subgroupBroadcastFirst(dvec4);\n"
-
-                "double subgroupShuffle(double, uint);\n"
-                "dvec2  subgroupShuffle(dvec2, uint);\n"
-                "dvec3  subgroupShuffle(dvec3, uint);\n"
-                "dvec4  subgroupShuffle(dvec4, uint);\n"
-
-                "double subgroupShuffleXor(double, uint);\n"
-                "dvec2  subgroupShuffleXor(dvec2, uint);\n"
-                "dvec3  subgroupShuffleXor(dvec3, uint);\n"
-                "dvec4  subgroupShuffleXor(dvec4, uint);\n"
-
-                "double subgroupShuffleUp(double, uint delta);\n"
-                "dvec2  subgroupShuffleUp(dvec2, uint delta);\n"
-                "dvec3  subgroupShuffleUp(dvec3, uint delta);\n"
-                "dvec4  subgroupShuffleUp(dvec4, uint delta);\n"
-
-                "double subgroupShuffleDown(double, uint delta);\n"
-                "dvec2  subgroupShuffleDown(dvec2, uint delta);\n"
-                "dvec3  subgroupShuffleDown(dvec3, uint delta);\n"
-                "dvec4  subgroupShuffleDown(dvec4, uint delta);\n"
-
-                "double subgroupAdd(double);\n"
-                "dvec2  subgroupAdd(dvec2);\n"
-                "dvec3  subgroupAdd(dvec3);\n"
-                "dvec4  subgroupAdd(dvec4);\n"
-
-                "double subgroupMul(double);\n"
-                "dvec2  subgroupMul(dvec2);\n"
-                "dvec3  subgroupMul(dvec3);\n"
-                "dvec4  subgroupMul(dvec4);\n"
-
-                "double subgroupMin(double);\n"
-                "dvec2  subgroupMin(dvec2);\n"
-                "dvec3  subgroupMin(dvec3);\n"
-                "dvec4  subgroupMin(dvec4);\n"
-
-                "double subgroupMax(double);\n"
-                "dvec2  subgroupMax(dvec2);\n"
-                "dvec3  subgroupMax(dvec3);\n"
-                "dvec4  subgroupMax(dvec4);\n"
-
-                "double subgroupInclusiveAdd(double);\n"
-                "dvec2  subgroupInclusiveAdd(dvec2);\n"
-                "dvec3  subgroupInclusiveAdd(dvec3);\n"
-                "dvec4  subgroupInclusiveAdd(dvec4);\n"
-
-                "double subgroupInclusiveMul(double);\n"
-                "dvec2  subgroupInclusiveMul(dvec2);\n"
-                "dvec3  subgroupInclusiveMul(dvec3);\n"
-                "dvec4  subgroupInclusiveMul(dvec4);\n"
-
-                "double subgroupInclusiveMin(double);\n"
-                "dvec2  subgroupInclusiveMin(dvec2);\n"
-                "dvec3  subgroupInclusiveMin(dvec3);\n"
-                "dvec4  subgroupInclusiveMin(dvec4);\n"
-
-                "double subgroupInclusiveMax(double);\n"
-                "dvec2  subgroupInclusiveMax(dvec2);\n"
-                "dvec3  subgroupInclusiveMax(dvec3);\n"
-                "dvec4  subgroupInclusiveMax(dvec4);\n"
-
-                "double subgroupExclusiveAdd(double);\n"
-                "dvec2  subgroupExclusiveAdd(dvec2);\n"
-                "dvec3  subgroupExclusiveAdd(dvec3);\n"
-                "dvec4  subgroupExclusiveAdd(dvec4);\n"
-
-                "double subgroupExclusiveMul(double);\n"
-                "dvec2  subgroupExclusiveMul(dvec2);\n"
-                "dvec3  subgroupExclusiveMul(dvec3);\n"
-                "dvec4  subgroupExclusiveMul(dvec4);\n"
-
-                "double subgroupExclusiveMin(double);\n"
-                "dvec2  subgroupExclusiveMin(dvec2);\n"
-                "dvec3  subgroupExclusiveMin(dvec3);\n"
-                "dvec4  subgroupExclusiveMin(dvec4);\n"
-
-                "double subgroupExclusiveMax(double);\n"
-                "dvec2  subgroupExclusiveMax(dvec2);\n"
-                "dvec3  subgroupExclusiveMax(dvec3);\n"
-                "dvec4  subgroupExclusiveMax(dvec4);\n"
-
-                "double subgroupClusteredAdd(double, uint);\n"
-                "dvec2  subgroupClusteredAdd(dvec2, uint);\n"
-                "dvec3  subgroupClusteredAdd(dvec3, uint);\n"
-                "dvec4  subgroupClusteredAdd(dvec4, uint);\n"
-
-                "double subgroupClusteredMul(double, uint);\n"
-                "dvec2  subgroupClusteredMul(dvec2, uint);\n"
-                "dvec3  subgroupClusteredMul(dvec3, uint);\n"
-                "dvec4  subgroupClusteredMul(dvec4, uint);\n"
-
-                "double subgroupClusteredMin(double, uint);\n"
-                "dvec2  subgroupClusteredMin(dvec2, uint);\n"
-                "dvec3  subgroupClusteredMin(dvec3, uint);\n"
-                "dvec4  subgroupClusteredMin(dvec4, uint);\n"
-
-                "double subgroupClusteredMax(double, uint);\n"
-                "dvec2  subgroupClusteredMax(dvec2, uint);\n"
-                "dvec3  subgroupClusteredMax(dvec3, uint);\n"
-                "dvec4  subgroupClusteredMax(dvec4, uint);\n"
-
-                "double subgroupQuadBroadcast(double, uint);\n"
-                "dvec2  subgroupQuadBroadcast(dvec2, uint);\n"
-                "dvec3  subgroupQuadBroadcast(dvec3, uint);\n"
-                "dvec4  subgroupQuadBroadcast(dvec4, uint);\n"
-
-                "double subgroupQuadSwapHorizontal(double);\n"
-                "dvec2  subgroupQuadSwapHorizontal(dvec2);\n"
-                "dvec3  subgroupQuadSwapHorizontal(dvec3);\n"
-                "dvec4  subgroupQuadSwapHorizontal(dvec4);\n"
-
-                "double subgroupQuadSwapVertical(double);\n"
-                "dvec2  subgroupQuadSwapVertical(dvec2);\n"
-                "dvec3  subgroupQuadSwapVertical(dvec3);\n"
-                "dvec4  subgroupQuadSwapVertical(dvec4);\n"
-
-                "double subgroupQuadSwapDiagonal(double);\n"
-                "dvec2  subgroupQuadSwapDiagonal(dvec2);\n"
-                "dvec3  subgroupQuadSwapDiagonal(dvec3);\n"
-                "dvec4  subgroupQuadSwapDiagonal(dvec4);\n"
-
-                "uvec4  subgroupPartitionNV(double);\n"
-                "uvec4  subgroupPartitionNV(dvec2);\n"
-                "uvec4  subgroupPartitionNV(dvec3);\n"
-                "uvec4  subgroupPartitionNV(dvec4);\n"
-
-                "double subgroupPartitionedAddNV(double, uvec4 ballot);\n"
-                "dvec2  subgroupPartitionedAddNV(dvec2, uvec4 ballot);\n"
-                "dvec3  subgroupPartitionedAddNV(dvec3, uvec4 ballot);\n"
-                "dvec4  subgroupPartitionedAddNV(dvec4, uvec4 ballot);\n"
-
-                "double subgroupPartitionedMulNV(double, uvec4 ballot);\n"
-                "dvec2  subgroupPartitionedMulNV(dvec2, uvec4 ballot);\n"
-                "dvec3  subgroupPartitionedMulNV(dvec3, uvec4 ballot);\n"
-                "dvec4  subgroupPartitionedMulNV(dvec4, uvec4 ballot);\n"
-
-                "double subgroupPartitionedMinNV(double, uvec4 ballot);\n"
-                "dvec2  subgroupPartitionedMinNV(dvec2, uvec4 ballot);\n"
-                "dvec3  subgroupPartitionedMinNV(dvec3, uvec4 ballot);\n"
-                "dvec4  subgroupPartitionedMinNV(dvec4, uvec4 ballot);\n"
-
-                "double subgroupPartitionedMaxNV(double, uvec4 ballot);\n"
-                "dvec2  subgroupPartitionedMaxNV(dvec2, uvec4 ballot);\n"
-                "dvec3  subgroupPartitionedMaxNV(dvec3, uvec4 ballot);\n"
-                "dvec4  subgroupPartitionedMaxNV(dvec4, uvec4 ballot);\n"
-
-                "double subgroupPartitionedInclusiveAddNV(double, uvec4 ballot);\n"
-                "dvec2  subgroupPartitionedInclusiveAddNV(dvec2, uvec4 ballot);\n"
-                "dvec3  subgroupPartitionedInclusiveAddNV(dvec3, uvec4 ballot);\n"
-                "dvec4  subgroupPartitionedInclusiveAddNV(dvec4, uvec4 ballot);\n"
-
-                "double subgroupPartitionedInclusiveMulNV(double, uvec4 ballot);\n"
-                "dvec2  subgroupPartitionedInclusiveMulNV(dvec2, uvec4 ballot);\n"
-                "dvec3  subgroupPartitionedInclusiveMulNV(dvec3, uvec4 ballot);\n"
-                "dvec4  subgroupPartitionedInclusiveMulNV(dvec4, uvec4 ballot);\n"
-
-                "double subgroupPartitionedInclusiveMinNV(double, uvec4 ballot);\n"
-                "dvec2  subgroupPartitionedInclusiveMinNV(dvec2, uvec4 ballot);\n"
-                "dvec3  subgroupPartitionedInclusiveMinNV(dvec3, uvec4 ballot);\n"
-                "dvec4  subgroupPartitionedInclusiveMinNV(dvec4, uvec4 ballot);\n"
-
-                "double subgroupPartitionedInclusiveMaxNV(double, uvec4 ballot);\n"
-                "dvec2  subgroupPartitionedInclusiveMaxNV(dvec2, uvec4 ballot);\n"
-                "dvec3  subgroupPartitionedInclusiveMaxNV(dvec3, uvec4 ballot);\n"
-                "dvec4  subgroupPartitionedInclusiveMaxNV(dvec4, uvec4 ballot);\n"
-
-                "double subgroupPartitionedExclusiveAddNV(double, uvec4 ballot);\n"
-                "dvec2  subgroupPartitionedExclusiveAddNV(dvec2, uvec4 ballot);\n"
-                "dvec3  subgroupPartitionedExclusiveAddNV(dvec3, uvec4 ballot);\n"
-                "dvec4  subgroupPartitionedExclusiveAddNV(dvec4, uvec4 ballot);\n"
-
-                "double subgroupPartitionedExclusiveMulNV(double, uvec4 ballot);\n"
-                "dvec2  subgroupPartitionedExclusiveMulNV(dvec2, uvec4 ballot);\n"
-                "dvec3  subgroupPartitionedExclusiveMulNV(dvec3, uvec4 ballot);\n"
-                "dvec4  subgroupPartitionedExclusiveMulNV(dvec4, uvec4 ballot);\n"
-
-                "double subgroupPartitionedExclusiveMinNV(double, uvec4 ballot);\n"
-                "dvec2  subgroupPartitionedExclusiveMinNV(dvec2, uvec4 ballot);\n"
-                "dvec3  subgroupPartitionedExclusiveMinNV(dvec3, uvec4 ballot);\n"
-                "dvec4  subgroupPartitionedExclusiveMinNV(dvec4, uvec4 ballot);\n"
-
-                "double subgroupPartitionedExclusiveMaxNV(double, uvec4 ballot);\n"
-                "dvec2  subgroupPartitionedExclusiveMaxNV(dvec2, uvec4 ballot);\n"
-                "dvec3  subgroupPartitionedExclusiveMaxNV(dvec3, uvec4 ballot);\n"
-                "dvec4  subgroupPartitionedExclusiveMaxNV(dvec4, uvec4 ballot);\n"
-
-                "\n");
+            if (!logicalOp) {
+                for (size_t j = 0; j < sizeof(floatTypes)/sizeof(floatTypes[0]); ++j) {
+                    snprintf(buf, bufSize, op, floatTypes[j], floatTypes[j]);
+                    commonBuiltins.append(buf);
+                }
+                if (profile != EEsProfile && version >= 400) {
+                    for (size_t j = 0; j < sizeof(doubleTypes)/sizeof(doubleTypes[0]); ++j) {
+                        snprintf(buf, bufSize, op, doubleTypes[j], doubleTypes[j]);
+                        commonBuiltins.append(buf);
+                    }
+                }
             }
+            if (!mathOp) {
+                for (size_t j = 0; j < sizeof(boolTypes)/sizeof(boolTypes[0]); ++j) {
+                    snprintf(buf, bufSize, op, boolTypes[j], boolTypes[j]);
+                    commonBuiltins.append(buf);
+                }
+            }
+            for (size_t j = 0; j < sizeof(intTypes)/sizeof(intTypes[0]); ++j) {
+                snprintf(buf, bufSize, op, intTypes[j], intTypes[j]);
+                commonBuiltins.append(buf);
+            }
+        }
 
         stageBuiltins[EShLangCompute].append(
             "void subgroupMemoryBarrierShared();"
@@ -3721,7 +2796,7 @@
             "\n");
     }
 
-    if ((profile != EEsProfile && version >= 450) || 
+    if ((profile != EEsProfile && version >= 450) ||
         (profile == EEsProfile && version >= 320)) {
         commonBuiltins.append(
             "struct gl_TextureFootprint2DNV {"
@@ -5047,7 +4122,7 @@
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
         stageBuiltins[EShLangMeshNV].append(
             "void writePackedPrimitiveIndices4x8NV(uint, uint);"
-            "\n");   
+            "\n");
     }
 #endif
 
@@ -5986,7 +5061,7 @@
 
     // GL_ARB_shader_ballot
     if (profile != EEsProfile && version >= 450) {
-        const char* ballotDecls = 
+        const char* ballotDecls =
             "uniform uint gl_SubGroupSizeARB;"
             "in uint     gl_SubGroupInvocationARB;"
             "in uint64_t gl_SubGroupEqMaskARB;"
@@ -5995,7 +5070,7 @@
             "in uint64_t gl_SubGroupLeMaskARB;"
             "in uint64_t gl_SubGroupLtMaskARB;"
             "\n";
-        const char* fragmentBallotDecls = 
+        const char* fragmentBallotDecls =
             "uniform uint gl_SubGroupSizeARB;"
             "flat in uint     gl_SubGroupInvocationARB;"
             "flat in uint64_t gl_SubGroupEqMaskARB;"
@@ -6287,7 +5362,7 @@
                             continue;
 
                         // Loop over the bTypes
-                        for (int bType = 0; bType < sizeof(bTypes)/sizeof(TBasicType); ++bType) {
+                        for (size_t bType = 0; bType < sizeof(bTypes)/sizeof(TBasicType); ++bType) {
 #ifndef GLSLANG_WEB
                             if (bTypes[bType] == EbtFloat16 && (profile == EEsProfile || version < 450))
                                 continue;
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 93d41f7..429e1e8 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -562,6 +562,237 @@
     return true;
 }
 
+bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& newOp) const
+{
+    switch (dst) {
+#ifndef GLSLANG_WEB
+    case EbtDouble:
+        switch (src) {
+        case EbtUint:    newOp = EOpConvUintToDouble;    break;
+        case EbtBool:    newOp = EOpConvBoolToDouble;    break;
+        case EbtFloat:   newOp = EOpConvFloatToDouble;   break;
+        case EbtInt:     newOp = EOpConvIntToDouble;     break;
+        case EbtInt8:    newOp = EOpConvInt8ToDouble;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToDouble;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToDouble;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToDouble;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
+        case EbtInt64:   newOp = EOpConvInt64ToDouble;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToDouble;  break;
+        default:
+            return false;
+        }
+        break;
+#endif
+    case EbtFloat:
+        switch (src) {
+        case EbtInt:     newOp = EOpConvIntToFloat;     break;
+        case EbtUint:    newOp = EOpConvUintToFloat;    break;
+        case EbtBool:    newOp = EOpConvBoolToFloat;    break;
+#ifndef GLSLANG_WEB
+        case EbtDouble:  newOp = EOpConvDoubleToFloat;  break;
+        case EbtInt8:    newOp = EOpConvInt8ToFloat;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToFloat;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToFloat;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToFloat;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
+        case EbtInt64:   newOp = EOpConvInt64ToFloat;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToFloat;  break;
+#endif
+        default:
+            return false;
+        }
+        break;
+#ifndef GLSLANG_WEB
+    case EbtFloat16:
+        switch (src) {
+        case EbtInt8:   newOp = EOpConvInt8ToFloat16;   break;
+        case EbtUint8:  newOp = EOpConvUint8ToFloat16;  break;
+        case EbtInt16:  newOp = EOpConvInt16ToFloat16;  break;
+        case EbtUint16: newOp = EOpConvUint16ToFloat16; break;
+        case EbtInt:    newOp = EOpConvIntToFloat16;    break;
+        case EbtUint:   newOp = EOpConvUintToFloat16;   break;
+        case EbtBool:   newOp = EOpConvBoolToFloat16;   break;
+        case EbtFloat:  newOp = EOpConvFloatToFloat16;  break;
+        case EbtDouble: newOp = EOpConvDoubleToFloat16; break;
+        case EbtInt64:  newOp = EOpConvInt64ToFloat16;  break;
+        case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
+        default:
+            return false;
+        }
+        break;
+#endif
+    case EbtBool:
+        switch (src) {
+        case EbtInt:     newOp = EOpConvIntToBool;     break;
+        case EbtUint:    newOp = EOpConvUintToBool;    break;
+        case EbtFloat:   newOp = EOpConvFloatToBool;   break;
+#ifndef GLSLANG_WEB
+        case EbtDouble:  newOp = EOpConvDoubleToBool;  break;
+        case EbtInt8:    newOp = EOpConvInt8ToBool;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToBool;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToBool;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToBool;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
+        case EbtInt64:   newOp = EOpConvInt64ToBool;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToBool;  break;
+#endif
+        default:
+            return false;
+        }
+        break;
+#ifndef GLSLANG_WEB
+    case EbtInt8:
+        switch (src) {
+        case EbtUint8:   newOp = EOpConvUint8ToInt8;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToInt8;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToInt8;  break;
+        case EbtInt:     newOp = EOpConvIntToInt8;     break;
+        case EbtUint:    newOp = EOpConvUintToInt8;    break;
+        case EbtInt64:   newOp = EOpConvInt64ToInt8;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToInt8;  break;
+        case EbtBool:    newOp = EOpConvBoolToInt8;    break;
+        case EbtFloat:   newOp = EOpConvFloatToInt8;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToInt8;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt8; break;
+        default:
+            return false;
+        }
+        break;
+    case EbtUint8:
+        switch (src) {
+        case EbtInt8:    newOp = EOpConvInt8ToUint8;    break;
+        case EbtInt16:   newOp = EOpConvInt16ToUint8;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToUint8;  break;
+        case EbtInt:     newOp = EOpConvIntToUint8;     break;
+        case EbtUint:    newOp = EOpConvUintToUint8;    break;
+        case EbtInt64:   newOp = EOpConvInt64ToUint8;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToUint8;  break;
+        case EbtBool:    newOp = EOpConvBoolToUint8;    break;
+        case EbtFloat:   newOp = EOpConvFloatToUint8;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToUint8;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint8; break;
+        default:
+            return false;
+        }
+        break;
+
+    case EbtInt16:
+        switch (src) {
+        case EbtUint8:   newOp = EOpConvUint8ToInt16;   break;
+        case EbtInt8:    newOp = EOpConvInt8ToInt16;    break;
+        case EbtUint16:  newOp = EOpConvUint16ToInt16;  break;
+        case EbtInt:     newOp = EOpConvIntToInt16;     break;
+        case EbtUint:    newOp = EOpConvUintToInt16;    break;
+        case EbtInt64:   newOp = EOpConvInt64ToInt16;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToInt16;  break;
+        case EbtBool:    newOp = EOpConvBoolToInt16;    break;
+        case EbtFloat:   newOp = EOpConvFloatToInt16;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToInt16;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
+        default:
+            return false;
+        }
+        break;
+    case EbtUint16:
+        switch (src) {
+        case EbtInt8:    newOp = EOpConvInt8ToUint16;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToUint16;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToUint16;   break;
+        case EbtInt:     newOp = EOpConvIntToUint16;     break;
+        case EbtUint:    newOp = EOpConvUintToUint16;    break;
+        case EbtInt64:   newOp = EOpConvInt64ToUint16;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToUint16;  break;
+        case EbtBool:    newOp = EOpConvBoolToUint16;    break;
+        case EbtFloat:   newOp = EOpConvFloatToUint16;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToUint16;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
+        default:
+            return false;
+        }
+        break;
+#endif
+
+    case EbtInt:
+        switch (src) {
+        case EbtUint:    newOp = EOpConvUintToInt;    break;
+        case EbtBool:    newOp = EOpConvBoolToInt;    break;
+        case EbtFloat:   newOp = EOpConvFloatToInt;   break;
+#ifndef GLSLANG_WEB
+        case EbtInt8:    newOp = EOpConvInt8ToInt;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToInt;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToInt;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToInt;  break;
+        case EbtDouble:  newOp = EOpConvDoubleToInt;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
+        case EbtInt64:   newOp = EOpConvInt64ToInt;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToInt;  break;
+#endif
+        default:
+            return false;
+        }
+        break;
+    case EbtUint:
+        switch (src) {
+        case EbtInt:     newOp = EOpConvIntToUint;     break;
+        case EbtBool:    newOp = EOpConvBoolToUint;    break;
+        case EbtFloat:   newOp = EOpConvFloatToUint;   break;
+#ifndef GLSLANG_WEB
+        case EbtInt8:    newOp = EOpConvInt8ToUint;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToUint;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToUint;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToUint;  break;
+        case EbtDouble:  newOp = EOpConvDoubleToUint;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
+        case EbtInt64:   newOp = EOpConvInt64ToUint;   break;
+        case EbtUint64:  newOp = EOpConvUint64ToUint;  break;
+#endif
+        default:
+            return false;
+        }
+        break;
+#ifndef GLSLANG_WEB
+    case EbtInt64:
+        switch (src) {
+        case EbtInt8:    newOp = EOpConvInt8ToInt64;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToInt64;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToInt64;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToInt64;  break;
+        case EbtInt:     newOp = EOpConvIntToInt64;     break;
+        case EbtUint:    newOp = EOpConvUintToInt64;    break;
+        case EbtBool:    newOp = EOpConvBoolToInt64;    break;
+        case EbtFloat:   newOp = EOpConvFloatToInt64;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToInt64;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
+        case EbtUint64:  newOp = EOpConvUint64ToInt64;  break;
+        default:
+            return false;
+        }
+        break;
+    case EbtUint64:
+        switch (src) {
+        case EbtInt8:    newOp = EOpConvInt8ToUint64;    break;
+        case EbtUint8:   newOp = EOpConvUint8ToUint64;   break;
+        case EbtInt16:   newOp = EOpConvInt16ToUint64;   break;
+        case EbtUint16:  newOp = EOpConvUint16ToUint64;  break;
+        case EbtInt:     newOp = EOpConvIntToUint64;     break;
+        case EbtUint:    newOp = EOpConvUintToUint64;    break;
+        case EbtBool:    newOp = EOpConvBoolToUint64;    break;
+        case EbtFloat:   newOp = EOpConvFloatToUint64;   break;
+        case EbtDouble:  newOp = EOpConvDoubleToUint64;  break;
+        case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
+        case EbtInt64:   newOp = EOpConvInt64ToUint64;   break;
+        default:
+            return false;
+        }
+        break;
+#endif
+    default:
+        return false;
+    }
+    return true;
+}
+
 // This is 'mechanism' here, it does any conversion told.
 // It is about basic type, not about shape.
 // The policy comes from the shader or the calling code.
@@ -608,230 +839,7 @@
             return nullptr;
     }
 
-    switch (convertTo) {
-#ifndef GLSLANG_WEB
-    case EbtDouble:
-        switch (node->getBasicType()) {
-        case EbtUint:    newOp = EOpConvUintToDouble;    break;
-        case EbtBool:    newOp = EOpConvBoolToDouble;    break;
-        case EbtFloat:   newOp = EOpConvFloatToDouble;   break;
-        case EbtInt:     newOp = EOpConvIntToDouble;     break;
-        case EbtInt8:    newOp = EOpConvInt8ToDouble;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToDouble;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToDouble;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToDouble;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
-        case EbtInt64:   newOp = EOpConvInt64ToDouble;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToDouble;  break;
-        default:
-            return nullptr;
-        }
-        break;
-#endif
-    case EbtFloat:
-        switch (node->getBasicType()) {
-        case EbtInt:     newOp = EOpConvIntToFloat;     break;
-        case EbtUint:    newOp = EOpConvUintToFloat;    break;
-        case EbtBool:    newOp = EOpConvBoolToFloat;    break;
-#ifndef GLSLANG_WEB
-        case EbtDouble:  newOp = EOpConvDoubleToFloat;  break;
-        case EbtInt8:    newOp = EOpConvInt8ToFloat;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToFloat;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToFloat;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToFloat;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
-        case EbtInt64:   newOp = EOpConvInt64ToFloat;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToFloat;  break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-#ifndef GLSLANG_WEB
-    case EbtFloat16:
-        switch (node->getBasicType()) {
-        case EbtInt8:   newOp = EOpConvInt8ToFloat16;   break;
-        case EbtUint8:  newOp = EOpConvUint8ToFloat16;  break;
-        case EbtInt16:  newOp = EOpConvInt16ToFloat16;  break;
-        case EbtUint16: newOp = EOpConvUint16ToFloat16; break;
-        case EbtInt:    newOp = EOpConvIntToFloat16;    break;
-        case EbtUint:   newOp = EOpConvUintToFloat16;   break;
-        case EbtBool:   newOp = EOpConvBoolToFloat16;   break;
-        case EbtFloat:  newOp = EOpConvFloatToFloat16;  break;
-        case EbtDouble: newOp = EOpConvDoubleToFloat16; break;
-        case EbtInt64:  newOp = EOpConvInt64ToFloat16;  break;
-        case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
-        default:
-            return nullptr;
-        }
-        break;
-#endif
-    case EbtBool:
-        switch (node->getBasicType()) {
-        case EbtInt:     newOp = EOpConvIntToBool;     break;
-        case EbtUint:    newOp = EOpConvUintToBool;    break;
-        case EbtFloat:   newOp = EOpConvFloatToBool;   break;
-#ifndef GLSLANG_WEB
-        case EbtDouble:  newOp = EOpConvDoubleToBool;  break;
-        case EbtInt8:    newOp = EOpConvInt8ToBool;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToBool;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToBool;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToBool;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
-        case EbtInt64:   newOp = EOpConvInt64ToBool;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToBool;  break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-#ifndef GLSLANG_WEB
-    case EbtInt8:
-        switch (node->getBasicType()) {
-        case EbtUint8:   newOp = EOpConvUint8ToInt8;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToInt8;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToInt8;  break;
-        case EbtInt:     newOp = EOpConvIntToInt8;     break;
-        case EbtUint:    newOp = EOpConvUintToInt8;    break;
-        case EbtInt64:   newOp = EOpConvInt64ToInt8;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToInt8;  break;
-        case EbtBool:    newOp = EOpConvBoolToInt8;    break;
-        case EbtFloat:   newOp = EOpConvFloatToInt8;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToInt8;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToInt8; break;
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint8:
-        switch (node->getBasicType()) {
-        case EbtInt8:    newOp = EOpConvInt8ToUint8;    break;
-        case EbtInt16:   newOp = EOpConvInt16ToUint8;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToUint8;  break;
-        case EbtInt:     newOp = EOpConvIntToUint8;     break;
-        case EbtUint:    newOp = EOpConvUintToUint8;    break;
-        case EbtInt64:   newOp = EOpConvInt64ToUint8;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToUint8;  break;
-        case EbtBool:    newOp = EOpConvBoolToUint8;    break;
-        case EbtFloat:   newOp = EOpConvFloatToUint8;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToUint8;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToUint8; break;
-        default:
-            return nullptr;
-        }
-        break;
-
-    case EbtInt16:
-        switch (node->getBasicType()) {
-        case EbtUint8:   newOp = EOpConvUint8ToInt16;   break;
-        case EbtInt8:    newOp = EOpConvInt8ToInt16;    break;
-        case EbtUint16:  newOp = EOpConvUint16ToInt16;  break;
-        case EbtInt:     newOp = EOpConvIntToInt16;     break;
-        case EbtUint:    newOp = EOpConvUintToInt16;    break;
-        case EbtInt64:   newOp = EOpConvInt64ToInt16;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToInt16;  break;
-        case EbtBool:    newOp = EOpConvBoolToInt16;    break;
-        case EbtFloat:   newOp = EOpConvFloatToInt16;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToInt16;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint16:
-        switch (node->getBasicType()) {
-        case EbtInt8:    newOp = EOpConvInt8ToUint16;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToUint16;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToUint16;   break;
-        case EbtInt:     newOp = EOpConvIntToUint16;     break;
-        case EbtUint:    newOp = EOpConvUintToUint16;    break;
-        case EbtInt64:   newOp = EOpConvInt64ToUint16;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToUint16;  break;
-        case EbtBool:    newOp = EOpConvBoolToUint16;    break;
-        case EbtFloat:   newOp = EOpConvFloatToUint16;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToUint16;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
-        default:
-            return nullptr;
-        }
-        break;
-#endif
-
-    case EbtInt:
-        switch (node->getBasicType()) {
-        case EbtUint:    newOp = EOpConvUintToInt;    break;
-        case EbtBool:    newOp = EOpConvBoolToInt;    break;
-        case EbtFloat:   newOp = EOpConvFloatToInt;   break;
-#ifndef GLSLANG_WEB
-        case EbtInt8:    newOp = EOpConvInt8ToInt;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToInt;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToInt;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToInt;  break;
-        case EbtDouble:  newOp = EOpConvDoubleToInt;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
-        case EbtInt64:   newOp = EOpConvInt64ToInt;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToInt;  break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint:
-        switch (node->getBasicType()) {
-        case EbtInt:     newOp = EOpConvIntToUint;     break;
-        case EbtBool:    newOp = EOpConvBoolToUint;    break;
-        case EbtFloat:   newOp = EOpConvFloatToUint;   break;
-#ifndef GLSLANG_WEB
-        case EbtInt8:    newOp = EOpConvInt8ToUint;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToUint;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToUint;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToUint;  break;
-        case EbtDouble:  newOp = EOpConvDoubleToUint;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
-        case EbtInt64:   newOp = EOpConvInt64ToUint;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToUint;  break;
-#endif
-        default:
-            return nullptr;
-        }
-        break;
-#ifndef GLSLANG_WEB
-    case EbtInt64:
-        switch (node->getBasicType()) {
-        case EbtInt8:    newOp = EOpConvInt8ToInt64;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToInt64;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToInt64;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToInt64;  break;
-        case EbtInt:     newOp = EOpConvIntToInt64;     break;
-        case EbtUint:    newOp = EOpConvUintToInt64;    break;
-        case EbtBool:    newOp = EOpConvBoolToInt64;    break;
-        case EbtFloat:   newOp = EOpConvFloatToInt64;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToInt64;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
-        case EbtUint64:  newOp = EOpConvUint64ToInt64;  break;
-        default:
-            return nullptr;
-        }
-        break;
-    case EbtUint64:
-        switch (node->getBasicType()) {
-        case EbtInt8:    newOp = EOpConvInt8ToUint64;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToUint64;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToUint64;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToUint64;  break;
-        case EbtInt:     newOp = EOpConvIntToUint64;     break;
-        case EbtUint:    newOp = EOpConvUintToUint64;    break;
-        case EbtBool:    newOp = EOpConvBoolToUint64;    break;
-        case EbtFloat:   newOp = EOpConvFloatToUint64;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToUint64;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
-        case EbtInt64:   newOp = EOpConvInt64ToUint64;   break;
-        default:
-            return nullptr;
-        }
-        break;
-#endif
-    default:
+    if (!buildConvertOp(convertTo, node->getBasicType(), newOp)) {
         return nullptr;
     }
 
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 08fa610..b381be9 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -2155,9 +2155,12 @@
         break;
 
     case EOpSubgroupBroadcast:
-        // <id> must be an integral constant expression.
-        if ((*argp)[1]->getAsConstantUnion() == nullptr)
-            error(loc, "argument must be compile-time constant", "id", "");
+    case EOpSubgroupQuadBroadcast:
+        if (spvVersion.spv < EShTargetSpv_1_5) {
+            // <id> must be an integral constant expression.
+            if ((*argp)[1]->getAsConstantUnion() == nullptr)
+                error(loc, "argument must be compile-time constant", "id", "");
+        }
         break;
 
     case EOpBarrier:
@@ -2202,6 +2205,30 @@
         // these require SPIR-V 1.3
         if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_3)
             error(loc, "requires SPIR-V 1.3", "subgroup op", "");
+
+        // Check that if extended types are being used that the correct extensions are enabled.
+        if (arg0 != nullptr) {
+            const TType& type = arg0->getType();
+            switch (type.getBasicType()) {
+            default:
+                break;
+            case EbtInt8:
+            case EbtUint8:
+                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int8, type.getCompleteString().c_str());
+                break;
+            case EbtInt16:
+            case EbtUint16:
+                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int16, type.getCompleteString().c_str());
+                break;
+            case EbtInt64:
+            case EbtUint64:
+                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int64, type.getCompleteString().c_str());
+                break;
+            case EbtFloat16:
+                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_float16, type.getCompleteString().c_str());
+                break;
+            }
+        }
     }
 }
 
@@ -2748,10 +2775,25 @@
 //
 bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, TFunction& function, TOperator op, TType& type)
 {
-    type.shallowCopy(function.getType());
+    // See if the constructor does not establish the main type, only requalifies
+    // it, in which case the type comes from the argument instead of from the
+    // constructor function.
+    switch (op) {
+    case EOpConstructNonuniform:
+        if (node != nullptr && node->getAsTyped() != nullptr) {
+            type.shallowCopy(node->getAsTyped()->getType());
+            type.getQualifier().makeTemporary();
+            type.getQualifier().nonUniform = true;
+        }
+        break;
+    default:
+        type.shallowCopy(function.getType());
+        break;
+    }
 
+    // See if it's a matrix
     bool constructingMatrix = false;
-    switch(op) {
+    switch (op) {
 #ifndef GLSLANG_WEB
     case EOpConstructTextureSampler:
         return constructorTextureSamplerError(loc, function);
@@ -2845,6 +2887,8 @@
             }
         }
     }
+    if (op == EOpConstructNonuniform)
+        constType = false;
 
 #ifndef GLSLANG_WEB
     switch (op) {
@@ -5106,7 +5150,8 @@
         return;
     } else if (id == "location") {
         profileRequires(loc, EEsProfile, 300, nullptr, "location");
-        const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
+        const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location }; 
+        // GL_ARB_explicit_uniform_location requires 330 or GL_ARB_explicit_attrib_location we do not need to add it here
         profileRequires(loc, ~EEsProfile, 330, 2, exts, "location");
         if ((unsigned int)value >= TQualifier::layoutLocationEnd)
             error(loc, "location is too large", id.c_str(), "");
@@ -5360,14 +5405,17 @@
             }
             if (id == "local_size_x") {
                 publicType.shaderQualifiers.localSize[0] = value;
+                publicType.shaderQualifiers.localSizeNotDefault[0] = true;
                 return;
             }
             if (id == "local_size_y") {
                 publicType.shaderQualifiers.localSize[1] = value;
+                publicType.shaderQualifiers.localSizeNotDefault[1] = true;
                 return;
             }
             if (id == "local_size_z") {
                 publicType.shaderQualifiers.localSize[2] = value;
+                publicType.shaderQualifiers.localSizeNotDefault[2] = true;
                 return;
             }
             if (spvVersion.spv != 0) {
@@ -5863,8 +5911,9 @@
         case EvqBuffer:
         {
             const char* feature = "location qualifier on uniform or buffer";
-            requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature);
-            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, feature);
+            requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile | ENoProfile, feature);
+            profileRequires(loc, ~EEsProfile, 330, E_GL_ARB_explicit_attrib_location, feature);
+            profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_explicit_uniform_location, feature);
             profileRequires(loc, EEsProfile, 310, nullptr, feature);
             break;
         }
@@ -6912,6 +6961,12 @@
         break;
 
     case EOpConstructUVec2:
+        if (node->getType().getBasicType() == EbtReference) {
+            requireExtensions(loc, 1, &E_GL_EXT_buffer_reference_uvec2, "reference conversion to uvec2");
+            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUvec2, true, node,
+                type);
+            return newNode;
+        }
     case EOpConstructUVec3:
     case EOpConstructUVec4:
     case EOpConstructUint:
@@ -7058,8 +7113,7 @@
 
     case EOpConstructNonuniform:
         // Make a nonuniform copy of node
-        newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpCopyObject, true, node, node->getType());
-        newNode->getWritableType().getQualifier().nonUniform = true;
+        newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpCopyObject, true, node, type);
         return newNode;
 
     case EOpConstructReference:
@@ -7069,7 +7123,15 @@
             return newNode;
         // construct reference from uint64
         } else if (node->getType().isScalar() && node->getType().getBasicType() == EbtUint64) {
-            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToPtr, true, node, type);
+            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToPtr, true, node,
+                type);
+            return newNode;
+        // construct reference from uvec2
+        } else if (node->getType().isVector() && node->getType().getBasicType() == EbtUint &&
+                   node->getVectorSize() == 2) {
+            requireExtensions(loc, 1, &E_GL_EXT_buffer_reference_uvec2, "uvec2 conversion to reference");
+            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUvec2ToPtr, true, node,
+                type);
             return newNode;
         } else {
             return nullptr;
@@ -7945,7 +8007,7 @@
             error(loc, "can only apply to 'in'", "point_mode", "");
     }
     for (int i = 0; i < 3; ++i) {
-        if (publicType.shaderQualifiers.localSize[i] > 1) {
+        if (publicType.shaderQualifiers.localSizeNotDefault[i]) {
             if (publicType.qualifier.storage == EvqVaryingIn) {
                 if (! intermediate.setLocalSize(i, publicType.shaderQualifiers.localSize[i]))
                     error(loc, "cannot change previously set size", "local_size", "");
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 5cee05e..39363f1 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -283,7 +283,7 @@
                   const TString* entryPoint = nullptr);
     virtual ~TParseContext();
 
-    bool obeyPrecisionQualifiers() const { return precisionManager.respectingPrecisionQualifiers(); };
+    bool obeyPrecisionQualifiers() const { return precisionManager.respectingPrecisionQualifiers(); }
     void setPrecisionDefaults();
 
     void setLimits(const TBuiltInResource&) override;
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
old mode 100755
new mode 100644
index f63305e..9b3cdc6
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -2048,6 +2048,9 @@
 
 unsigned TProgram::getLocalSize(int dim) const                        { return reflection->getLocalSize(dim); }
 int TProgram::getReflectionIndex(const char* name) const              { return reflection->getIndex(name); }
+int TProgram::getReflectionPipeIOIndex(const char* name, const bool inOrOut) const
+                                                                      { return reflection->getPipeIOIndex(name, inOrOut); }
+
 int TProgram::getNumUniformVariables() const                          { return reflection->getNumUniforms(); }
 const TObjectReflection& TProgram::getUniform(int index) const        { return reflection->getUniform(index); }
 int TProgram::getNumUniformBlocks() const                             { return reflection->getNumUniformBlocks(); }
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
old mode 100755
new mode 100644
diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h
old mode 100755
new mode 100644
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index eb1314a..bccf6a5 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -174,6 +174,7 @@
     extensionBehavior[E_GL_ARB_texture_cube_map_array]       = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_texture_lod]           = EBhDisable;
     extensionBehavior[E_GL_ARB_explicit_attrib_location]     = EBhDisable;
+    extensionBehavior[E_GL_ARB_explicit_uniform_location]    = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_image_load_store]      = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_atomic_counters]       = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_draw_parameters]       = EBhDisable;
@@ -214,6 +215,7 @@
     extensionBehavior[E_GL_EXT_fragment_invocation_density]             = EBhDisable;
     extensionBehavior[E_GL_EXT_buffer_reference]                        = EBhDisable;
     extensionBehavior[E_GL_EXT_buffer_reference2]                       = EBhDisable;
+    extensionBehavior[E_GL_EXT_buffer_reference_uvec2]                  = EBhDisable;
     extensionBehavior[E_GL_EXT_demote_to_helper_invocation]             = EBhDisable;
 
     extensionBehavior[E_GL_EXT_shader_16bit_storage]                    = EBhDisable;
@@ -300,6 +302,12 @@
     extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float16] = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float32] = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float64] = EBhDisable;
+
+    // subgroup extended types
+    extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int8]    = EBhDisable;
+    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;
 }
 #endif // GLSLANG_WEB
 
@@ -371,6 +379,7 @@
             "#define GL_ARB_texture_cube_map_array 1\n"
             "#define GL_ARB_shader_texture_lod 1\n"
             "#define GL_ARB_explicit_attrib_location 1\n"
+            "#define GL_ARB_explicit_uniform_location 1\n"
             "#define GL_ARB_shader_image_load_store 1\n"
             "#define GL_ARB_shader_atomic_counters 1\n"
             "#define GL_ARB_shader_draw_parameters 1\n"
@@ -398,6 +407,7 @@
             "#define GL_EXT_fragment_invocation_density 1\n"
             "#define GL_EXT_buffer_reference 1\n"
             "#define GL_EXT_buffer_reference2 1\n"
+            "#define GL_EXT_buffer_reference_uvec2 1\n"
             "#define GL_EXT_demote_to_helper_invocation 1\n"
 
             // GL_KHR_shader_subgroup
@@ -447,6 +457,11 @@
             "#define GL_EXT_shader_explicit_arithmetic_types_float16 1\n"
             "#define GL_EXT_shader_explicit_arithmetic_types_float32 1\n"
             "#define GL_EXT_shader_explicit_arithmetic_types_float64 1\n"
+
+            "#define GL_EXT_shader_subgroup_extended_types_int8 1\n"
+            "#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"
             ;
 
         if (version >= 150) {
@@ -822,10 +837,20 @@
         updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
     else if (strcmp(extension, "GL_NV_shader_subgroup_partitioned") == 0)
         updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
-    else if (strcmp(extension, "GL_EXT_buffer_reference2") == 0)
+    else if (strcmp(extension, "GL_EXT_buffer_reference2") == 0 ||
+             strcmp(extension, "GL_EXT_buffer_reference_uvec2") == 0)
         updateExtensionBehavior(line, "GL_EXT_buffer_reference", behaviorString);
     else if (strcmp(extension, "GL_NV_integer_cooperative_matrix") == 0)
         updateExtensionBehavior(line, "GL_NV_cooperative_matrix", behaviorString);
+    // subgroup extended types to explicit types
+    else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int8") == 0)
+        updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int8", behaviorString);
+    else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int16") == 0)
+        updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int16", behaviorString);
+    else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int64") == 0)
+        updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int64", behaviorString);
+    else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_float16") == 0)
+        updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_float16", behaviorString);
 }
 
 void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior)
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index 9535c89..84fafd7 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -126,6 +126,7 @@
 const char* const E_GL_ARB_texture_cube_map_array       = "GL_ARB_texture_cube_map_array";
 const char* const E_GL_ARB_shader_texture_lod           = "GL_ARB_shader_texture_lod";
 const char* const E_GL_ARB_explicit_attrib_location     = "GL_ARB_explicit_attrib_location";
+const char* const E_GL_ARB_explicit_uniform_location    = "GL_ARB_explicit_uniform_location";
 const char* const E_GL_ARB_shader_image_load_store      = "GL_ARB_shader_image_load_store";
 const char* const E_GL_ARB_shader_atomic_counters       = "GL_ARB_shader_atomic_counters";
 const char* const E_GL_ARB_shader_draw_parameters       = "GL_ARB_shader_draw_parameters";
@@ -174,6 +175,7 @@
 const char* const E_GL_EXT_fragment_invocation_density      = "GL_EXT_fragment_invocation_density";
 const char* const E_GL_EXT_buffer_reference                 = "GL_EXT_buffer_reference";
 const char* const E_GL_EXT_buffer_reference2                = "GL_EXT_buffer_reference2";
+const char* const E_GL_EXT_buffer_reference_uvec2           = "GL_EXT_buffer_reference_uvec2";
 const char* const E_GL_EXT_demote_to_helper_invocation      = "GL_EXT_demote_to_helper_invocation";
 const char* const E_GL_EXT_shader_realtime_clock            = "GL_EXT_shader_realtime_clock";
 
@@ -257,7 +259,7 @@
 const char* const E_GL_OES_texture_buffer                       = "GL_OES_texture_buffer";
 const char* const E_GL_OES_texture_cube_map_array               = "GL_OES_texture_cube_map_array";
 
-// KHX
+// EXT
 const char* const E_GL_EXT_shader_explicit_arithmetic_types          = "GL_EXT_shader_explicit_arithmetic_types";
 const char* const E_GL_EXT_shader_explicit_arithmetic_types_int8     = "GL_EXT_shader_explicit_arithmetic_types_int8";
 const char* const E_GL_EXT_shader_explicit_arithmetic_types_int16    = "GL_EXT_shader_explicit_arithmetic_types_int16";
@@ -267,6 +269,11 @@
 const char* const E_GL_EXT_shader_explicit_arithmetic_types_float32  = "GL_EXT_shader_explicit_arithmetic_types_float32";
 const char* const E_GL_EXT_shader_explicit_arithmetic_types_float64  = "GL_EXT_shader_explicit_arithmetic_types_float64";
 
+const char* const E_GL_EXT_shader_subgroup_extended_types_int8    = "GL_EXT_shader_subgroup_extended_types_int8";
+const char* const E_GL_EXT_shader_subgroup_extended_types_int16   = "GL_EXT_shader_subgroup_extended_types_int16";
+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";
+
 // 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/attribute.h b/glslang/MachineIndependent/attribute.h
index 844ce45..38a943d 100644
--- a/glslang/MachineIndependent/attribute.h
+++ b/glslang/MachineIndependent/attribute.h
@@ -76,7 +76,49 @@
         EatMaxIterations,
         EatIterationMultiple,
         EatPeelCount,
-        EatPartialCount
+        EatPartialCount,
+        EatFormatRgba32f,
+        EatFormatRgba16f,
+        EatFormatR32f,
+        EatFormatRgba8,
+        EatFormatRgba8Snorm,
+        EatFormatRg32f,
+        EatFormatRg16f,
+        EatFormatR11fG11fB10f,
+        EatFormatR16f,
+        EatFormatRgba16,
+        EatFormatRgb10A2,
+        EatFormatRg16,
+        EatFormatRg8,
+        EatFormatR16,
+        EatFormatR8,
+        EatFormatRgba16Snorm,
+        EatFormatRg16Snorm,
+        EatFormatRg8Snorm,
+        EatFormatR16Snorm,
+        EatFormatR8Snorm,
+        EatFormatRgba32i,
+        EatFormatRgba16i,
+        EatFormatRgba8i,
+        EatFormatR32i,
+        EatFormatRg32i,
+        EatFormatRg16i,
+        EatFormatRg8i,
+        EatFormatR16i,
+        EatFormatR8i,
+        EatFormatRgba32ui,
+        EatFormatRgba16ui,
+        EatFormatRgba8ui,
+        EatFormatR32ui,
+        EatFormatRgb10a2ui,
+        EatFormatRg32ui,
+        EatFormatRg16ui,
+        EatFormatRg8ui,
+        EatFormatR16ui,
+        EatFormatR8ui,
+        EatFormatUnknown,
+        EatNonWritable,
+        EatNonReadable
     };
 
     class TIntermAggregate;
diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h
index 01afc5a..684e88d 100644
--- a/glslang/MachineIndependent/iomapper.h
+++ b/glslang/MachineIndependent/iomapper.h
@@ -114,7 +114,7 @@
     bool doAutoLocationMapping() const;
     TSlotSet::iterator findSlot(int set, int slot);
     bool checkEmpty(int set, int slot);
-    bool validateInOut(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; };
+    bool validateInOut(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; }
     int reserveSlot(int set, int slot, int size = 1);
     int getFreeSlot(int set, int base, int size = 1);
     int resolveSet(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
@@ -125,7 +125,7 @@
     void addStage(EShLanguage stage) override {
         if (stage < EShLangCount)
             stageMask[stage] = true;
-    };
+    }
     uint32_t computeTypeLocationSize(const TType& type, EShLanguage stage);
 
     TSlotSetMap slots;
@@ -191,7 +191,7 @@
     typedef std::map<TString, int> TVarSlotMap;  // <resourceName, location/binding>
     typedef std::map<int, TVarSlotMap> TSlotMap; // <resourceKey, TVarSlotMap>
     TDefaultGlslIoResolver(const TIntermediate& intermediate);
-    bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; };
+    bool validateBinding(EShLanguage /*stage*/, TVarEntryInfo& /*ent*/) override { return true; }
     TResourceType getResourceType(const glslang::TType& type) override;
     int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) override;
     int resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) override;
@@ -209,7 +209,7 @@
     int buildStorageKey(EShLanguage stage, TStorageQualifier type) {
         assert(static_cast<uint32_t>(stage) <= 0x0000ffff && static_cast<uint32_t>(type) <= 0x0000ffff);
         return (stage << 16) | type;
-    };
+    }
 
 protected:
     // Use for mark pre stage, to get more interface symbol information.
@@ -242,7 +242,7 @@
         const_cast<TString&>(first) = _Right.first;
         second = _Right.second;
         return (*this);
-    };
+    }
 };
 typedef std::vector<TVarLivePair> TVarLiveVector;
 
@@ -253,7 +253,7 @@
     virtual ~TIoMapper() {}
     // grow the reflection stage by stage
     bool virtual addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*);
-    bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; };
+    bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; }
 };
 
 // I/O mapper for OpenGL
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 77ed7c3..13b0f6c 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -271,6 +271,9 @@
         localSize[0] = 1;
         localSize[1] = 1;
         localSize[2] = 1;
+        localSizeNotDefault[0] = false;
+        localSizeNotDefault[1] = false;
+        localSizeNotDefault[2] = false;
         localSizeSpecId[0] = TQualifier::layoutNotSet;
         localSizeSpecId[1] = TQualifier::layoutNotSet;
         localSizeSpecId[2] = TQualifier::layoutNotSet;
@@ -308,6 +311,12 @@
         case EShTargetSpv_1_3:
             processes.addProcess("target-env spirv1.3");
             break;
+        case EShTargetSpv_1_4:
+            processes.addProcess("target-env spirv1.4");
+            break;
+        case EShTargetSpv_1_5:
+            processes.addProcess("target-env spirv1.5");
+            break;
         default:
             processes.addProcess("target-env spirvUnknown");
             break;
@@ -648,8 +657,9 @@
 
     bool setLocalSize(int dim, int size)
     {
-        if (localSize[dim] > 1)
+        if (localSizeNotDefault[dim])
             return size == localSize[dim];
+        localSizeNotDefault[dim] = true;
         localSize[dim] = size;
         return true;
     }
@@ -776,6 +786,9 @@
     void merge(TInfoSink&, TIntermediate&);
     void finalCheck(TInfoSink&, bool keepUncalled);
 
+    bool buildConvertOp(TBasicType dst, TBasicType src, TOperator& convertOp) const;
+    TIntermTyped* createConversion(TBasicType convertTo, TIntermTyped* node) const;
+
     void addIoAccessed(const TString& name) { ioAccessed.insert(name); }
     bool inIoAccessed(const TString& name) const { return ioAccessed.find(name) != ioAccessed.end(); }
 
@@ -866,7 +879,6 @@
     bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&);
     void performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root);
     bool isConversionAllowed(TOperator op, TIntermTyped* node) const;
-    TIntermTyped* createConversion(TBasicType convertTo, TIntermTyped* node) const;
     std::tuple<TBasicType, TBasicType> getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const;
 
     // JohnK: I think this function should go away.
@@ -921,6 +933,7 @@
     TInterlockOrdering interlockOrdering;
     bool pointMode;
     int localSize[3];
+    bool localSizeNotDefault[3];
     int localSizeSpecId[3];
     bool earlyFragmentTests;
     bool postDepthCoverage;
diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h
old mode 100755
new mode 100644
diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp
index f2be2ff..9f1089d 100644
--- a/glslang/MachineIndependent/reflection.cpp
+++ b/glslang/MachineIndependent/reflection.cpp
@@ -112,6 +112,10 @@
             TReflection::TMapIndexToReflection &ioItems =
                 input ? reflection.indexToPipeInput : reflection.indexToPipeOutput;
 
+
+            TReflection::TNameToIndex &ioMapper =
+                input ? reflection.pipeInNameToIndex : reflection.pipeOutNameToIndex;
+
             if (reflection.options & EShReflectionUnwrapIOBlocks) {
                 bool anonymous = IsAnonymous(name);
 
@@ -129,12 +133,13 @@
                     blowUpIOAggregate(input, baseName, type);
                 }
             } else {
-                TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name.c_str());
-                if (it == reflection.nameToIndex.end()) {
-                    reflection.nameToIndex[name.c_str()] = (int)ioItems.size();
+                TReflection::TNameToIndex::const_iterator it = ioMapper.find(name.c_str());
+                if (it == ioMapper.end()) {
+                    // seperate pipe i/o params from uniforms and blocks
+                    // in is only for input in first stage as out is only for last stage. check traverse in call stack.
+                    ioMapper[name.c_str()] = ioItems.size();
                     ioItems.push_back(
                         TObjectReflection(name.c_str(), type, 0, mapToGlType(type), mapToGlArraySize(type), 0));
-
                     EShLanguageMask& stages = ioItems.back().stages;
                     stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());
                 } else {
diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h
index e3561a9..efdc893 100644
--- a/glslang/MachineIndependent/reflection.h
+++ b/glslang/MachineIndependent/reflection.h
@@ -152,6 +152,20 @@
     // see getIndex(const char*)
     int getIndex(const TString& name) const { return getIndex(name.c_str()); }
 
+
+    // for mapping any name to its index (only pipe input/output names)
+    int getPipeIOIndex(const char* name, const bool inOrOut) const
+    {
+        TNameToIndex::const_iterator it = inOrOut ? pipeInNameToIndex.find(name) : pipeOutNameToIndex.find(name);
+        if (it == (inOrOut ? pipeInNameToIndex.end() : pipeOutNameToIndex.end()))
+            return -1;
+        else
+            return it->second;
+    }
+
+    // see gePipeIOIndex(const char*, const bool)
+    int getPipeIOIndex(const TString& name, const bool inOrOut) const { return getPipeIOIndex(name.c_str(), inOrOut); }
+
     // Thread local size
     unsigned getLocalSize(int dim) const { return dim <= 2 ? localSize[dim] : 0; }
 
@@ -189,6 +203,8 @@
 
     TObjectReflection badReflection; // return for queries of -1 or generally out of range; has expected descriptions with in it for this
     TNameToIndex nameToIndex;        // maps names to indexes; can hold all types of data: uniform/buffer and which function names have been processed
+    TNameToIndex pipeInNameToIndex;  // maps pipe in names to indexes, this is a fix to seperate pipe I/O from uniforms and buffers.
+    TNameToIndex pipeOutNameToIndex; // maps pipe out names to indexes, this is a fix to seperate pipe I/O from uniforms and buffers.
     TMapIndexToReflection indexToUniform;
     TMapIndexToReflection indexToUniformBlock;
     TMapIndexToReflection indexToBufferVariable;
diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt
index e652f45..91fb45a 100644
--- a/glslang/OSDependent/Unix/CMakeLists.txt
+++ b/glslang/OSDependent/Unix/CMakeLists.txt
@@ -20,6 +20,7 @@
 endif()
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OSDependent
+    install(TARGETS OSDependent EXPORT OSDependentTargets
             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	install(EXPORT OSDependentTargets DESTINATION lib/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/glslang/OSDependent/Web/CMakeLists.txt b/glslang/OSDependent/Web/CMakeLists.txt
new file mode 100644
index 0000000..e8238c3
--- /dev/null
+++ b/glslang/OSDependent/Web/CMakeLists.txt
@@ -0,0 +1,24 @@
+add_executable(glslang.js "glslang.js.cpp")
+glslang_set_link_args(glslang.js)
+target_link_libraries(glslang.js glslang SPIRV)
+if(EMSCRIPTEN)
+    set_target_properties(glslang.js PROPERTIES
+        OUTPUT_NAME "glslang"
+        SUFFIX ".js")
+    em_link_pre_js(glslang.js "${CMAKE_CURRENT_SOURCE_DIR}/glslang.pre.js")
+
+    target_link_options(glslang.js PRIVATE
+        "SHELL:--bind -s MODULARIZE=1")
+    if(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
+        target_link_options(glslang.js PRIVATE
+            "SHELL:-s ENVIRONMENT=node -s BINARYEN_ASYNC_COMPILATION=0")
+    else()
+        target_link_options(glslang.js PRIVATE
+            "SHELL:-s ENVIRONMENT=web,worker")
+    endif()
+
+    if(NOT ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
+        add_custom_command(TARGET glslang.js POST_BUILD
+            COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js >> ${CMAKE_CURRENT_BINARY_DIR}/glslang.js)
+    endif()
+endif(EMSCRIPTEN)
diff --git a/glslang/OSDependent/Web/glslang.after.js b/glslang/OSDependent/Web/glslang.after.js
new file mode 100644
index 0000000..c2cfc35
--- /dev/null
+++ b/glslang/OSDependent/Web/glslang.after.js
@@ -0,0 +1,26 @@
+export default (() => {
+    const initialize = () => {
+        return new Promise(resolve => {
+            Module({
+                locateFile() {
+                    const i = import.meta.url.lastIndexOf('/')
+                    return import.meta.url.substring(0, i) + '/glslang.wasm';
+                },
+                onRuntimeInitialized() {
+                    resolve({
+                        compileGLSLZeroCopy: this.compileGLSLZeroCopy,
+                        compileGLSL: this.compileGLSL,
+                    });
+                },
+            });
+        });
+    };
+
+    let instance;
+    return () => {
+        if (!instance) {
+            instance = initialize();
+        }
+        return instance;
+    };
+})();
diff --git a/glslang/glslang.js.cpp b/glslang/OSDependent/Web/glslang.js.cpp
similarity index 97%
rename from glslang/glslang.js.cpp
rename to glslang/OSDependent/Web/glslang.js.cpp
index 45b3d3f..6cb93fe 100644
--- a/glslang/glslang.js.cpp
+++ b/glslang/OSDependent/Web/glslang.js.cpp
@@ -35,17 +35,16 @@
 
 #include <cstdio>
 #include <cstdint>
+#include <memory>
 
 #ifdef __EMSCRIPTEN__
 #include <emscripten.h>
-#endif  // __EMSCRIPTEN__
-#include <memory>
+#endif
 
-#include "../SPIRV/GlslangToSpv.h"
-#include "../SPIRV/doc.h"
-#include "./../glslang/Public/ShaderLang.h"
+#include "../../../SPIRV/GlslangToSpv.h"
+#include "../../../glslang/Public/ShaderLang.h"
 
-#ifndef EMSCRIPTEN_KEEPALIVE
+#ifndef __EMSCRIPTEN__
 #define EMSCRIPTEN_KEEPALIVE
 #endif
 
diff --git a/glslang/glslang.pre.js b/glslang/OSDependent/Web/glslang.pre.js
similarity index 100%
rename from glslang/glslang.pre.js
rename to glslang/OSDependent/Web/glslang.pre.js
diff --git a/glslang/OSDependent/Windows/CMakeLists.txt b/glslang/OSDependent/Windows/CMakeLists.txt
index f257418..f6bd4e9 100644
--- a/glslang/OSDependent/Windows/CMakeLists.txt
+++ b/glslang/OSDependent/Windows/CMakeLists.txt
@@ -15,6 +15,7 @@
 endif(WIN32)
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS OSDependent
+    install(TARGETS OSDependent EXPORT OSDependentTargets
             ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+	install(EXPORT OSDependentTargets DESTINATION lib/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index a3103c6..4cc6c2f 100755
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -156,6 +156,7 @@
     EShTargetSpv_1_2 = (1 << 16) | (2 << 8),          // SPIR-V 1.2
     EShTargetSpv_1_3 = (1 << 16) | (3 << 8),          // SPIR-V 1.3
     EShTargetSpv_1_4 = (1 << 16) | (4 << 8),          // SPIR-V 1.4
+    EShTargetSpv_1_5 = (1 << 16) | (5 << 8),          // SPIR-V 1.5
 } EShTargetLanguageVersion;
 
 struct TInputLanguage {
@@ -486,6 +487,8 @@
         environment.target.version = version;
     }
 
+    void getStrings(const char* const* &s, int& n) { s = strings; n = numStrings; }
+
 #ifdef ENABLE_HLSL
     void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; }
     bool getEnvTargetHlslFunctionality1() const { return environment.target.hlslFunctionality1; }
@@ -772,7 +775,7 @@
     TProgram();
     virtual ~TProgram();
     void addShader(TShader* shader) { stages[shader->stage].push_back(shader); }
-
+    std::list<TShader*>& getShaders(EShLanguage stage) { return stages[stage]; }
     // Link Validation interface
     bool link(EShMessages);
     const char* getInfoLog();
@@ -788,6 +791,7 @@
     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;
@@ -817,6 +821,9 @@
     // can be used for glGetUniformIndices()
     int getUniformIndex(const char *name) const        { return getReflectionIndex(name); }
 
+    int getPipeIOIndex(const char *name, const bool inOrOut) const
+                                                       { return getReflectionPipeIOIndex(name, inOrOut); }
+
     // can be used for "name" part of glGetActiveUniform()
     const char *getUniformName(int index) const        { return getUniform(index).name.c_str(); }
 
diff --git a/glslang/updateGrammar b/glslang/updateGrammar
index 3779458..9384db9 100755
--- a/glslang/updateGrammar
+++ b/glslang/updateGrammar
@@ -1,4 +1,4 @@
-#!/usr/bin/bash
+#!/bin/bash
 
 if [ "$1" = 'web' ]
 then
diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt
index f678cb6..77d217f 100644
--- a/gtests/CMakeLists.txt
+++ b/gtests/CMakeLists.txt
@@ -31,8 +31,9 @@
         set_property(TARGET glslangtests PROPERTY FOLDER tests)
         glslang_set_link_args(glslangtests)
         if(ENABLE_GLSLANG_INSTALL)
-            install(TARGETS glslangtests
+            install(TARGETS glslangtests EXPORT glslangtestsTargets
                     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+			install(EXPORT glslangtestsTargets DESTINATION lib/cmake)
         endif(ENABLE_GLSLANG_INSTALL)
 
         set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test")
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
old mode 100644
new mode 100755
index 7738c80..59c687d
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -230,6 +230,7 @@
         {"hlsl.hull.void.tesc", "main"},
         {"hlsl.hull.ctrlpt-1.tesc", "main"},
         {"hlsl.hull.ctrlpt-2.tesc", "main"},
+        {"hlsl.format.rwtexture.frag", "main"},
         {"hlsl.groupid.comp", "main"},
         {"hlsl.identifier.sample.frag", "main"},
         {"hlsl.if.frag", "PixelShaderFunction"},
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index d12d39a..9620341 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -284,6 +284,7 @@
         "spv.bufferhandle7.frag",
         "spv.bufferhandle8.frag",
         "spv.bufferhandle9.frag",
+        "spv.bufferhandleUvec2.frag",
         "spv.bufferhandle_Error.frag",
         "spv.builtInXFB.vert",
         "spv.conditionalDemote.frag",
@@ -403,6 +404,7 @@
         "spv.storageBuffer.vert",
         "spv.precise.tese",
         "spv.precise.tesc",
+        "spv.volatileAtomic.comp",
         "spv.vulkan100.subgroupArithmetic.comp",
         "spv.vulkan100.subgroupPartitioned.comp",
         "spv.xfb.vert",
@@ -459,6 +461,22 @@
         "spv.subgroupShuffleRelative.comp",
         "spv.subgroupQuad.comp",
         "spv.subgroupVote.comp",
+        "spv.subgroupExtendedTypesArithmetic.comp",
+        "spv.subgroupExtendedTypesArithmeticNeg.comp",
+        "spv.subgroupExtendedTypesBallot.comp",
+        "spv.subgroupExtendedTypesBallotNeg.comp",
+        "spv.subgroupExtendedTypesClustered.comp",
+        "spv.subgroupExtendedTypesClusteredNeg.comp",
+        "spv.subgroupExtendedTypesPartitioned.comp",
+        "spv.subgroupExtendedTypesPartitionedNeg.comp",
+        "spv.subgroupExtendedTypesShuffle.comp",
+        "spv.subgroupExtendedTypesShuffleNeg.comp",
+        "spv.subgroupExtendedTypesShuffleRelative.comp",
+        "spv.subgroupExtendedTypesShuffleRelativeNeg.comp",
+        "spv.subgroupExtendedTypesQuad.comp",
+        "spv.subgroupExtendedTypesQuadNeg.comp",
+        "spv.subgroupExtendedTypesVote.comp",
+        "spv.subgroupExtendedTypesVoteNeg.comp",
         "spv.vulkan110.storageBuffer.vert",
     })),
     FileNameAsCustomTestSuffix
diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt
index 7436dde..44f9d6a 100644
--- a/hlsl/CMakeLists.txt
+++ b/hlsl/CMakeLists.txt
@@ -33,12 +33,13 @@
 
 if(ENABLE_GLSLANG_INSTALL)
     if(BUILD_SHARED_LIBS)
-        install(TARGETS HLSL
+        install(TARGETS HLSL EXPORT HLSLTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
     else()
-        install(TARGETS HLSL
+        install(TARGETS HLSL EXPORT HLSLTargets
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
+	install(EXPORT HLSLTargets DESTINATION lib/cmake)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/hlsl/hlslAttributes.cpp b/hlsl/hlslAttributes.cpp
index 261cec3..0cc0d3f 100644
--- a/hlsl/hlslAttributes.cpp
+++ b/hlsl/hlslAttributes.cpp
@@ -58,6 +58,49 @@
                 return EatConstantId;
             else if (name == "push_constant")
                 return EatPushConstant;
+        } else if (nameSpace == "spv") {
+            if (name == "format_rgba32f")       return EatFormatRgba32f;
+            if (name == "format_rgba16f")       return EatFormatRgba16f;
+            if (name == "format_r32f")          return EatFormatR32f;
+            if (name == "format_rgba8")         return EatFormatRgba8;
+            if (name == "format_rgba8snorm")    return EatFormatRgba8Snorm;
+            if (name == "format_rg32f")         return EatFormatRg32f;
+            if (name == "format_rg16f")         return EatFormatRg16f;
+            if (name == "format_r11fg11fb10f")  return EatFormatR11fG11fB10f;
+            if (name == "format_r16f")          return EatFormatR16f;
+            if (name == "format_rgba16")        return EatFormatRgba16;
+            if (name == "format_rgb10a2")       return EatFormatRgb10A2;
+            if (name == "format_rg16")          return EatFormatRg16;
+            if (name == "format_rg8")           return EatFormatRg8;
+            if (name == "format_r16")           return EatFormatR16;
+            if (name == "format_r8")            return EatFormatR8;
+            if (name == "format_rgba16snorm")   return EatFormatRgba16Snorm;
+            if (name == "format_rg16snorm")     return EatFormatRg16Snorm;
+            if (name == "format_rg8snorm")      return EatFormatRg8Snorm;
+            if (name == "format_r16snorm")      return EatFormatR16Snorm;
+            if (name == "format_r8snorm")       return EatFormatR8Snorm;
+            if (name == "format_rgba32i")       return EatFormatRgba32i;
+            if (name == "format_rgba16i")       return EatFormatRgba16i;
+            if (name == "format_rgba8i")        return EatFormatRgba8i;
+            if (name == "format_r32i")          return EatFormatR32i;
+            if (name == "format_rg32i")         return EatFormatRg32i;
+            if (name == "format_rg16i")         return EatFormatRg16i;
+            if (name == "format_rg8i")          return EatFormatRg8i;
+            if (name == "format_r16i")          return EatFormatR16i;
+            if (name == "format_r8i")           return EatFormatR8i;
+            if (name == "format_rgba32ui")      return EatFormatRgba32ui;
+            if (name == "format_rgba16ui")      return EatFormatRgba16ui;
+            if (name == "format_rgba8ui")       return EatFormatRgba8ui;
+            if (name == "format_r32ui")         return EatFormatR32ui;
+            if (name == "format_rgb10a2ui")     return EatFormatRgb10a2ui;
+            if (name == "format_rg32ui")        return EatFormatRg32ui;
+            if (name == "format_rg16ui")        return EatFormatRg16ui;
+            if (name == "format_rg8ui")         return EatFormatRg8ui;
+            if (name == "format_r16ui")         return EatFormatR16ui;
+            if (name == "format_r8ui")          return EatFormatR8ui;
+
+            if (name == "nonwritable")    return EatNonWritable;
+            if (name == "nonreadable")    return EatNonReadable;
         } else if (nameSpace.size() > 0)
             return EatNone;
 
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
old mode 100755
new mode 100644
index 45cf5d5..8ab1a90
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -3221,6 +3221,11 @@
             return false;
         }
 
+        if (arguments == nullptr) {
+            expected("one or more arguments");
+            return false;
+        }
+
         // hook it up
         node = parseContext.handleFunctionCall(arguments->getLoc(), constructorFunction, arguments);
 
diff --git a/hlsl/hlslGrammar.h b/hlsl/hlslGrammar.h
old mode 100755
new mode 100644
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
old mode 100644
new mode 100755
index 1549e3a..be665ac
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -1950,6 +1950,52 @@
                 setSpecConstantId(loc, type.getQualifier(), value);
             }
             break;
+
+        // image formats
+        case EatFormatRgba32f:      type.getQualifier().layoutFormat = ElfRgba32f;      break;
+        case EatFormatRgba16f:      type.getQualifier().layoutFormat = ElfRgba16f;      break;
+        case EatFormatR32f:         type.getQualifier().layoutFormat = ElfR32f;         break;
+        case EatFormatRgba8:        type.getQualifier().layoutFormat = ElfRgba8;        break;
+        case EatFormatRgba8Snorm:   type.getQualifier().layoutFormat = ElfRgba8Snorm;   break;
+        case EatFormatRg32f:        type.getQualifier().layoutFormat = ElfRg32f;        break;
+        case EatFormatRg16f:        type.getQualifier().layoutFormat = ElfRg16f;        break;
+        case EatFormatR11fG11fB10f: type.getQualifier().layoutFormat = ElfR11fG11fB10f; break;
+        case EatFormatR16f:         type.getQualifier().layoutFormat = ElfR16f;         break;
+        case EatFormatRgba16:       type.getQualifier().layoutFormat = ElfRgba16;       break;
+        case EatFormatRgb10A2:      type.getQualifier().layoutFormat = ElfRgb10A2;      break;
+        case EatFormatRg16:         type.getQualifier().layoutFormat = ElfRg16;         break;
+        case EatFormatRg8:          type.getQualifier().layoutFormat = ElfRg8;          break;
+        case EatFormatR16:          type.getQualifier().layoutFormat = ElfR16;          break;
+        case EatFormatR8:           type.getQualifier().layoutFormat = ElfR8;           break;
+        case EatFormatRgba16Snorm:  type.getQualifier().layoutFormat = ElfRgba16Snorm;  break;
+        case EatFormatRg16Snorm:    type.getQualifier().layoutFormat = ElfRg16Snorm;    break;
+        case EatFormatRg8Snorm:     type.getQualifier().layoutFormat = ElfRg8Snorm;     break;
+        case EatFormatR16Snorm:     type.getQualifier().layoutFormat = ElfR16Snorm;     break;
+        case EatFormatR8Snorm:      type.getQualifier().layoutFormat = ElfR8Snorm;      break;
+        case EatFormatRgba32i:      type.getQualifier().layoutFormat = ElfRgba32i;      break;
+        case EatFormatRgba16i:      type.getQualifier().layoutFormat = ElfRgba16i;      break;
+        case EatFormatRgba8i:       type.getQualifier().layoutFormat = ElfRgba8i;       break;
+        case EatFormatR32i:         type.getQualifier().layoutFormat = ElfR32i;         break;
+        case EatFormatRg32i:        type.getQualifier().layoutFormat = ElfRg32i;        break;
+        case EatFormatRg16i:        type.getQualifier().layoutFormat = ElfRg16i;        break;
+        case EatFormatRg8i:         type.getQualifier().layoutFormat = ElfRg8i;         break;
+        case EatFormatR16i:         type.getQualifier().layoutFormat = ElfR16i;         break;
+        case EatFormatR8i:          type.getQualifier().layoutFormat = ElfR8i;          break;
+        case EatFormatRgba32ui:     type.getQualifier().layoutFormat = ElfRgba32ui;     break;
+        case EatFormatRgba16ui:     type.getQualifier().layoutFormat = ElfRgba16ui;     break;
+        case EatFormatRgba8ui:      type.getQualifier().layoutFormat = ElfRgba8ui;      break;
+        case EatFormatR32ui:        type.getQualifier().layoutFormat = ElfR32ui;        break;
+        case EatFormatRgb10a2ui:    type.getQualifier().layoutFormat = ElfRgb10a2ui;    break;
+        case EatFormatRg32ui:       type.getQualifier().layoutFormat = ElfRg32ui;       break;
+        case EatFormatRg16ui:       type.getQualifier().layoutFormat = ElfRg16ui;       break;
+        case EatFormatRg8ui:        type.getQualifier().layoutFormat = ElfRg8ui;        break;
+        case EatFormatR16ui:        type.getQualifier().layoutFormat = ElfR16ui;        break;
+        case EatFormatR8ui:         type.getQualifier().layoutFormat = ElfR8ui;         break;
+        case EatFormatUnknown:      type.getQualifier().layoutFormat = ElfNone;         break;
+
+        case EatNonWritable:  type.getQualifier().readonly = true;   break;
+        case EatNonReadable:  type.getQualifier().writeonly = true;  break;
+
         default:
             if (! allowEntry)
                 warn(loc, "attribute does not apply to a type", "", "");
diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h
old mode 100755
new mode 100644
diff --git a/known_good.json b/known_good.json
index 9946335..3d8994a 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,14 +5,14 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "9b3cc3e05337358d0bd9fec1b7a51e3cbf55312b"
+      "commit" : "c3ca04741945c332ddbeb7d7125dbae2809b7195"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "38cafab379e5d16137cb97a485b9385191039b92"
+      "commit" : "b252a50953ac4375cb1864e94f4b0234db9d215d"
     }
   ]
 }
diff --git a/kokoro/linux-clang-release-bazel/build.sh b/kokoro/linux-clang-release-bazel/build.sh
new file mode 100644
index 0000000..89c23fe
--- /dev/null
+++ b/kokoro/linux-clang-release-bazel/build.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+# Copyright (c) 2019 Google LLC.
+#
+# 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.
+#
+# Linux Build Script.
+
+# Fail on any error.
+set -e
+# Display commands being run.
+set -x
+
+CC=clang
+CXX=clang++
+SRC=$PWD/github/glslang
+cd $SRC
+
+# Bazel limitation: No 'External' directory is allowed!!
+mv External third_party
+
+gsutil cp gs://bazel/0.29.1/release/bazel-0.29.1-linux-x86_64 .
+chmod +x bazel-0.29.1-linux-x86_64
+
+echo $(date): Build everything...
+./bazel-0.29.1-linux-x86_64 build :all
+echo $(date): Build completed.
+
+echo $(date): Starting bazel test...
+./bazel-0.29.1-linux-x86_64 test :all
+echo $(date): Bazel test completed.
diff --git a/kokoro/linux-clang-release-bazel/continuous.cfg b/kokoro/linux-clang-release-bazel/continuous.cfg
new file mode 100644
index 0000000..054f4f6
--- /dev/null
+++ b/kokoro/linux-clang-release-bazel/continuous.cfg
@@ -0,0 +1,16 @@
+# Copyright (c) 2019 Google LLC.
+#
+# 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.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/linux-clang-release-bazel/build.sh"
diff --git a/kokoro/linux-clang-release-bazel/presubmit.cfg b/kokoro/linux-clang-release-bazel/presubmit.cfg
new file mode 100644
index 0000000..572898c
--- /dev/null
+++ b/kokoro/linux-clang-release-bazel/presubmit.cfg
@@ -0,0 +1,16 @@
+# Copyright (c) 2019 Google LLC.
+#
+# 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.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/linux-clang-release-bazel/build.sh"
diff --git a/kokoro/macos-clang-release-bazel/build.sh b/kokoro/macos-clang-release-bazel/build.sh
new file mode 100644
index 0000000..a899c13
--- /dev/null
+++ b/kokoro/macos-clang-release-bazel/build.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+# Copyright (c) 2019 Google LLC.
+#
+# 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.
+#
+# macOS Build Script.
+
+# Fail on any error.
+set -e
+# Display commands being run.
+set -x
+
+CC=clang
+CXX=clang++
+SRC=$PWD/github/glslang
+cd $SRC
+
+mv External third_party
+
+# Get bazel 0.29.1.
+gsutil cp gs://bazel/0.29.1/release/bazel-0.29.1-darwin-x86_64 .
+chmod +x bazel-0.29.1-darwin-x86_64
+
+echo $(date): Build everything...
+./bazel-0.29.1-darwin-x86_64 build :all
+echo $(date): Build completed.
+
+echo $(date): Starting bazel test...
+./bazel-0.29.1-darwin-x86_64 test :all
+echo $(date): Bazel test completed.
diff --git a/kokoro/macos-clang-release-bazel/continuous.cfg b/kokoro/macos-clang-release-bazel/continuous.cfg
new file mode 100644
index 0000000..5822fd2
--- /dev/null
+++ b/kokoro/macos-clang-release-bazel/continuous.cfg
@@ -0,0 +1,16 @@
+# Copyright (c) 2019 Google LLC.
+#
+# 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.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/macos-clang-release-bazel/build.sh"
diff --git a/kokoro/macos-clang-release-bazel/presubmit.cfg b/kokoro/macos-clang-release-bazel/presubmit.cfg
new file mode 100644
index 0000000..12cf646
--- /dev/null
+++ b/kokoro/macos-clang-release-bazel/presubmit.cfg
@@ -0,0 +1,16 @@
+# Copyright (c) 2019 Google LLC.
+#
+# 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.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/macos-clang-release-bazel/build.sh"
diff --git a/kokoro/windows-msvc-2015-release-bazel/build.bat b/kokoro/windows-msvc-2015-release-bazel/build.bat
new file mode 100644
index 0000000..969d74d
--- /dev/null
+++ b/kokoro/windows-msvc-2015-release-bazel/build.bat
@@ -0,0 +1,55 @@
+:: Copyright (c) 2019 Google LLC.
+::
+:: 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.
+::
+:: Windows Build Script.
+
+@echo on
+
+set SRC=%cd%\github\glslang
+
+:: Force usage of python 3.6
+set PATH=C:\python36;%PATH%
+cd %SRC%
+
+mv External third_party
+
+:: REM Install Bazel.
+wget -q https://github.com/bazelbuild/bazel/releases/download/0.29.1/bazel-0.29.1-windows-x86_64.zip
+unzip -q bazel-0.29.1-windows-x86_64.zip
+
+:: Set up MSVC
+call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64
+set BAZEL_VS=C:\Program Files (x86)\Microsoft Visual Studio 14.0
+set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
+set BAZEL_SH=c:\tools\msys64\usr\bin\bash.exe
+set BAZEL_PYTHON=c:\tools\python2\python.exe
+
+:: #########################################
+:: Start building.
+:: #########################################
+echo "Build everything... %DATE% %TIME%"
+bazel.exe build :all
+if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL%
+echo "Build Completed %DATE% %TIME%"
+
+:: ##############
+:: Run the tests
+:: ##############
+echo "Running Tests... %DATE% %TIME%"
+bazel.exe test :all
+if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL%
+echo "Tests Completed %DATE% %TIME%"
+
+exit /b 0
+
diff --git a/kokoro/windows-msvc-2015-release-bazel/continuous.cfg b/kokoro/windows-msvc-2015-release-bazel/continuous.cfg
new file mode 100644
index 0000000..4b06889
--- /dev/null
+++ b/kokoro/windows-msvc-2015-release-bazel/continuous.cfg
@@ -0,0 +1,16 @@
+# Copyright (c) 2019 Google LLC.
+#
+# 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.
+
+# Continuous build configuration.
+build_file: "glslang/kokoro/windows-msvc-2015-release-bazel/build.bat"
diff --git a/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg b/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg
new file mode 100644
index 0000000..08bcefb
--- /dev/null
+++ b/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg
@@ -0,0 +1,16 @@
+# Copyright (c) 2019 Google LLC.
+#
+# 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.
+
+# Presubmit build configuration.
+build_file: "glslang/kokoro/windows-msvc-2015-release-bazel/build.bat"